找回密码
 立即注册

QQ登录

只需一步,快速开始

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

C51单片机驱动MAX7219控制LED点阵滚动显示汉字程序

[复制链接]
ID:1026000 发表于 2022-5-24 12:33 | 显示全部楼层 |阅读模式
利用多个8*8点阵模块设计并制作条形显示屏,滚动显汉字,现在写出了C语言,但是老师要求汇编
图片1.png

评分

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

查看全部评分

回复

使用道具 举报

ID:1026000 发表于 2022-5-24 12:37 | 显示全部楼层
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. #define u8 unsigned char
  4. #define u16  unsigned int

  5. #define DECODE_MODE  0x09
  6. #define INTENSITY    0x0A
  7. #define SCAN_LIMIT   0x0B
  8. #define SHUT_DOWN    0x0C
  9. #define DISPLAY_TEST 0x0F

  10. #define BLOCKS 8


  11. sbit MAX7219_CLK = P1^2;
  12. sbit MAX7219_CS  = P1^1;
  13. sbit MAX7219_DIN = P1^0;

  14. u8 code bytes[] = {
  15.        
  16. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  17. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  18. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  19. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  20. /* 热[0xC8C8]   16x16 */
  21. 0x08,0x40,0x08,0x40,0x08,0x48,0x7F,0xFC,0x08,0x48,0x0A,0x48,0x1C,0xC8,0x68,0x48,
  22. 0x08,0xA8,0x08,0x8A,0x29,0x0A,0x12,0x04,0x00,0x00,0x48,0x88,0x44,0x46,0x84,0x42,
  23. /* GB2312 16x16点阵字库*/
  24. /* 烈[0xC1D2]   16x16 */
  25. 0x01,0x04,0x7F,0x84,0x10,0x24,0x10,0x24,0x1F,0x24,0x21,0x24,0x21,0x24,0x52,0x24,
  26. 0x0C,0x24,0x08,0x04,0x30,0x0C,0x40,0x00,0x28,0x90,0x24,0x4C,0x44,0x46,0x80,0x02,
  27. /* GB2312 16x16点阵字库*/
  28. /* 祝[0xD7A3]   16x16 */
  29. 0x20,0x08,0x13,0xFC,0x12,0x08,0x02,0x08,0xFE,0x08,0x0A,0x08,0x12,0x08,0x3B,0xF8,
  30. 0x56,0xA8,0x90,0xA0,0x10,0xA0,0x11,0x20,0x11,0x22,0x12,0x22,0x14,0x1E,0x18,0x00,
  31. /* GB2312 16x16点阵字库*/
  32. /* 贺[0xBAD8]   16x16 */
  33. 0x10,0x00,0x10,0x04,0x7F,0x7E,0x11,0x44,0x11,0x44,0x25,0x7C,0x42,0x10,0x9F,0xF8,
  34. 0x10,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x02,0xC0,0x0C,0x30,0x30,0x08,
  35. /* GB2312 16x16点阵字库*/
  36. /* 中[0xD6D0]   16x16 */
  37. 0x01,0x00,0x01,0x00,0x01,0x04,0x7F,0xFE,0x41,0x04,0x41,0x04,0x41,0x04,0x41,0x04,
  38. 0x7F,0xFC,0x41,0x04,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
  39. /* GB2312 16x16点阵字库*/
  40. /* 南[0xC4CF]   16x16 */
  41. 0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x01,0x04,0x7F,0xFE,0x48,0x24,0x44,0x44,
  42. 0x5F,0xF4,0x41,0x04,0x41,0x04,0x5F,0xF4,0x41,0x04,0x41,0x04,0x41,0x14,0x40,0x08,
  43. /* GB2312 16x16点阵字库*/
  44. /* 大[0xB4F3]   16x16 */
  45. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x80,
  46. 0x02,0x80,0x02,0x40,0x04,0x40,0x04,0x20,0x08,0x10,0x10,0x0E,0x60,0x04,0x00,0x00,
  47. /* GB2312 16x16点阵字库*/
  48. /* 学[0xD1A7]   16x16 */
  49. 0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
  50. 0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
  51. /* GB2312 16x16点阵字库*/
  52. /* 物[0xCEEF]   16x16 */
  53. 0x11,0x00,0x11,0x00,0x51,0x00,0x51,0x04,0x7B,0xFE,0x54,0xA4,0x90,0xA4,0x1C,0xA4,
  54. 0x31,0x24,0xD1,0x44,0x12,0x44,0x12,0x44,0x14,0x84,0x10,0x84,0x11,0x28,0x10,0x10,
  55. /* GB2312 16x16点阵字库*/
  56. /* 理[0xC0ED]   16x16 */
  57. 0x00,0x08,0x13,0xFC,0xFA,0x48,0x22,0x48,0x23,0xF8,0x22,0x48,0xFA,0x48,0x23,0xF8,
  58. 0x20,0x40,0x20,0x50,0x23,0xF8,0x3C,0x40,0xE0,0x40,0x40,0x44,0x0F,0xFE,0x00,0x00,
  59. /* GB2312 16x16点阵字库*/
  60. /* 与[0xD3EB]   16x16 */
  61. 0x10,0x00,0x10,0x00,0x10,0x08,0x1F,0xFC,0x10,0x00,0x10,0x00,0x10,0x08,0x1F,0xFC,
  62. 0x00,0x08,0x00,0x08,0x00,0x48,0xFF,0xE8,0x00,0x08,0x00,0x08,0x00,0x50,0x00,0x20,
  63. /* GB2312 16x16点阵字库*/
  64. /* 电[0xB5E7]   16x16 */
  65. 0x02,0x00,0x02,0x00,0x02,0x10,0x7F,0xF8,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,
  66. 0x42,0x10,0x7F,0xF0,0x42,0x10,0x02,0x00,0x02,0x04,0x02,0x04,0x01,0xFC,0x00,0x00,
  67. /* GB2312 16x16点阵字库*/
  68. /* 子[0xD7D3]   16x16 */
  69. 0x00,0x00,0x3F,0xF0,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x04,0xFF,0xFE,
  70. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
  71. /* GB2312 16x16点阵字库*/
  72. /* 学[0xD1A7]   16x16 */
  73. 0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
  74. 0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
  75. /* 院[0xD4BA]   16x16 */
  76. 0x00,0x80,0x78,0x40,0x4F,0xFE,0x54,0x02,0x58,0x14,0x63,0xF8,0x50,0x00,0x48,0x08,
  77. 0x4F,0xFC,0x48,0xA0,0x68,0xA0,0x50,0xA0,0x41,0x22,0x41,0x22,0x42,0x1E,0x4C,0x00,
  78. /* GB2312 16x16点阵字库*/
  79. /* 成[0xB3C9]   16x16 */
  80. 0x00,0x80,0x00,0xA0,0x00,0x90,0x3F,0xFC,0x20,0x80,0x20,0x80,0x20,0x84,0x3E,0x44,
  81. 0x22,0x48,0x22,0x48,0x22,0x30,0x2A,0x20,0x24,0x62,0x40,0x92,0x81,0x0A,0x00,0x06,
  82. /* GB2312 16x16点阵字库*/
  83. /* 立[0xC1A2]   16x16 */
  84. 0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x08,0x7F,0xFC,0x00,0x00,0x00,0x10,0x10,0x10,
  85. 0x08,0x20,0x08,0x20,0x04,0x40,0x04,0x40,0x04,0x80,0x00,0x04,0xFF,0xFE,0x00,0x00,
  86. /* 字串 20   16x16  */
  87. 0x00,0x00,0x00,0x00,0x7C,0x7C,0xC6,0xC6,0x06,0xC6,0x0C,0xCE,0x18,0xD6,0x30,0xD6,
  88. 0x60,0xE6,0xC0,0xC6,0xC6,0xC6,0xFE,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  89. /* GB2312 16x16点阵字库*/
  90. /* 周[0xD6DC]   16x16 */
  91. 0x00,0x08,0x3F,0xFC,0x21,0x08,0x21,0x48,0x2F,0xE8,0x21,0x08,0x21,0x28,0x3F,0xF8,
  92. 0x20,0x48,0x27,0xE8,0x24,0x48,0x24,0x48,0x24,0x48,0x47,0xC8,0x84,0x28,0x00,0x10,
  93. /* GB2312 16x16点阵字库*/
  94. /* 年[0xC4EA]   16x16 */
  95. 0x08,0x00,0x08,0x08,0x1F,0xFC,0x11,0x00,0x21,0x00,0x41,0x10,0x1F,0xF8,0x11,0x00,
  96. 0x11,0x00,0x11,0x04,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00


  97. };

  98. u8 val[8];
  99. u8 character_len = sizeof(bytes) / 8;
  100. void delay(u16 x)
  101. {
  102.   u16 i,j;
  103.   for(i = 0; i < x; i++)
  104.     for(j = 0;j < 112; j++);
  105. }

  106. void Max7219_writeByte(u8 dat)
  107. {
  108.   u8 i;
  109.   MAX7219_CS = 0;
  110.   for(i = 8; i >= 1; i--)
  111.   {
  112.     MAX7219_CLK = 0;
  113.     MAX7219_DIN = dat & 0x80; // &10000000, 取最高位
  114.     dat = dat << 1;
  115.     MAX7219_CLK = 1;
  116.   }
  117. }



  118. void Max7219_singeWrite(u8 index, u8 addr, u8 dat)
  119. {
  120.   MAX7219_CS = 0;
  121.   Max7219_writeByte(addr);
  122.   Max7219_writeByte(dat);
  123. while(index--)
  124. {
  125. Max7219_writeByte(0x00);
  126. Max7219_writeByte(0x00);

  127. }
  128.   MAX7219_CS = 1;

  129. }

  130. void Max7219_multiWrite1(u8 addr, u8* dat)
  131. {
  132. u16 t=8;
  133.         MAX7219_CS = 0;
  134.   while(t--)
  135.   {
  136.                
  137.     Max7219_writeByte(addr);
  138.     Max7219_writeByte         (*dat++);
  139.                
  140.   }
  141.   MAX7219_CS = 1;
  142. }



  143. void Max7219_init(void)
  144. {
  145.   u8 i;
  146.   for (i = 0; i < BLOCKS; i++)
  147.   {
  148.     Max7219_singeWrite(i, SHUT_DOWN,   0x01);  // 0x00:shutdown, 0x01:normal
  149.     Max7219_singeWrite(i, DECODE_MODE, 0x00);  // No decode
  150.     Max7219_singeWrite(i, INTENSITY,   0x03);  // 0x00:min, 0x0F:max
  151.     Max7219_singeWrite(i, SCAN_LIMIT,  0x07);  // Display 8 digits
  152.     Max7219_singeWrite(i, DISPLAY_TEST, 0x00); // 0x00:normal, 0x01:test mode
  153.   }
  154. }


  155. void main(void)
  156. {
  157. u16 i=0,j=0,t=0,n=0,m=0,f;
  158.   Max7219_init();

  159. while(1)
  160.   {
  161.         f=0;
  162.     n = t / 8; // 第几个字
  163.                 m=t%8;

  164.     for(j=0;j<8;j++)
  165.                 {
  166.                          for(i=0;i<4;i++)
  167.                         {
  168.                                 f=(n+i)%(character_len/2);
  169.                                 val[i]=bytes[2*j+f/2*32+f%2]<<m;
  170.                                         val[i+4]=bytes[2*j+f/2*32+f%2+16]<<m;
  171.                                 f=(n+i+1)%(character_len/2);
  172.                                 val[i]|=bytes[2*j+f/2*32+f%2]>>8-m;
  173.                                 val[i+4]|=bytes[2*j+f/2*32+f%2+16]>>8-m;
  174.                         }

  175.                         Max7219_multiWrite1(j+1, val);
  176.     }
  177.                         t=(t+1)%(sizeof(bytes)/2);
  178.                
  179.                 delay(150);
  180.         }

  181.        
  182.         }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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