找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4023|回复: 2
打印 上一主题 下一主题
收起左侧

求助一个8*8LED灯的字符滚动显示的单片机程序

[复制链接]
跳转到指定楼层
楼主
结合51单片机和8*8的LED灯,实现字符的显示,按键可以切换为静态显示和滚动显示。使用STC89C52芯片和3cm共阳极8*8LED灯,编译一个程序能使显示的字符静态显示和滚动。这个要达成目标的程序,(C语言不精,比较小白)求助下各位大佬。元件都焊好了,就差个按键驱动这个LED灯。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2018-12-1 09:17 | 只看该作者
8*8LED矩阵滚动显示数字和字符
http://www.51hei.com/bbs/dpj-105247-1.html
单片机8*8LED点阵纵向滚动显示我爱你的仿真与源码
http://www.51hei.com/bbs/dpj-116188-1.html


  1. //-------------------------------------------
  2. //8*8矩阵循环显示字符和数字
  3. //显示字符串在数组disstr[]中申明
  4. //-------------------------------------------
  5. #include<reg51.h>
  6. #include<intrins.h>
  7. #include<string.h>
  8. #include<absacc.h>        
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. //--------------------------------------------
  12. //X向字模
  13. //--------------------------------------------
  14. uchar code Table_of_Digits[40][8]=
  15. {
  16.         {0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},//0
  17.         {0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00},//1
  18.         {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00},//2        
  19.         {0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00},//3
  20.         {0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00},//4
  21.         {0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00},//5
  22.         {0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00},//6
  23.         {0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00},//7
  24.         {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00},//8
  25.         {0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00},//9
  26.         {0x00,0x3E,0x48,0x48,0x48,0x3E,0x00,0x00},//A
  27.         {0x00,0x00,0x7E,0x52,0x5A,0x6E,0x00,0x00},//B
  28.         {0x00,0x00,0x3C,0x42,0x42,0x24,0x00,0x00},//C
  29.         {0x00,0x00,0x7E,0x42,0x42,0x3C,0x00,0x00},//D
  30.         {0x00,0x00,0x7E,0x52,0x52,0x52,0x00,0x00},//E
  31.         {0x00,0x00,0x7E,0x50,0x50,0x40,0x00,0x00},//F
  32.         {0x00,0x3C,0x42,0x42,0x4A,0x2E,0x00,0x00},//G
  33.         {0x00,0x00,0x7E,0x10,0x10,0x7E,0x00,0x00},//H
  34.         {0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00},//I
  35.         {0x00,0x00,0x0C,0x02,0x02,0x7C,0x00,0x00},//J
  36.         {0x00,0x00,0x7F,0x08,0x14,0x22,0x00,0x00},//K
  37.         {0x00,0x00,0x7E,0x02,0x02,0x02,0x00,0x00},//L
  38.         {0x00,0x7E,0x20,0x10,0x20,0x7E,0x00,0x00},//M
  39.         {0x00,0x00,0x7E,0x30,0x08,0x06,0x7E,0x00},//N
  40.         {0x00,0x3C,0x42,0x42,0x42,0x42,0x3C,0x00},//O
  41.         {0x00,0x00,0x7E,0x48,0x48,0x70,0x00,0x00},//P
  42.         {0x00,0x3C,0x42,0x46,0x43,0x3C,0x00,0x00},//Q
  43.         {0x00,0x00,0x7E,0x58,0x5C,0x72,0x00,0x00},//R
  44.         {0x00,0x00,0x64,0x92,0x92,0x4C,0x00,0x00},//S
  45.         {0x00,0x40,0x40,0x7E,0x40,0x40,0x00,0x00},//T
  46.         {0x00,0x00,0x7C,0x02,0x02,0x7C,0x00,0x00},//U
  47.         {0x00,0x00,0x60,0x18,0x06,0x18,0x60,0x00},//V
  48.         {0x00,0x7E,0x0C,0x18,0x0C,0x7E,0x00,0x00},//W
  49.         {0x00,0x42,0x24,0x18,0x18,0x24,0x42,0x00},//X
  50.         {0x00,0x40,0x20,0x1E,0x20,0x40,0x00,0x00},//Y
  51.         {0x00,0X00,0x46,0x5A,0x72,0x42,0x00,0x00},//Z
  52. };
  53. //---------------------------------------
  54. uchar code xdat[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  55. uchar code ydat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  56. //---------------------------------------
  57. uchar i=0;
  58. uchar j=0;
  59. uchar t=0;
  60. uchar Num_Index,disnum,disnum1;
  61. uchar key;
  62. uchar xi;
  63. uchar yi;
  64. uint  len;        //显示的字符串长度
  65. uchar buffer[16];
  66. //---------------------------------------
  67. uchar code disstr[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";         //显示内容自己可以任意定义,注意只能是大些字母和数字
  68. //---------------------------------------
  69. #define wei XBYTE[0xa000]
  70. sbit dat=P1^1;
  71. sbit clk=P1^0;
  72. sbit ls0=P2^4;
  73. sbit ls1=P2^5;
  74. sbit ls2=P2^6;
  75. sbit ls3=P2^7;
  76. //---------------------------------------
  77. //用74LS164来输出一个8位的数据,
  78. //点亮相应的LED
  79. //---------------------------------------
  80. void sendbyte(uchar byte)
  81. {            
  82.         uchar num,c;         
  83.         num=byte;
  84.         for(c=0;c<8;c++)         
  85.         {     
  86.                 clk=0;   
  87.                 dat=num&0x01;   //每一位的输出
  88.                 clk=1;                 //每一次上升沿,输出一位数据
  89.                 num>>=1;            //右移位赋值 ,以供下一位的输出                     
  90.         }
  91. }

  92. //---------------------------------------
  93. //主程序
  94. //---------------------------------------
  95. void main()
  96. {
  97.         Num_Index=0; //从0 开始显示
  98.         TMOD=0x01; //T0 方式0
  99.         TH0=(65536-2000)/256; //2ms 定时
  100.         TL0=(65536-2000)%256;
  101.         IE=0x82;
  102.         key=0;
  103.         xi=0;
  104.         yi=0;
  105.         TR0=1; //启动T0
  106.         len=strlen(disstr);
  107.         while(1);
  108. }
  109. //---------------------------------------
  110. //定时器0 中断函数
  111. //显示控制
  112. //---------------------------------------
  113. void LED_Screen_Display() interrupt 1
  114. {
  115.         uchar m,n;
  116.         TH0=(65536-2000)/256; //2ms 定时
  117.         TL0=(65536-2000)%256;
  118.         if(i==0)
  119.         {
  120.                 if(disstr[Num_Index]>='A')disnum=disstr[Num_Index]-'A'+10;           //求显示字符在字库中的位置
  121.                 else disnum=disstr[Num_Index]-'0';
  122.                 if(disstr[Num_Index+1]>='A')disnum1=disstr[Num_Index+1]-'A'+10; //连续取两个赋给缓冲器,便于滚动显示
  123.                 else disnum1=disstr[Num_Index+1]-'0';
  124.                 for(m=0;m<8;m++)buffer[m]=Table_of_Digits[disnum][m];           //给显示缓冲区赋值
  125.                 for(m=0;m<8;m++)buffer[m+8]=Table_of_Digits[disnum1][m];
  126.         }
  127.         P0=0xff;
  128.         P2=0xa0;
  129.         P0=~buffer[i+n];
  130.         P2=0x00;
  131.         sendbyte(xdat[n]);
  132.         if(++n==8) n=0; //每屏一个数字由8 个字节构成
  133.         if(++t>=60) //每个数字刷新显示一段时间
  134.         {
  135.                 i++;i%=8;
  136.                 t=0;
  137.                 if(i==0)
  138.                 {
  139.                         Num_Index++;
  140.                         if(Num_Index>=(len-1))Num_Index=0;  //显示下一个数字
  141.                 }
  142.         }
  143. }

复制代码
回复

使用道具 举报

板凳
ID:436259 发表于 2018-12-1 17:56 | 只看该作者
如果不外加其他芯片,只能使用STC89C52和按键,该怎样做小改动?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表