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

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

    2012-03-14 19:22:28
    51单片机点阵牌显示,通过把汉字取模转换成c语言程序,通过译码器然后显示在led上
  • 下面我们就用程序来实现一下,特别注意,控制点阵左侧引脚的 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;
     }
     }
    }
    

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

    展开全文
  • 51单片机16x16点阵程序

    2014-08-16 11:07:03
    程序为16x16的点阵显示程序,他可以显示汉字,并实现汉字的上下滚动和左右滚动
  • 51单片机16*16点阵程序

    2010-01-25 10:57:19
    16*16点阵程序 是对应于51单片机编写的程序 绝对可用 希望大家有所收获
  • 非常简单易懂 51单片机程序教程 led点阵显示 基础的点阵显示教程
  • 51单片机88点阵LED显示原理及程序
  • AT89C51单片机的8*8点阵程序.简单的8*8点阵单片机基本配置。
  • 基于LED点阵屏的翻页钟 ds1302 51单片机
  • 51单片机 16X192点阵程序动态显示任意汉字 程序参考源代码如下: #include<AT89X52.H> sbit ST=P3^5; sbit E1=P3^4; sbit MR=P3^7; char cashe[12]; char code wd[12][16]={ {0xFF,0xC0,0xFE,0xFE,0xFE,0xFE...

    51单片机 16X192点阵程序动态显示任意汉字

    在这里插入图片描述
    在这里插入图片描述
    程序参考源代码如下:

    #include<AT89X52.H>
    sbit ST=P3^5;
    sbit E1=P3^4;
    sbit MR=P3^7;
    char cashe[12];
    char code wd[12][16]={

    {0xFF,0xC0,0xFE,0xFE,0xFE,0xFE,0x80,0xFE,0xFD,0xFD,0xFB,0xF7,0xEF,0xDF,0x3F,0xFF},
    {0xFF,0x03,0xFF,0xFF,0xFF,0xFF,0x01,0x7F,0x7F,0x7F,0x7F,0x7F,0x7D,0x7D,0x81,0xFF},/“无”,0/
    /* (16 X 16 , 宋体 )*/

    {0xDF,0xDF,0xDF,0xCF,0x57,0x58,0x5F,0xDF,0xDE,0xDE,0xDE,0xDD,0xDD,0xDB,0xDB,0xD7},
    {0x7F,0x6F,0x73,0x77,0x7F,0x01,0x5F,0x5F,0xDF,0xDF,0xDF,0xDF,0xDD,0xDD,0xE1,0xFF},/“忧”,1/
    /* (16 X 16 , 宋体 )*/

    {0xFE,0xFE,0xFE,0xC0,0xDE,0xDE,0xC0,0xDE,0xDE,0xDE,0xC0,0xDE,0xFE,0xFE,0xFF,0xFF},
    {0xFF,0xFF,0xFF,0x07,0xF7,0xF7,0x07,0xF7,0xF7,0xF7,0x07,0xF7,0xFD,0xFD,0x01,0xFF},/“电”,2/
    /* (16 X 16 , 宋体 )*/

    {0xFF,0xC0,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFA,0xFD},
    {0xFF,0x0F,0xDF,0xBF,0x7F,0xFF,0xFF,0xFB,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/“子”,3/
    /* (16 X 16 , 宋体 )*/

    {0xFF,0x83,0xBB,0xAB,0xAA,0xAA,0xA9,0xAB,0xAB,0xAA,0xEE,0xD7,0xDB,0xBB,0x7F,0xFF},
    {0x7F,0x3F,0x7F,0x01,0xFD,0xFD,0xBD,0xBD,0x5D,0xED,0x05,0xED,0xFD,0xFD,0xEB,0xF7},/“购”,4/
    /* (16 X 16 , 宋体 )*/

    {0xEF,0xEF,0xAF,0xAE,0x82,0xAD,0x6B,0xEB,0xE6,0xCD,0x2B,0xEF,0xEE,0xED,0xEB,0xFF},
    {0x7F,0x7F,0x7F,0x03,0xAB,0xAB,0x6B,0x6B,0xDB,0xDB,0xBB,0x7B,0xFB,0xFB,0xD7,0xEF},/“物”,5/
    /* (16 X 16 , 宋体 )*/

    };

    void del(int i)//============================//延时程序
    {while(i–);}

    aline() =======================发送一行的显示程序
    {
    char i=0;
    TI=0;
    for(i=0;i<12;i++)
    {SBUF=cashe[i];while(~TI);TI=0;} //将缓存中的信息转存入595的存储器中,到此不显示
    }

    main()
    {
    int m=0,n=0;
    TI=0;
    SM0=0;
    SM1=0;
    E1=0;
    while(1)
    for(m=0;m<16;m++) //共有16行 循环16次显示这16行 串行的595送出行的数据
    { //由74hc154选中要显示的行

    for(n=0;n<12;n++) //这个for循环用来向缓存数组中装载要显示的内容
    {cashe[11-n]=wd[n][m];} //将第m个字的第n行信息装载 ,因为595串接 数据第一个进去的会在最后一个595中,最后进去的会在第一个595中
    aline(); //将缓存中的一行信息载入595缓存中
    ST=0;ST=1; //595产生上升沿 输出595锁存的数据
    P2=m; //选中要显示的行输出数据

    del(100);//延时一段时间,以造成视觉暂存效应

    }

    }

    最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,
    如果需要 程序完整源代码和 设计文件,请在下方留言或者私信我,看到后会第一时间回复。

    谢谢!

    展开全文
  • 本例子很好的很简单的解释了单片机点阵显示原理 ,能以小见大 很典型
  • 课程设计题二十二:点阵显示器显示设计 (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的都有
  • 51电梯点阵程序

    2013-11-10 13:20:48
    51单片机电梯点阵滚动显示程序,通过实际测试,8*8点阵实例可扩增
  • 51单片机88点阵LED显示原理及程序.doc
  • 51单片机常用的小程序!包括键盘,点阵!很经典!下载来看看很实用!
  • 51单片机上的LED交叉点阵程序,分别由汇编和C编写。经验证,能成功运行
  • 51单片机矩阵键盘和点阵的同时扫描程序,矩阵键盘和点阵的同时扫描程序
  • 基于51单片机点阵显示汉字系统内涵原理图PCB及C程序
  • 基于51单片机点阵控制程序,包含原理图,程序keil2上直接可用
  • 51单片机驱动1616LED点阵显示动画汉字汇编程序
  • 微信公众号【电子开发圈】,理论结合实践,开启你的学习新方案...电子DIY、Arduino、51单片机、STM32、FPGA…… 电子百科、趣味知识、职业经验、设备拆机、科技头条…… 点击链接,免费下载100G+电子设计学习资料! ...

    博主福利:100G+电子设计学习资源包!

    http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect
    --------------------------------------------------------------------------------------------------------------------------

     

    一、LED点阵发光原理

    8*8单色单片机结构图如下:

    https://blog.csdn.net/weixin_42625444/article/details/90897605

    从电路图中很简单的就可以看出来,想要点亮点阵中的某一个LED灯。只要使得那个灯所在的行输出高电平,所在列输出低电平就好。

     

    二、点阵扫描实验

     

    /***********************************************
    实验名称:      点阵扫描
    实验说明:      扫描每个LED灯,检查点阵是否完好
    实验时间:    
    ***********************************************/
    #include <reg51.h>
    #include <intrins.h>
    
    #define uchar unsigned char
    #define uint  unsigned int
    
    sbit MOSIO = P3^4;//输入口
    sbit R_CLK = P3^5;//锁存器时钟
    sbit S_CLK = P3^6;//移位寄存器时钟
    
    //data3:右边半块列数据;data2:左边半块列数据
    //data1:下边半块行数据;data0:上边半块行数据
    void HC595Pro(uchar data3,uchar data2,uchar data1,uchar data0);
    
    void main()
    {
        uint i,j;
        uchar d;
    
        while(1)
        {
            //全亮
            HC595Pro(0x00,0x00,0xFF,0xFF);
            for(i=0;i<40000;i++);          //延时40ms  
                
            /*行扫描*/
            //上半块行扫描
            d = 0x01;
            for(i=0;i<8;i++)
            {
                HC595Pro(0x00,0x00,0x00,d);
                d <<= 1;
                for(j=0;j<20000;j++);               //延时20ms    
            }      
            //下半块行扫描
            d = 0x01;
            for(i=0;i<8;i++)
            {
                HC595Pro(0x00,0x00,d,0x00);
                d <<= 1;
                for(j=0;j<20000;j++);                 //延时20ms        
            }
    
            /*列扫描*/
            //左半快列扫描
            d = 0xFE;
            for(i=0;i<8;i++)
            {
                HC595Pro(0xFF,d,0xFF,0xFF);
                //如果还想用跟行扫描一样的形式,看main()最下面注释行
                d = _crol_(d,1);                   //循环左移
                for(j=0;j<20000;j++);              //延时20ms        
            }
            //右半块列扫描
            d = 0xFE;
            for(i=0;i<8;i++)
            {
                HC595Pro(d,0xFF,0xFF,0xFF);
                d = _crol_(d,1);
                for(j=0;j<20000;j++);               //延时20ms    
            }
            /******************************************************
            b1 = 0x01;
            for(i = 0; i<8; i++)
            {
                HC595Pro(0xFF, ~b1, 0xFF, 0xFF);
                b1 <<= 1;
                for(j=0; j<20000; j++);
            }
    
            b1 = 0x01;
            for(i = 0; i<8; i++)
            {
                HC595Pro(~b1, 0xFF, 0xFF, 0xFF);
                b1 <<= 1;
                for(j=0; j<20000; j++);
            }    
            ******************************************************/
        }
    }
    
    void HC595Pro(uchar data3,uchar data2,uchar data1,uchar data0)
    {
        uchar i;
        //先移入的会被后面移入的数据推移到后面的595中,所以需要先移入data3
        for(i=0;i<8;i++)
        {
            //先移入高位再移入低位,移位寄存器移入的第一位就是输出的最高位
            MOSIO = data3 >> 7;
            data3 <<= 1;
            S_CLK = 0;//给一个上升沿,移位
            S_CLK = 1;
        }    
        for(i=0;i<8;i++)
        {
            MOSIO = data2 >> 7;
            data2 <<= 1;
            S_CLK = 0;
            S_CLK = 1;
        }
        for(i=0;i<8;i++)
        {
            MOSIO = data1 >> 7;
            data1 <<= 1;
            S_CLK = 0;
            S_CLK = 1;
        }
        for(i=0;i<8;i++)
        {
            MOSIO = data0 >> 7;
            data0 <<= 1;
            S_CLK = 0;
            S_CLK = 1;
        }
    
        //上升沿时将移位寄存器数据移到锁存器中用于显示,平时保持低电平,数据不变
        R_CLK = 0;
        R_CLK = 1;
        R_CLK = 0;
    
    }

     

    这里我用到的是16*16的点阵。其实也就是4个8*8的小点阵组成起来的。其结构图如下:

    1 2
    3 4

    这里只是简单示意一下。。。其中4个小块都是与一个相对应的74HC595相连。每个74HC595又是级联的,入口只有一个,我们需要输入相对应的行,列电平情况来控制LED灯的亮灭。

    根据74HC595的结构可以知道,输入的数据是8位8位的输入的。最开始输入的8位数据会被后面的输入数据推移到第四个74HC595中。

    所以实际输入时,是先输入2和4的列数据,再输入1和3的列数据,然后再是3和4的行数据,最后才是1和2的行数据。

     

    三、16*16点阵倒计时

     

    /***********************************************************************
    实验名称:   16*16点阵数字倒计时
    实验时间:   
    ***********************************************************************/
    #include <reg51.h>
    #include <array.h>
    
    #define uchar unsigned char
    #define uint  unsigned int
    
    sbit MOSIO = P3^4;
    sbit R_CLK = P3^5;
    sbit S_CLK = P3^6;
    
    void HC595Pro(uchar data3,uchar data2,uchar data1,uchar data0);
    
    void main()
    {
        uint i,c;
        uchar j;
        i = 100;
    
        while(1)
        {
            //显示数字10
            for(c=i;c>0;c--)//延时
                for(j=0;j<16;j++)
                {
                    //字模取出来的数据是跟实际实际所需数据相反的,所以要取反。
                    //函数对应的参数分别表示列2,列1,行2,行1
                    HC595Pro(~tab1[2*j+1],~tab1[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示数字09
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {
                    HC595Pro(~tab2[2*j+1],~tab2[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示数字08
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {
                    HC595Pro(~tab3[2*j+1],~tab3[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示数字07
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {
                    HC595Pro(~tab4[2*j+1],~tab4[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示数字06
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {
                    HC595Pro(~tab5[2*j+1],~tab5[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示数字05
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {
                    HC595Pro(~tab6[2*j+1],~tab6[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示数字04
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {
                    HC595Pro(~tab7[2*j+1],~tab7[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示数字03
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {                          
                    HC595Pro(~tab8[2*j+1],~tab8[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示数字02
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {
                    HC595Pro(~tab9[2*j+1],~tab9[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示数字01
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {
                    HC595Pro(~tab10[2*j+1],~tab10[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示数字00
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {
                    HC595Pro(~tab11[2*j+1],~tab11[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
    
            //显示字母GO
            for(c=i;c>0;c--)
                for(j=0;j<16;j++)
                {
                    HC595Pro(~tab12[2*j+1],~tab12[2*j],tab0[2*j],tab0[2*j+1]);
                }
            HC595Pro(0xFF,0xFF,0x00,0x00);//清屏
        }    
    }
    
    void HC595Pro(uchar data3,uchar data2,uchar data1,uchar data0)
    {
        uchar i;
        //先移入的会被后面移入的数据推移到后面的595中,所以需要先移入data3
        for(i=0;i<8;i++)
        {
            //先移入高位再移入低位,移位寄存器移入的第一位就是输出的最高位
            MOSIO = data3 >> 7;
            data3 <<= 1;
            S_CLK = 0;//给一个上升沿,移位
            S_CLK = 1;
        }    
        for(i=0;i<8;i++)
        {
            MOSIO = data2 >> 7;
            data2 <<= 1;
            S_CLK = 0;
            S_CLK = 1;
        }
        for(i=0;i<8;i++)
        {
            MOSIO = data1 >> 7;
            data1 <<= 1;
            S_CLK = 0;
            S_CLK = 1;
        }
        for(i=0;i<8;i++)
        {
            MOSIO = data0 >> 7;
            data0 <<= 1;
            S_CLK = 0;
            S_CLK = 1;
        }
    
        //上升沿时将移位寄存器数据移到锁存器中用于显示,平时保持低电平,数据不变
        R_CLK = 0;
        R_CLK = 1;
        R_CLK = 0;
    }

     

    array.h头文件如下:

    //点阵显示数组
    //用于行扫描
    unsigned char 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}; 
    //1数字10的字模
    unsigned char 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的字模
    unsigned char 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的字模
    unsigned char 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的字模
    unsigned char 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的字模
    unsigned char 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的字模
    unsigned char 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的字模
    unsigned char 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的字模
    unsigned char 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的字模
    unsigned char 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的字模
    unsigned char 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的字模
    unsigned char 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的字模
    unsigned char 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};

     

    头文件的数据是通过字模软件得出的。字模软件的工作原理就是对于一个点阵,你想要什么样的图像,然后就在相应位置数据为1。然后再通过从左到右,从上到下的顺序,组成一个个8位数据。

    这些8位数据就是头文件的内容。

    由此我们就可以知道,通过字模取出来的数据,而我们实际运用过程中对于列来说是相反的。

    因为我们想要点亮对应的LED灯是将它所在行输出高电平,所在列输出低电平。所以取出来的字模数据作为列的值的话是相反的。所以这里用了取反。

     

    展开全文
  • 这个程序没有注释,可以到http://download.csdn.net/detail/wlx1993/5585159下载我写的另一个“基于普中实验板 51单片机 led点阵贪吃蛇”程序。 本程序是将其中的键盘扫描改为了中断方式,其它都没怎么变。
  • reg51.h> #include<intrins.h> #define uchar unsigned char sbit SER=P3^4;//14ºÅÒý½Å£¬´®ÐÐÊý¾ÝÊäÈë sbit SRCLK=P3^6;//11ºÅÒý½Å£¬ÒÆλ¼Ä´æÆ÷ʱÖÓÊäÈ...
  • 主要应用于实验,实验调试,程序编写,编程技术为c语言
  • 51单片机的8-8点阵汇编语言仿真,有proteus仿真和汇编程序
  • 这里提供一个完整的AT89S51单片机驱动驱动led点阵显示具有动画效果的汉字的汇编程序列子。
  • 常用的16*16点阵滚屏显示程序 74hc595

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 354
精华内容 141
关键字:

51单片机点阵程序