精华内容
下载资源
问答
  • 51单片机点阵

    2014-05-08 18:00:02
    基于51单片机点阵程序(74hc595)
  • 51单片机点阵显示

    2012-03-14 19:22:28
    51单片机点阵牌显示,通过把汉字取模转换成c语言程序,通过译码器然后显示在led上
  • 我们用单片机做“显示”的时候,往往需要把字符转换成代码。这里我给大家分享一个这样的小软件,功能还算不错,希望大家喜欢!支持各种大小的点阵屏,用于清翔51单片机点阵屏取模,自制的取模软件,内含详细教程
  • 51单片机点阵模拟电梯代码,确认调试通过。大家参考
  • C51单片机点阵贪吃蛇代码(16*16点阵和8*8点阵都有)。keil4的完整工程文件夹,可以用红外遥控器控制蛇的上下左右移动,注释清楚,内附我用到的板子原理图以供移植参考。
  • 51单片机点阵流动广告模拟代码,确认调试通过的。可以参考
  • 51单片机 点阵8x8 kiel proteus仿真
  • 51单片机点阵解析

    2016-08-14 16:29:54
    感谢大熙熙 对51单片机点阵代码的详细分析 http://www.cnblogs.com/one-meter/p/4188277.html 网址阐述了他对代码的解析 不过部分代码解析不够透彻 我融入了个人对代码的理解 并且做了详细的解析 ...

    感谢大熙熙 对51单片机点阵代码的详细分析

    http://www.cnblogs.com/one-meter/p/4188277.html

    网址阐述了他对代码的解析


    不过部分代码解析不够透彻

    我融入了个人对代码的理解

    并且做了详细的解析


    代码参考了普中给的代码

    网上代码很多可以自己下载测试


    代码如下



     #include <reg52.h>
     #include <intrins.h>


    //重定义 函数变量
    #define uchar unsigned char
    #define uint unsigned int
    #define ulong unsigned long
     //spi 所使用的 3个管脚 并进行定义


    sbit MOSIO =P3^4;
    sbit R_CLK =P3^5;
    sbit S_CLK =P3^6;


    //--点阵显示数组--//
    uchar code tab0[] = {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,
     0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
     0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,
     0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00}; 
    //--10字模--//
    uchar code tab1[] = 
    {0, 0, 0, 0, 0, 0, 8, 24, 14, 36, 8, 66, 8, 66, 8, 66, 
     8, 66, 8, 66, 8, 66, 8, 36, 62, 24, 0, 0, 0, 0, 0, 0};


    //--09字模--//
    uchar code tab2[] = 
    {0, 0, 0, 0, 0, 0, 24, 24, 36, 36, 66, 66, 66, 66, 66,
     66, 66, 100, 66, 88, 66, 64, 66, 64, 36, 36, 24, 28, 0, 0, 0, 0} ;


    //--08字模--//
    uchar code tab3[] = 
    {0, 0, 0, 0, 0, 0, 24, 60, 36, 66, 66, 66, 66, 66, 66, 36,
    66, 24, 66, 36, 66, 66, 66, 66, 36, 66, 24, 60, 0, 0, 0, 0};


    //--07字模--//
    uchar code tab4[] = 
    {0, 0, 0, 0, 0, 0, 24, 126, 36, 34, 66, 34, 66, 16, 66, 16,
     66, 8, 66, 8, 66, 8, 66, 8, 36, 8, 24, 8, 0, 0, 0, 0};


    //--06字模--//
    uchar code tab5[] = 
    {0, 0, 0, 0, 0, 0, 24, 56, 36, 36, 66, 2, 66, 2, 66, 26, 66,
     38, 66, 66, 66, 66, 66, 66, 36, 36, 24, 24, 0, 0, 0, 0};


    //--05字模--//
    uchar code tab6[] = 
    {0, 0, 0, 0, 0, 0, 24, 126, 36, 2, 66, 2, 66, 2, 66, 26, 66,
     38, 66, 64, 66, 64, 66, 66, 36, 34, 24, 28, 0, 0, 0, 0};


    //--04字模--//
    uchar code tab7[] = 
    {0, 0, 0, 0, 0, 0, 24, 32, 36, 48, 66, 40, 66, 36, 66, 36, 66,
    34, 66, 34, 66, 126, 66, 32, 36, 32, 24, 120, 0, 0, 0, 0};


    //--03字模--//
    uchar code tab8[] = 
    {0, 0, 0, 0, 0, 0, 24, 60, 36, 66, 66, 66, 66, 32, 66, 24, 66,
     32, 66, 64, 66, 64, 66, 66, 36, 34, 24, 28, 0, 0, 0, 0};


    //--02字模--//
    uchar code tab9[] = 
    {0, 0, 0, 0, 0, 0, 24, 60, 36, 66, 66, 66, 66, 66, 66, 32, 66,
     32, 66, 16, 66, 8, 66, 4, 36, 66, 24, 126, 0, 0, 0, 0};


    //--01字模--//
    uchar code tab10[] = 
    {0, 0, 0, 0, 0, 0, 24, 8, 36, 14, 66, 8, 66, 8, 66, 8, 66, 8, 66,
    8, 66, 8, 66, 8, 36, 8, 24, 62, 0, 0, 0, 0};


    //--00字模--//
    uchar code tab11[] = 
    {0, 0, 0, 0, 0, 0, 24, 24, 36, 36, 66, 66, 66, 66, 66, 66, 66, 66,
    66, 66, 66, 66, 66, 66, 36, 36, 24, 24, 0, 0, 0, 0};


    //--GO--//
    uchar code tab12[] = 
    {0, 0, 0, 0, 0, 0, 60, 28, 34, 34, 34, 65, 1, 65, 1, 65, 1, 65, 113,
     65, 33, 65, 34, 65, 34, 34, 28, 28, 0, 0, 0, 0};








    //全局变量 


    ulong column; //列
    ulong row; //行
    ulong dt;


    //具体分析 查看 函数实现方法
    void HC595_data(uchar BT3,uchar BT2,uchar BT1,uchar BT0);


    void main()
    {
    int  k=0;


    while(1)
    {
     //for()   this is used by  how long 

    for(k=0;k<16;k++)
    {
    HC595_data(~tab12[2*k+1],~tab12[2*k],tab0[2*k],tab0[2*k+1]);
    }
       HC595_data(0xff,0xff,0,0);
    }
    }


    /********************************
     BT3 是第2列    。。。。。。。 因此
     输入为   列2 列1   行1(值是行2的值)  行2(值是行1的值)   
     然而 实际不是这样  
     原因是  74h595 是4个并联的 相当于 8个 8*8
     而且只有一个输入  当输入值时 会进行进位操作
     可以理解为 压栈 
     所以变成了 行2(值是行1的值) 行 1 (值是行2的值) 列 2  列 1   
    **********************************/
    void HC595_data(uchar BT3,uchar BT2,uchar BT1,uchar BT0)
    {
    uchar i;
    for(i=0;i<8;i++)
    {
    MOSIO=BT3>>7;   //BT 右移7位  即是得到最高位的值
    BT3<<=1; //左移1位  最高为溢出,第7位变成最高位,达到按位输入的功能
    S_CLK=0; //开始累加
    S_CLK=1; //关闭
    }


    for(i=0;i<8;i++)
    {
    MOSIO=BT2>>7;   //BT 右移7位  即是得到最高位的值
    BT2<<=1; //左移1位  最高为溢出,第7位变成最高位,达到按位输入的功能
    S_CLK=0; //开始累加
    S_CLK=1; //关闭
    }


    for(i=0;i<8;i++)
    {
    MOSIO=BT1>>7;   //BT 右移7位  即是得到最高位的值
    BT1<<=1; //左移1位  最高为溢出,第7位变成最高位,达到按位输入的功能
    S_CLK=0; //开始累加
    S_CLK=1; //关闭
    }


    for(i=0;i<8;i++)
    {
    MOSIO=BT0>>7;   //BT 右移7位  即是得到最高位的值
    BT0<<=1; //左移1位  最高为溢出,第7位变成最高位,达到按位输入的功能
    S_CLK=0; //开始累加
    S_CLK=1; //关闭
    }
    R_CLK = 0; //set dataline low
    R_CLK = 1; //片选
    R_CLK = 0; //set dataline low
    }



    展开全文
  • 一个简单的贪吃蛇用51单片机8*8点阵和矩阵键盘操作,内容很小白,大佬请绕路 内有仿真(仅供学习交流)
  • 51单片机实现点阵俄罗斯方块游戏
  • 51单片机 点阵8x8和键盘4X4的联合 kiel proteus仿真
  • 51单片机点阵实验

    2019-11-11 11:49:35
    1.1点阵实验图 P0控制列,P0输出低电平有效;74hc595输出控制行,输出高电平有效. 让P0^7的端口为低电平,P0的其他端口为高电平;D7的端口为高电平,则第一行第一列的led被点亮 1.2 74hc595的原理图 (1)D0...

    1.电路图解析

    1.1点阵实验图

    P0控制全部行有效,P0输出低电平有效;74hc595输出控制全部列有效,输出高电平有效.

    让P0^7的端口为低电平,P0的其他端口为高电平;D7的端口为高电平,则第一行第一列的led被点亮

    1.2 74hc595的原理图

    (1)D0~D7,并行输出,接LED。

    (2)16号和8号引脚,分别接Vcc,Gnd。

    (3)OE,13号引脚,低电平才输出有效,让它接地。

    (4)10号引脚,主复位引脚,低有效。目前不需要复位,直接接VCC就好.

    (5)14号引脚SER,接在集成板的P3^4,为串行输入端。

    (6)11号引脚SRCLK,接在集成板的P3^6;上升沿时,将串行口RCLK的一位,移位输入。

    (7)12号引脚RCLK,接在集成板的P3^5;上升沿时,将移入的8位数据,送到存储寄存器。

    1.2实验程序(显示第一个灯):

    #include "reg51.h"
    #include<intrins.h>

    sbit SER=P3^6;
    sbit SRCLK=P3^5;
    sbit RCLK=P3^4;

    void HC595sendbyte(unsigned char dat)
    {
         unsigned char a;
        SRCLK=0;
        RCLK=0;
        for(a=0;a<8;a++)//从高位到低位,依次串行输入
        {
          SER=dat>>7;
          dat<<=1;

          SRCLK=1;    //上升沿,依次串行输入8位数据
          _nop_();    //一个机器周期
          _nop_();
          SRCLK=0;
         }

         RCLK=1;    //上升沿,将数据送入存储寄存器
         _nop_();
         _nop_();
         RCLK=0;
    }

    void main()
    {
      HC595sendbyte(0x00);
      while(1)
      {
        P0=0x7f;
        HC595sendbyte(0x80);
       }
     }

    1.3实验程序(显示数字0):

    #include "reg51.h"             //此文件中定义了单片机的一些特殊功能寄存器
    #include<intrins.h>

    typedef unsigned int u16;      //对数据类型进行声明定义
    typedef unsigned char u8;

    sbit SRCLK=P3^6;
    sbit RCLK=P3^5;
    sbit SER=P3^4;

    u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};//D0~D7控制行
    u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//P0控制列
    /*******************************************************************************
    * 函 数 名         : delay
    * 函数功能           : 延时函数,i=1时,大约延时10us
    *******************************************************************************/
    void delay(u16 i)
    {
        while(i--);    
    }

    /*******************************************************************************
    * 函数名         : Hc595SendByte(u8 dat)
    * 函数功能           : 向74HC595发送一个字节的数据
    * 输入           : 无
    * 输出              : 无
    *******************************************************************************/
    void Hc595SendByte(u8 dat)
    {
        u8 a;
        SRCLK=0;
        RCLK=0;
        for(a=0;a<8;a++)
        {
            SER=dat>>7;
            dat<<=1;

            SRCLK=1;
            _nop_();
            _nop_();
            SRCLK=0;    
        }

        RCLK=1;
        _nop_();
        _nop_();
        RCLK=0;
    }

    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能         : 主函数
    * 输    入       : 无
    * 输    出         : 无
    *******************************************************************************/
    void main()
    {            
        u8 i;
        while(1)
        {
            P0=0x7f;
            for(i=0;i<8;i++)
            {
                P0=ledwei[i];          //位选,先选择一列
                Hc595SendByte(ledduan[i]);    //发送段选数据(行数据)
                delay(100);           //延时
                Hc595SendByte(0x00);  //消隐
            }    
        }        
    }

    展开全文
  • 个人毕业设计,实现用51单片机控制点阵显示汉字,并可以通过VB编写的上位机来改变汉字及显示汉字的移动方向和移动速度。
  • 下面我们就用程序来实现一下,特别注意,控制点阵左侧引脚的 74HC138是原理图上的 U4,8 个引脚自上而下依次由 U4 的 Y0~Y7 输出来控制。 #include <reg52.h> sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ...

    在这里插入图片描述
    在这里插入图片描述
    我们把 9 脚置成高电平、13 脚置成低电平的话,左上角的那个 LED
    小灯就会亮了。下面我们就用程序来实现一下,特别注意,控制点阵左侧引脚的 74HC138是原理图上的 U4,8 个引脚自上而下依次由 U4 的 Y0~Y7 输出来控制。

    在这里插入图片描述

    #include <reg52.h>
    sbit ADDR0 = P1^0;
    sbit ADDR1 = P1^1;
    sbit ADDR2 = P1^2;
    sbit ADDR3 = P1^3;
    sbit ENLED = P1^4;
    unsigned char code image[] = { //图片的字模表
     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
     0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF,
     0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,0xFF,
     0x99,0x99,0x99,0x99,0x99,0x81,0xC3,0xFF,
     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
    };
    
    void main()
    {
     EA = 1; //使能总中断
     ENLED = 0; //使能 U4,选择 LED 点阵
     ADDR3 = 0;
     TMOD = 0x01; //设置 T0 为模式 1
     TH0 = 0xFC; //为 T0 赋初值 0xFC67,定时 1ms
     TL0 = 0x67;
     ET0 = 1; //使能 T0 中断
     TR0 = 1; //启动 T0
     while (1);
    }
    /* 定时器 0 中断服务函数 */
    void InterruptTimer0() interrupt 1
    {
     static unsigned char i = 0; //动态扫描的索引
     static unsigned char tmr = 0; //250ms 软件定时器
     static unsigned char index = 0; //图片刷新索引
     TH0 = 0xFC; //重新加载初值
     TL0 = 0x67;
    //以下代码完成 LED 点阵动态扫描刷新
     P0 = 0xFF; //显示消隐
     switch (i)
     {
     case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index+0]; break;
     case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index+1]; break;
     case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index+2]; break;
     case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index+3]; break;
     case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index+4]; break;
     case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index+5]; break;
     case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index+6]; break;
     case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index+7]; break;
     default: break;
     }
     //以下代码完成每 250ms 改变一帧图像
     tmr++;
     if (tmr >= 250) //达到 250ms 时改变一次图片索引
     {
     tmr = 0;
     index++;
     if (index >= 32) //图片索引达到 32 后归零
     {
     index = 0;
     }
     }
    }
    

    效果图:
    在这里插入图片描述

    展开全文
  • 课程设计题二十二:点阵显示器显示设计 (1)上电后滚动显示学校名称。 (2)按键1按下,滚动显示班级。 (3)按键2按下,滚动显示姓名及学号。 (4)一键开关。 首先找一个差不多的设计 这个设计网上找的,是一个16...

    课程设计题二十二:点阵显示器显示设计
    (1)上电后滚动显示学校名称。
    (2)按键1按下,滚动显示班级。
    (3)按键2按下,滚动显示姓名及学号。
    (4)一键开关。

    首先找一个差不多的设计

    这个设计网上找的,是一个16*16点阵(4个拼凑的)显示一个设计。
    这个设计可以向左显示广告语、向右显示广告语、加速、减速、开始、暂停。
    在这里插入图片描述
    修改程序到自己可以使用:
    (1)需要自己修改程序里变量zi = 15,有多少个字就写多少。
    (2)汉字取模应该是下图这样的设置。
    (3)根据取模修改程序里unsigned char code tab[]数组。最开始的32个字节不要动,最后面的32个字节也不要动。
    在这里插入图片描述

    #include <reg51.h>                                                                                      /* 头文件 */
    
    sbit	shcp	= P1 ^ 2;                              /* 数据输入时钟线 595的11脚 */
    sbit	stcp	= P1 ^ 1;                              /* 输出存储器锁存时钟线 595的12脚 */
    sbit	ds	= P1 ^ 0;                               /* 数据线  595的14脚 */
    
    sbit	s1	= P3 ^ 1;                                /*按下暂停再暂按继续 */
    sbit	s2	= P3 ^ 2;                                /*按下方向取反 */
    sbit			s3	= P3 ^ 3;                            /*按下加速 */
    sbit			s4	= P3 ^ 4;                            /*按下减速 */
    
    
    unsigned char		fx;                  /* 方向切换 */
    
    unsigned char		alt;               /* 数据移动定时时间 */
    unsigned int		net;              /* 控制显示的字符 */
    unsigned int		net_2;              /* 控制显示的字符 */
    unsigned char		speed	= 5;        /* 数据移动时间变量 */
    unsigned char		zi	= 2;  //----------------------这里是需要自己根据字数个数修改的----------------------
    unsigned int		zong;     /*    (所有的字数+1)*32   字数指的是汉字,字母、数字两个算一个数字 */
    
    unsigned char code	tab[] = {
    	
    	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //前后32个0x00不要动
    	
    0x00,0x04,0x04,0x06,0x04,0x04,0x04,0x08,0x04,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,
    0x00,0x00,0xFF,0xFC,0x02,0x02,0x04,0x02,0x08,0x02,0x10,0x02,0x00,0x1E,0x00,0x00,/*"北",0*/
    
    0x20,0x00,0x20,0x02,0x20,0x04,0x27,0xD8,0x24,0x40,0x24,0x42,0xA4,0x41,0x64,0x7E,
    0x24,0x40,0x24,0x40,0x24,0x40,0x27,0xD0,0x20,0x08,0x20,0x06,0x20,0x00,0x00,0x00,/*"京",1*/
    
    
    	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,//前后32个0x00不要动
    	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    };
    
    

    动图效果:
    在这里插入图片描述

    然后制作点阵显示器显示设计

    需要四个按键
    按键1按下后滚动显示数组1的内容
    按键2按下后滚动显示数组2的内容
    按键3按下后滚动显示数组3的内容
    按键4就相当于这个设计里的开始暂停按钮。开启滚动和关闭滚动。

    对比之前那个设计。删除其余3个按键的处理,写点我们的处理即可。

    在这里插入图片描述

    展开全文
  • 51单片机做的点阵显示,有程序,有仿真。16*16的和32*32的都有
  • (1)无源蜂鸣器4首音乐 (2)按键1 开始 暂停 (3)按键2 下一曲 (4)按键3 上一首 (5)按键4 加速播放 (6)歌曲编号1234,放哪一首歌就点阵显示1234字符。 (7)普中V2实物可运行+仿真
  • 8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮
  • 点阵 首先来介绍一下8*8 点阵共由 64 个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置 1 电平,某一列置 0 电平,则相应的二极管就亮; 如要将第一个点点亮,则 1 脚接高电平 a ...
  • reg51.h> #include<intrins.h> #define uchar unsigned char sbit SER=P3^4;//14ºÅÒý½Å£¬´®ÐÐÊý¾ÝÊäÈë sbit SRCLK=P3^6;//11ºÅÒý½Å£¬ÒÆλ¼Ä´æÆ÷ʱÖÓÊäÈ...
  • 51单片机88点阵游戏打飞机雷电源码.rar51单片机88点阵游戏打飞机雷电源码.rar51单片机88点阵游戏打飞机雷电源码.rar51单片机88点阵游戏打飞机雷电源码.rar51单片机88点阵游戏打飞机雷电源码.rar51单片机88点阵游戏打...
  • 51单片机点阵显示

    2012-05-04 16:31:54
    51单片机点阵显示,可移植性强,功能强大
  • 基于51单片机点阵控制程序,包含原理图,程序keil2上直接可用
  • 51单片机的led点阵代码
  • 基于protues 51单片机 led点阵贪吃蛇 ,有仿真电路图。 里面的程序速度没有调好,懒的调了, 这个程序没有注释,可以到http://download.csdn.net/detail/wlx1993/5585159下载我写的另一个“基于普中实验板 51单片机 ...
  • 点阵显示文字51单片机点阵显示文字) 挺好的
  • 51单片机88点阵LED显示原理及程序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,053
精华内容 421
关键字:

51单片机点阵