找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2765|回复: 4
收起左侧

51单片机的16x128点阵显示文字Proteus仿真程序

[复制链接]
ID:520507 发表于 2020-4-25 12:59 | 显示全部楼层 |阅读模式
自己设计了一款基于51单片机的16*128大屏点阵显示文字,如效果如下图:
128.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit sclk=P1^1;
  6. sbit rclk=P1^2;
  7. sbit sdin=P1^0;
  8. sbit s1=P3^6;
  9. sbit s2=P3^7;
  10. bit fangxiang;
  11. uint alt,net,s3=30*25.5;
  12. int d1,d2;
  13. bit mode;
  14. uchar code tab[]={

  15. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/

  16. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",1*/

  17. 0x00,0x80,0x01,0x02,0x06,0x02,0x78,0x82,0x08,0x82,0x08,0x82,0x08,0x82,0x08,0x82,
  18. 0xFF,0xFE,0x48,0x82,0x08,0x82,0x08,0x82,0x19,0x82,0x08,0x86,0x00,0x02,0x00,0x00,/*"生",2*/

  19. 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFC,0x42,0x08,0x42,0x08,0x42,0x08,0x42,0x08,
  20. 0x42,0x08,0x42,0x08,0x42,0x08,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"日",3*/

  21. 0x0E,0x00,0x00,0x00,0xFF,0xFF,0x10,0x00,0x0D,0x01,0x11,0x02,0x11,0x0C,0x11,0x70,
  22. 0xFF,0x80,0x11,0x60,0x11,0x10,0x11,0x0C,0x1F,0x06,0x01,0x03,0x01,0x02,0x00,0x00,/*"快",4*/

  23. 0x00,0x00,0x00,0x04,0x02,0x18,0x3F,0x30,0x22,0xE0,0x22,0x48,0x22,0x04,0x62,0x02,
  24. 0x5F,0xFC,0x42,0x00,0xC2,0x00,0xC2,0x40,0x42,0x30,0x02,0x1C,0x00,0x08,0x00,0x00,/*"乐",5*/

  25. 0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  26. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"!",6*/


  27. /*--  文字:  点  --*/
  28. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  29. 0x00,0x01,0x00,0x02,0x03,0xEC,0x02,0x20,0x02,0x20,0x02,0x28,0xFE,0x26,0x12,0x20,
  30. 0x12,0x28,0x12,0x26,0x12,0x20,0x13,0xE0,0x10,0x08,0x10,0x07,0x00,0x00,0x00,0x00,
  31.                        
  32. /*--  文字:  阵  --*/
  33. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  34. 0x00,0x00,0x7F,0xFF,0x40,0x10,0x44,0x08,0x5B,0x10,0x60,0xE0,0x10,0x10,0x13,0x10,
  35. 0x1D,0x10,0xF1,0x10,0x17,0xFF,0x11,0x10,0x11,0x10,0x11,0x10,0x10,0x10,0x00,0x00,
  36.                        
  37. /*--  文字:  显  --*/
  38. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  39. 0x00,0x02,0x00,0x42,0x00,0x22,0x7F,0x1A,0x49,0x02,0x49,0xFE,0x49,0x02,0x49,0x02,
  40. 0x49,0x02,0x49,0xFE,0x49,0x02,0x7F,0x0A,0x00,0x12,0x00,0x62,0x00,0x02,0x00,0x00,

  41. /*--  文字:  示  --*/
  42. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  43. 0x02,0x04,0x02,0x08,0x42,0x10,0x42,0x60,0x42,0x00,0x42,0x02,0x42,0x01,0x43,0xFE,
  44. 0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x40,0x42,0x20,0x02,0x10,0x02,0x0C,0x00,0x00,

  45. /*--  文字:  屏  --*/
  46. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  47. 0x00,0x02,0x00,0x0C,0x7F,0xF0,0x48,0x20,0x49,0x21,0x4D,0x26,0x4B,0xF8,0x49,0x20,
  48. 0x49,0x20,0x49,0x20,0x4B,0xFF,0x4D,0x20,0x79,0x20,0x00,0x20,0x00,0x00,0x00,0x00,               

  49. /*--  文字:  程  --*/
  50. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  51. 0x24,0x10,0x24,0x60,0x25,0x80,0x7F,0xFF,0xC4,0x80,0x44,0x60,0x00,0x02,0x7C,0x92,
  52. 0x44,0x92,0x44,0x92,0x44,0xFE,0x44,0x92,0x44,0x92,0x7C,0x92,0x00,0x82,0x00,0x00,
  53. /*--  文字:  序  --*/
  54. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  55. 0x00,0x02,0x00,0x0C,0x3F,0xF0,0x20,0x00,0x20,0x80,0x20,0x80,0x28,0x80,0xA8,0x82,
  56. 0x6A,0x81,0x29,0xFE,0x2A,0x80,0x2C,0x80,0x28,0x80,0x20,0xA0,0x20,0xC0,0x00,0x00,

  57. /*--  文字:  设  --*/
  58. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  59. 0x02,0x00,0x02,0x00,0x42,0x00,0x33,0xFC,0x00,0x09,0x02,0x11,0x05,0x02,0x79,0xC2,
  60. 0x41,0x34,0x41,0x08,0x41,0x14,0x79,0x62,0x05,0x82,0x04,0x01,0x04,0x01,0x00,0x00,

  61. /*--  文字:  计  --*/
  62. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  63. 0x02,0x00,0x02,0x00,0x42,0x00,0x33,0xFE,0x00,0x04,0x02,0x08,0x02,0x00,0x02,0x00,
  64. 0x02,0x00,0xFF,0xFF,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,

  65. /*--  文字:  与  --*/
  66. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  67. 0x00,0x10,0x00,0x10,0x07,0x10,0xF9,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,
  68. 0x11,0x10,0x11,0x12,0x11,0x01,0x11,0x02,0x11,0xFC,0x10,0x00,0x00,0x00,0x00,0x00,

  69. /*--  文字:  仿  --*/
  70. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  71. 0x00,0x80,0x01,0x00,0x06,0x00,0x1F,0xFF,0xE0,0x01,0x10,0x02,0x10,0x0C,0x1F,0xF0,
  72. 0x91,0x00,0x71,0x02,0x11,0x01,0x11,0x02,0x11,0xFC,0x10,0x00,0x10,0x00,0x00,0x00,

  73. /*--  文字:  真  --*/
  74. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  75. 0x00,0x08,0x20,0x08,0x20,0x09,0x2F,0xFA,0x2A,0xAC,0x2A,0xA8,0x2A,0xA8,0xFA,0xA8,
  76. 0x2A,0xA8,0x2A,0xA8,0x2A,0xAC,0x2F,0xFA,0x20,0x09,0x20,0x08,0x00,0x08,0x00,0x00,





  77. 0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04,/*"h",7*/

  78. 0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xFC,0x00,0x04,/*"a",8*/

  79. 0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00,/*"p",9*/

  80. 0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00,/*"p",10*/

  81. 0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00,/*"y",11*/

  82. 0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*".",12*/

  83. 0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00,/*"b",13*/

  84. 0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,/*"i",14*/

  85. 0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00,/*"r",15*/

  86. 0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04,0x00,0x00,0x00,0x00,/*"t",16*/

  87. 0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04,/*"h",17*/

  88. 0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1F,0xFC,0x00,0x04,/*"d",18*/

  89. 0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xFC,0x00,0x04,/*"a",19*/

  90. 0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00,/*"y",20*/

  91. 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,/*"!",21*/

  92. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",22*/

  93. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",23*/

  94. };

  95. void delay(uint z)           //延时子函数
  96. {
  97.    uchar x;
  98.    for(;z>0;z--)
  99.    for(x=110;x>0;x--);
  100. }

  101. void writedata(uchar dat1,uchar dat2,uchar dat3,uchar dat4,uchar dat5,uchar dat6,uchar dat7,uchar dat8,uchar dat9,uchar dat10,uchar dat11,uchar dat12,uchar dat13,uchar dat14,uchar dat15,uchar dat16)         //595显示子函数
  102. {
  103.   uchar i;
  104.   for(i=0;i<8;i++)                //循环八次
  105.   {
  106.     dat1=dat1>>1;                //数据左移
  107.           sdin=CY;
  108.           sclk=1;
  109.           
  110.           sclk=0;
  111.   }
  112.   for(i=0;i<8;i++)          //循环八次
  113.   {
  114.       dat2=dat2>>1;          //数据左移
  115.           sdin=CY;
  116.           sclk=1;
  117.           
  118.           sclk=0;
  119.   }
  120.         for(i=0;i<8;i++)          //循环八次
  121.   {
  122.       dat3=dat3>>1;          //数据左移
  123.           sdin=CY;
  124.           sclk=1;
  125.           
  126.           sclk=0;
  127.   }
  128.         for(i=0;i<8;i++)          //循环八次
  129.   {
  130.       dat4=dat4>>1;          //数据左移
  131.           sdin=CY;
  132.           sclk=1;
  133.           
  134.           sclk=0;
  135.   }
  136.        
  137.         for(i=0;i<8;i++)                //循环八次
  138.   {
  139.     dat5=dat5>>1;                //数据左移
  140.           sdin=CY;
  141.           sclk=1;
  142.           
  143.           sclk=0;
  144.   }
  145.   for(i=0;i<8;i++)          //循环八次
  146.   {
  147.       dat6=dat6>>1;          //数据左移
  148.           sdin=CY;
  149.           sclk=1;
  150.           
  151.           sclk=0;
  152.   }
  153.         for(i=0;i<8;i++)          //循环八次
  154.   {
  155.       dat7=dat7>>1;          //数据左移
  156.           sdin=CY;
  157.           sclk=1;
  158.           
  159.           sclk=0;
  160.   }
  161.         for(i=0;i<8;i++)          //循环八次
  162.   {
  163.       dat8=dat8>>1;          //数据左移
  164.           sdin=CY;
  165.           sclk=1;
  166.           
  167.           sclk=0;
  168.   }
  169.        
  170. for(i=0;i<8;i++)                //循环八次
  171.   {
  172.     dat9=dat9>>1;                //数据左移
  173.           sdin=CY;
  174.           sclk=1;
  175.           
  176.           sclk=0;
  177.   }
  178.   for(i=0;i<8;i++)          //循环八次
  179.   {
  180.       dat10=dat10>>1;          //数据左移
  181.           sdin=CY;
  182.           sclk=1;
  183.           
  184.           sclk=0;
  185.   }
  186.         for(i=0;i<8;i++)          //循环八次
  187.   {
  188.       dat11=dat11>>1;          //数据左移
  189.           sdin=CY;
  190.           sclk=1;
  191.           
  192.           sclk=0;
  193.   }
  194.         for(i=0;i<8;i++)          //循环八次
  195.   {
  196.       dat12=dat12>>1;          //数据左移
  197.           sdin=CY;
  198.           sclk=1;
  199.           
  200.           sclk=0;
  201.   }
  202.        
  203.         for(i=0;i<8;i++)                //循环八次
  204.   {
  205.     dat13=dat13>>1;                //数据左移
  206.           sdin=CY;
  207.           sclk=1;
  208.           
  209.           sclk=0;
  210.   }
  211.   for(i=0;i<8;i++)          //循环八次
  212.   {
  213.       dat14=dat14>>1;          //数据左移
  214.           sdin=CY;
  215.           sclk=1;
  216.           
  217.           sclk=0;
  218.   }
  219.         for(i=0;i<8;i++)          //循环八次
  220.   {
  221.       dat15=dat15>>1;          //数据左移
  222.           sdin=CY;
  223.           sclk=1;
  224.           
  225.           sclk=0;
  226.   }
  227.         for(i=0;i<8;i++)          //循环八次
  228.   {
  229.       dat16=dat16>>1;          //数据左移
  230.           sdin=CY;
  231.           sclk=1;
  232.           
  233.           sclk=0;
  234.   }        
  235.        
  236.        
  237.        
  238.        
  239.        
  240.        
  241.   rclk=0;                        //输出显示
  242.   rclk=1;
  243.   rclk=0;
  244. }


  245. void xianshi()                        //显示
  246. {
  247.    char aa;
  248.              
  249.               P2=P2+1;   //列扫描
  250.               writedata(tab[net+aa],tab[net+aa+1],tab[net+aa+32],tab[net+aa+33],tab[net+aa+64],tab[net+aa+65],tab[net+aa+96],tab[net+aa+97],tab[net+aa+128],tab[net+aa+129],tab[net+aa+160],tab[net+aa+161],tab[net+aa+192],tab[net+aa+193],tab[net+aa+224],tab[net+aa+225]);         //显示数据
  251.                   delay(1);                                                                //延时
  252.                   writedata(0,0,0,0);                                           //清屏
  253.                   aa+=2;                                                           //数据加 实现扫描
  254.                   if(aa>30) aa=0;                                              //循环16次 清零
  255.           //}
  256.    
  257. }

  258. void main()         //主函数
  259. {
  260.    sclk=0;
  261.    rclk=1;
  262.    ET0=1;         //使能定时器0
  263.    EA=1;         //开启总中断
  264.    TR0=1;        //开始计数
  265.    while(1)         //无限循环
  266.    {
  267.            xianshi();  //显示
  268.            if(s1==0)   //检测按键
  269. ……………………

  270. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
51hei.png
所有资料51hei提供下载:
51单片机16X128点阵显示.rar (204.22 KB, 下载次数: 62)

评分

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

查看全部评分

回复

使用道具 举报

ID:520507 发表于 2020-4-26 21:49 | 显示全部楼层
abcd-a 发表于 2020-4-25 17:01
要是加字库如何编写

用取模软件把字库的代码取出来存放在一个矩阵数组里,调用就可以
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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