找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机的16×32点阵屏字幕显示程序仿真原理图设计

[复制链接]
ID:1045859 发表于 2022-9-25 23:03 | 显示全部楼层 |阅读模式
用了一个星期的时间,经过长时间打磨
有工程文件和仿真文件
原创加二次改编的
具体问题留帖

电路原理图如下:
51hei.png

单片机源程序如下:
  1. //宏定义
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. //头函数
  5. #include <reg51.h>
  6. #include <intrins.h>

  7. //管脚定义
  8. //154
  9. sbit A_=P0^0;
  10. sbit B_=P0^1;
  11. sbit C_=P0^2;
  12. sbit D_=P0^3;
  13. sbit G2=P0^7;//低电平使能
  14. //595
  15. sbit SI=P0^6;//数据脚
  16. sbit SCK=P0^5;
  17. sbit RCK=P0^4;
  18. //管脚定义
  19. //154
  20. sbit A_1=P2^0;
  21. sbit B_1=P2^1;
  22. sbit C_1=P2^2;
  23. sbit D_1=P2^3;
  24. sbit G2_1=P2^7;//低电平使能
  25. //595
  26. sbit SI_1=P2^6;//数据脚
  27. sbit SCK_1=P2^5;
  28. sbit RCK_1=P2^4;
  29. sbit K1=P1^0;
  30. sbit K2=P1^1;
  31. sbit K3=P1^2;
  32. uchar flag1,flag2,X,Y;
  33. uchar zishu=10;                                //字数
  34. uint num;
  35. bit ssflag;
  36. uchar sscount;
  37. //函数声明
  38. void Init595();
  39. void Init595_1();
  40. void Write_byte595(uchar temp);
  41. void Write_byte595_1(uchar temp);
  42. void WriteS(uchar data1,uchar data2);
  43. void WriteS_1(uchar data1,uchar data2);
  44. void Wei_154(uchar W);
  45. void Wei_154_1(uchar W);
  46. void delay(uint z);
  47. void scan();

  48. //汉字数组
  49. uchar code HanZi[]=
  50. {

  51. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",0*/

  52. 省略

  53. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",18*/

  54. };

  55. void scan()
  56. {
  57.   if(K1==0)
  58.     {
  59.           delay(70);
  60.           if(K1==0)
  61.           {
  62.                   WriteS(0xff,0xff);//消影
  63.             while(K1==0);
  64.                         ssflag=0;
  65.             flag1++;
  66.                 if(flag1==2)
  67.                  flag1=0;
  68.                  Y=num;
  69.                  X=0;
  70.                  
  71.           }
  72.         }
  73.    if(K2==0)
  74.    {
  75.      delay(70);
  76.          {
  77.            if(K2==0)
  78.            {
  79.                    WriteS(0xff,0xff);//消影
  80.              while(K2==0);
  81.                          ssflag=0;
  82.                 // Y=num;
  83.                 // X=0;
  84.              flag2++;
  85.                  if(flag2==2)
  86.          flag2=0;

  87.            }
  88.          }
  89.    }
  90.          if(K3==0)
  91.          {
  92.                  delay(70);
  93.                  if(K3==0)
  94.                  {
  95.                                 WriteS(0xff,0xff);//消影
  96.                                 while(!K3);
  97.                                 ssflag = ~ssflag;
  98.                                  flag1=0;
  99.                                  flag2=0;
  100.                                  Y=num;
  101.                                         X=0;
  102.                  }
  103.          }
  104. }

  105. //主函数
  106. void main()
  107. {
  108.         uchar i=1,j=0;
  109.         
  110.         flag1=0;
  111.         num=16*(zishu+3);
  112.         
  113.         //595c初始化
  114.         Init595();
  115.         Init595_1();
  116.         //循环演示
  117.         while(1)
  118.         {        
  119.             
  120.                 if(flag1==0)
  121.                 {
  122.                         if(ssflag==0){
  123.                                         for(j=0;j<4;j++)
  124.                                         {        scan();
  125.                                                         for(i=1;i<17;i++)
  126.                                                         {
  127.                                                                
  128.                                                                 WriteS(0xff,0xff);//消影
  129.                                                                 Wei_154(i);
  130.                                                                

  131.                                                                 {WriteS(HanZi[i*2-2+2*X],HanZi[i*2-1+2*X]);}//显示内容
  132.                                                 
  133.                                                                
  134.                                        
  135.                                                                
  136.                                                                 delay(1);//显示
  137.                                                                 G2=0;//关闭
  138.                                                                 WriteS_1(0xff,0xff);//消影
  139.                                                                
  140.                                                                 Wei_154_1(i);

  141.                                                                 WriteS_1(HanZi[i*2-2+2*X+32],HanZi[i*2-1+2*X+32]);//显示内容

  142.                                                 
  143.                                                                 delay(1);//显示
  144.                                                                 G2_1=0;//关闭

  145.                                                                
  146.                                                                
  147.                                                         }
  148.                                                 }
  149.                                                 if(flag2==0)
  150.                                                 {
  151.                                                                 X++;
  152.                                                                 if(X>=num)        //16*字数+2
  153.                                                                 {
  154.                                                                          X=0;
  155.                                                                 }
  156.                                                 }
  157.                                 }else{
  158.                                         scan();
  159.                                                         sscount++;
  160.                                                         if(sscount>=50){
  161.                                                                 sscount=0;
  162.                                                                 X=X+2*16;
  163.                                                                 if(X>=num-16)        //16*字数+2
  164.                                                                 {
  165.                                                                          X=32;
  166.                                                                 }
  167.                                                         }
  168.                                                         if(sscount<20){
  169.                                                                 for(i=1;i<17;i++)
  170.                                                                 {
  171.                                                                         WriteS(0xff,0xff);//消影
  172.                                                                         Wei_154(i);
  173.                                                                         

  174.                                                                         {WriteS(HanZi[i*2-2+2*X],HanZi[i*2-1+2*X]);}//显示内容
  175.                                                         
  176.                                                                         
  177.                                                 
  178.                                                                         
  179.                                                                         delay(1);//显示
  180.                                                                         G2=0;//关闭
  181.                                                                         WriteS_1(0xff,0xff);//消影
  182.                                                                         
  183.                                                                         Wei_154_1(i);

  184.                                                                         WriteS_1(HanZi[i*2-2+2*X+32],HanZi[i*2-1+2*X+32]);//显示内容

  185.                                                         
  186.                                                                         delay(1);//显示
  187.                                                                         G2_1=0;//关闭
  188.                                                                         
  189.                                                                         
  190.                                                                 }
  191.                                                         }else{
  192.                                                                 for(i=1;i<17;i++)
  193.                                                                 {
  194.                                                                         WriteS(0xff,0xff);//消影
  195.                                                                         Wei_154(i);
  196.                                                                         

  197.                                                                         {WriteS(HanZi[i*2-2+2*0],HanZi[i*2-1+2*0]);}//显示内容
  198.                                                         
  199.                                                                         
  200.                                                 
  201.                                                                         
  202.                                                                         delay(1);//显示
  203.                                                                         G2=0;//关闭
  204.                                                                         WriteS_1(0xff,0xff);//消影
  205.                                                                         
  206.                                                                         Wei_154_1(i);

  207.                                                                         WriteS_1(HanZi[i*2-2+2*0+32],HanZi[i*2-1+2*0+32]);//显示内容

  208.                                                         
  209.                                                                         delay(1);//显示
  210.                                                                         G2_1=0;//关闭
  211.                                                                         
  212.                                                                         
  213.                                                                 }
  214.                                                         }
  215.                                 }
  216.                         }
  217.         if(flag1==1)
  218.                 {
  219.               
  220.                         for(j=0;j<4;j++)
  221.                         {        scan();
  222.                                 for(i=1;i<17;i++)
  223.                                 {
  224.                                        
  225.                                         WriteS(0xff,0xff);//消影
  226.                                         Wei_154(i);
  227.                                        
  228.         
  229.                                         WriteS(HanZi1[i*2-2+2*Y-32],HanZi1[i*2-1+2*Y-32]);//显示内容
  230.                
  231.                                        
  232.                                 
  233.                                        
  234.                                         delay(1);//显示
  235.                                         G2=0;//关闭
  236.                                         WriteS_1(0xff,0xff);//消影
  237.                                          
  238.                                      Wei_154_1(i);

  239.                                                 WriteS_1(HanZi1[i*2-2+2*Y],HanZi1[i*2-1+2*Y]);//显示内容
  240.                
  241.                
  242.                                                 delay(1);//显示
  243.                                                 G2_1=0;//关闭
  244.                                                 
  245.                                                 
  246.                                 }
  247.                         }
  248.                         if(flag2==0)
  249.                         {
  250.                                         Y--;
  251.                                         if(Y<=0)
  252.                                         Y=num;        
  253.                         }
  254.                 }  
  255.         }
  256. }

  257. //初始化
  258. void Init595()
  259. {
  260.         SI=1;
  261.         SCK=0;
  262.         RCK=0;
  263. }
  264. void Init595_1()
  265. {
  266.         SI_1=1;
  267.         SCK_1=0;
  268.         RCK_1=0;
  269. }

  270. void Write_byte595(uchar temp)
  271. {
  272.         uchar i,data_=temp;
  273.         G2=1;
  274.         for(i=0;i<8;i++)//传值8位
  275.         {
  276.                 if(data_&0x01==0x01)//低位为1
  277.                 {
  278.                         SI=1;
  279.                 }
  280.                 else                                         //低位为0
  281.                 {
  282.                         SI=0;
  283.                 }
  284.                 //产生一个上升沿
  285. ……………………

  286. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

Proteus8.10版本的仿真图(只支持此版本打开)与程序:
仿真程序.7z (11.22 MB, 下载次数: 50)

评分

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

查看全部评分

回复

使用道具 举报

ID:204529 发表于 2023-3-1 20:43 | 显示全部楼层
非常齐全的资料,感谢分享!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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