找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4937|回复: 1
收起左侧

单片机16*16点阵LED显示滚动汉字含程序原理图74hc154+74hc595

[复制链接]
ID:789578 发表于 2020-6-27 18:40 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
1.设计的原理图.JPG 51hei.png

单片机源程序如下:
  1. /*-----------------------------------------------
  2.   名称:595控制4汉字点阵屏
  3.   51单片机
  4.   内容:屏+5V、GND连接电源5V
  5.         P0.0-P0.3分别连接A、B、C、D,用于控制16行,通过2路HC138控制
  6.         SCK时钟连接P2.5
  7.         LATCH锁存连接P2.6
  8.         R1红色数据信号连接至P2.4
  9.         G1绿色数据信号连接至P0.4,如果使用单红色屏此信号无需连接
  10.         OE使能端一般接GND,可以用IO引脚PWM控制亮度
  11.         或者使用此引脚控制拖尾现象。
  12.   现象:使用普通速度51系列单片机。
  13.                   K1按下屏幕出现实体心型
  14.                   K2按下屏幕出现笑脸图标
  15.                   K3按下屏幕出现A8图标
  16.                   K4按下屏幕出现陈文蓉  邱莉杰
  17. ------------------------------------------------*/
  18. #include<reg52.h>

  19. sbit T_STR = P2^6;       //锁存引脚,屏上标识位STR
  20. sbit R1    = P2^4;       //数据引脚,屏上标识R1
  21. sbit G1    = P0^4;       //数据引脚,屏上标识G1
  22. sbit T_CLK = P2^5;       //时钟引脚,屏上标识位CLK
  23. sbit OE    = P2^1;       //
  24. sbit K1    = P3^2;       //
  25. sbit K2    = P3^3;       //
  26. sbit K3    = P3^4;       //
  27. sbit K4    = P3^5;       //

  28. unsigned char tab[8];
  29. unsigned char DIS[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//行数据
  30. int oo=0;
  31. static unsigned char count,j,kk;

  32. /*-----------------------------------------------
  33.              16x16汉字取模数据
  34. ------------------------------------------------*/
  35. unsigned char code hztest[][32]=    //二维数组,目的是减少运算,可以用最基本的一维数组,每个汉字有32个字节数据
  36. {
  37. /*--  文字:  学  --*/
  38. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  39. 0x44,0x10,0x88,0x10,0x88,0x08,0x00,0x04,0xFE,0x7F,0x02,0x40,0x01,0x20,0xF8,0x07,
  40. 0x00,0x02,0x80,0x21,0xFF,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,
  41. };
  42. unsigned char code hztest1[][32]=    //二维数组,目的是减少运算,可以用最基本的一维数组,每个汉字有32个字节数据
  43. {
  44. /*--  文字:  文  --*/
  45. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  46. 0x40,0x00,0x80,0x00,0x80,0x20,0xFF,0x7F,0x08,0x08,0x10,0x08,0x10,0x04,0x20,0x04,
  47. 0x20,0x02,0x40,0x01,0x80,0x00,0x40,0x01,0x20,0x06,0x10,0x08,0x0C,0x70,0x03,0x20,

  48. /*--  文字:  经  --*/
  49. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  50. 0x08,0x00,0xC8,0x3F,0x04,0x10,0x04,0x08,0x22,0x0C,0x3F,0x12,0x10,0x61,0xC8,0x40,
  51. 0x04,0x00,0x82,0x3F,0x3F,0x04,0x00,0x04,0x38,0x04,0x07,0x24,0xE2,0x7F,0x00,0x00,

  52. /*--  文字:  学  --*/
  53. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  54. 0x44,0x10,0x88,0x10,0x88,0x08,0x00,0x04,0xFE,0x7F,0x02,0x40,0x01,0x20,0xF8,0x07,
  55. 0x00,0x02,0x80,0x21,0xFF,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,

  56. /*--  文字:  院  --*/
  57. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  58. 0x00,0x01,0x1E,0x02,0xF2,0x7F,0x2A,0x40,0x1A,0x28,0xC6,0x1F,0x0A,0x00,0x12,0x10,
  59. 0xF2,0x3F,0x12,0x05,0x16,0x05,0x0A,0x05,0x82,0x44,0x82,0x44,0x42,0x78,0x32,0x00,
  60.                                   
  61. /*--  文字:  一  --*/
  62. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  63. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x3F,
  64. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  65. /*--  文字:  尚  --*/
  66. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  67. 0x80,0x00,0x84,0x10,0x98,0x18,0x90,0x04,0x80,0x20,0xFE,0x7F,0x02,0x20,0x02,0x24,
  68. 0xF2,0x2F,0x12,0x24,0x12,0x24,0x12,0x24,0xF2,0x27,0x12,0x24,0x02,0x28,0x02,0x10,

  69. /*--  文字:  衍  --*/
  70. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  71. 0x08,0x10,0x28,0x3E,0xC4,0x00,0x82,0x00,0x01,0x00,0x28,0x20,0xC4,0x7E,0x86,0x10,
  72. 0x05,0x10,0x84,0x10,0x44,0x10,0x74,0x10,0x44,0x10,0x44,0x10,0x44,0x14,0x44,0x08,

  73. /*--  文字:  旭  --*/
  74. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  75. 0x08,0x00,0x08,0x10,0x08,0x3F,0x08,0x11,0x7F,0x11,0x48,0x11,0x48,0x11,0x48,0x1F,
  76. 0x48,0x11,0x48,0x11,0x48,0x11,0x48,0x11,0x44,0x5F,0x44,0x40,0x82,0x7F,0x01,0x00,
  77. };
  78. unsigned char code hztest2[][32]=    //二维数组,目的是减少运算,可以用最基本的一维数组,每个汉字有32个字节数据
  79. {
  80. /*--  文字:  欢  --*/
  81. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  82. 0x00,0x01,0x00,0x01,0x3F,0x01,0x20,0x3F,0xA2,0x20,0x62,0x12,0x14,0x02,0x14,0x02,
  83. 0x08,0x02,0x14,0x02,0x24,0x05,0x22,0x05,0x81,0x08,0x80,0x10,0x40,0x70,0x30,0x20,

  84. /*--  文字:  迎  --*/
  85. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  86. 0x00,0x00,0x82,0x21,0x64,0x7E,0x28,0x22,0x20,0x22,0x20,0x22,0x2F,0x22,0x28,0x23,
  87. 0xA8,0x22,0x68,0x2A,0x28,0x12,0x08,0x02,0x08,0x02,0x14,0x62,0xE2,0x3F,0x00,0x00,

  88. /*--  文字:  您  --*/
  89. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  90. 0x90,0x00,0x90,0x00,0xC8,0x3F,0x48,0x20,0x2C,0x12,0x9A,0x02,0x89,0x0A,0x48,0x32,
  91. 0x28,0x22,0x88,0x02,0x08,0x01,0x40,0x00,0x8A,0x21,0x0A,0x49,0x09,0x48,0xF0,0x0F
  92. };
  93. /*-----------------------------------------------
  94.              向595写入一个字节 单红色
  95. ------------------------------------------------*/
  96. void InputByte( unsigned  char DataR1) //写一个字节
  97. {
  98. unsigned  char i;
  99. for(i=8; i>0; i--)
  100. {
  101. R1 = !(DataR1&0x01);                  
  102. T_CLK = 0;
  103. T_CLK = 1;
  104. DataR1 = DataR1 >> 1;
  105. }
  106. }
  107. /*-----------------------------------------------
  108.              向595写入两个字节 双色
  109. ------------------------------------------------*/
  110. void Input2Byte( unsigned  char DataR1,unsigned  char DataG1) //写一个字节
  111. {
  112. unsigned  char i;
  113. for(i=8; i>0; i--)
  114. {
  115. R1 = !(DataR1&0x01);   
  116. G1 = !(DataG1&0x01);               
  117. T_CLK = 0;
  118. T_CLK = 1;
  119. DataR1 = DataR1 >> 1;
  120. DataG1 = DataG1 >> 1;
  121. }
  122. }


  123. /*-----------------------------------------------
  124.             初始化定时器,做为动态扫描
  125. ------------------------------------------------*/
  126. void Init_Timer1(void)
  127. {
  128. TMOD |= 0x10;                             
  129. EA=1;                      //总中断使能
  130. ET1=1;                     //定时中断使能
  131. TR1=1;                     //打开定时器开关
  132. }


  133. /*-----------------------------------------------
  134.                       主程序
  135. ------------------------------------------------*/
  136. main()
  137. {                                                                 
  138. unsigned char l=0;
  139. Init_Timer1(); //初始化定时器
  140. while(1)
  141. {
  142.   //可以加入其它的控制程序
  143.   if(K1==0)         oo=0;
  144.   if(K2==0)         oo=1,kk=0;
  145.   if(K3==0)         oo=2,j=0;
  146.   l++;
  147.   if(l==250) j++,l=0,kk+=2;           //l 速度控制
  148.   if(j==9)          j=0;
  149.   if(kk==255)  kk=0;
  150. }
  151. }

  152. /*-----------------------------------------------
  153.              定时器执行动态扫描
  154. ------------------------------------------------*/
  155. void Timer1_isr(void) interrupt 3
  156. {


  157. unsigned char i;
  158. TH1=0xff;                //重装初值
  159. TL1=0;


  160. T_STR=0;       //锁存释放
  161. switch(oo)
  162. {
  163. case 0:        {
  164.                             InputByte(hztest[0][i]);
  165.                     InputByte(hztest[0][i+1]);
  166.                 }
  167.                         break;
  168. case 1:        {
  169.                         InputByte(hztest1[0][i+kk]);
  170.                     InputByte(hztest1[0][i+kk+1]);
  171.                 }
  172.                         break;
  173. case 2:        {
  174.                         InputByte(hztest2[j/3][i]);
  175.                     InputByte(hztest2[j/3][i+1]);
  176.                 }
  177.                         break;
  178. }
  179. OE=1;  //暂时关闭屏幕,防止出现鬼影,如果没有使用该引脚控制则会出现拖影现象。
  180. T_STR=1;      //锁存有效,此时一行的数据显示到屏上
  181. P0=DIS[count]|0xf0;//用P0口的前4位控制16行,屏内部通过4-16译码器工作,循环扫描其他15行
  182. OE=0;//使能
  183. count++;
  184. i+=2;              //累加调用下一行数据
  185. if(count==16)
  186.     count=0;
  187. if(i==32)
  188.     i=0;

  189. }
复制代码

所有资料51hei提供下载:
单片机原理与应用51hei设计.zip (1009.6 KB, 下载次数: 131)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:874065 发表于 2021-1-6 00:13 | 显示全部楼层
您好,点阵显示汉字是否只能用c编,汇编语言能编吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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