找回密码
 立即注册

QQ登录

只需一步,快速开始

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

16*32点阵屏单片机源码与仿真设计(上移,下移,左移,顺序,特殊)

  [复制链接]
跳转到指定楼层
楼主
芯片采用STC89C52,74HC154以及74HC595芯片作为列行驱动电路。主要有五种功能,上移,下移,左移,顺序,特殊。还设有拉幕功能。
能看懂代码的可自行修改汉字及拉幕特效。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



单片机源程序如下:
  1. #include<reg52.h>
  2. #define BLKN 4   
  3. #define TOTAL 8   
  4. #define TOTAL1 8   

  5. sbit G=P1^7;   
  6. sbit CLK=P1^6;
  7. sbit SCLR=P1^5;   

  8. sbit S1=P2^0;           
  9. sbit S2=P2^1;     
  10. sbit S3=P2^2;   
  11. sbit S4=P2^3;  
  12. sbit S5=P2^4;

  13. unsigned char keyval;
  14. unsigned char idata dispram[(BLKN/2)*32]={0};


  15. /*****************???*********************/
  16. unsigned char code Bmp[][32]=                                                                //上移,不卑不亢不慌不忙
  17. {
  18. 0x00,0x04,0xFF,0xFE,0x00,0x80,0x00,0x80,0x01,0x00,0x01,0x00,0x03,0x40,0x05,0x20,
  19. 0x09,0x18,0x11,0x0C,0x21,0x04,0x41,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
  20. 0x01,0x00,0x02,0x10,0x1F,0xF8,0x11,0x10,0x11,0x10,0x1F,0xF0,0x11,0x10,0x12,0x10,
  21. 0x1F,0xF0,0x05,0x00,0x09,0x04,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
  22. 0x00,0x04,0xFF,0xFE,0x00,0x80,0x00,0x80,0x01,0x00,0x01,0x00,0x03,0x40,0x05,0x20,
  23. 0x09,0x18,0x11,0x0C,0x21,0x04,0x41,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
  24. 0x02,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,0x00,0x20,0x0F,0xF0,0x08,0x20,
  25. 0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x22,0x10,0x22,0x20,0x1E,0x40,0x00,
  26. 0x00,0x04,0xFF,0xFE,0x00,0x80,0x00,0x80,0x01,0x00,0x01,0x00,0x03,0x40,0x05,0x20,
  27. 0x09,0x18,0x11,0x0C,0x21,0x04,0x41,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
  28. 0x11,0x10,0x11,0x14,0x1F,0xFE,0x11,0x10,0x58,0x44,0x57,0xFE,0x52,0x00,0x92,0x08,
  29. 0x13,0xFC,0x10,0x00,0x12,0x48,0x12,0x48,0x12,0x48,0x12,0x4A,0x14,0x4A,0x18,0x46,
  30. 0x00,0x04,0xFF,0xFE,0x00,0x80,0x00,0x80,0x01,0x00,0x01,0x00,0x03,0x40,0x05,0x20,
  31. 0x09,0x18,0x11,0x0C,0x21,0x04,0x41,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
  32. 0x10,0x80,0x10,0x60,0x10,0x20,0x10,0x04,0x5F,0xFE,0x5A,0x00,0x52,0x00,0x92,0x00,
  33. 0x12,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x12,0x08,0x13,0xFC,0x10,0x00,0x10,0x00,
  34. };
  35. unsigned char code Bmp1[][32]=                                                        //静态,通大
  36. {
  37. 0x03,0xF8,0x40,0x10,0x30,0xA0,0x10,0x48,0x03,0xFC,0x02,0x48,0xF2,0x48,0x13,0xF8,
  38. 0x12,0x48,0x12,0x48,0x13,0xF8,0x12,0x48,0x12,0x68,0x2A,0x50,0x44,0x06,0x03,0xFC,
  39. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x80,
  40. 0x02,0x80,0x02,0x40,0x04,0x40,0x04,0x20,0x08,0x10,0x10,0x0E,0x60,0x04,0x00,0x00,
  41. };
  42. unsigned char code Bmp2[][32]=                                                        //左移,人要学会知足常乐
  43. {
  44. 0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x08,0x7F,0xFC,
  45. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,
  46. 0x00,0x00,0x17,0xFE,0xFC,0x02,0x28,0xA4,0x21,0x18,0x22,0x08,0xF8,0x40,0x20,0x44,
  47. 0x2F,0xFE,0x20,0x40,0x20,0xE0,0x39,0x50,0xE2,0x48,0x44,0x4E,0x08,0x44,0x00,0x40,
  48. 0x01,0x00,0x01,0x08,0x7F,0xFC,0x01,0x10,0x1F,0xF8,0x10,0x10,0x1F,0xF0,0x10,0x10,
  49. 0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x14,0xFF,0xFE,0x08,0x20,0x10,0x18,0x20,0x08,
  50. 0x08,0x20,0x08,0x20,0x48,0x24,0x49,0xFE,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,
  51. 0x49,0x24,0x49,0x24,0x49,0x24,0x09,0x24,0x11,0x34,0x11,0x28,0x20,0x20,0x40,0x20,
  52. 0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x08,0x7F,0xFC,
  53. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,
  54. 0x00,0x00,0x17,0xFE,0xFC,0x02,0x28,0xA4,0x21,0x18,0x22,0x08,0xF8,0x40,0x20,0x44,
  55. 0x2F,0xFE,0x20,0x40,0x20,0xE0,0x39,0x50,0xE2,0x48,0x44,0x4E,0x08,0x44,0x00,0x40,
  56. 0x01,0x00,0x01,0x08,0x7F,0xFC,0x01,0x10,0x1F,0xF8,0x10,0x10,0x1F,0xF0,0x10,0x10,
  57. 0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x14,0xFF,0xFE,0x08,0x20,0x10,0x18,0x20,0x08,
  58. 0x08,0x20,0x08,0x20,0x48,0x24,0x49,0xFE,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,
  59. 0x49,0x24,0x49,0x24,0x49,0x24,0x09,0x24,0x11,0x34,0x11,0x28,0x20,0x20,0x40,0x20,
  60. };  
  61. unsigned char code Bmp3[][32]=                                                        //特殊,再见了
  62. {
  63. 0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x10,0x1F,0xF8,0x11,0x10,0x11,0x10,0x1F,0xF0,
  64. 0x11,0x10,0x11,0x14,0xFF,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x10,0x20,
  65. 0x00,0x10,0x1F,0xF8,0x10,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,
  66. 0x11,0x10,0x12,0x10,0x12,0x90,0x04,0x80,0x04,0x82,0x08,0x82,0x30,0x7E,0xC0,0x00,
  67. 0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,
  68. 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,
  69. 0x00,0x00,0xF8,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
  70. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  71. };  
  72. unsigned char code Bmp4[][32]=                                                        //下移,人要学会知足常乐
  73. {
  74. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x02,0x80,
  75. 0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x0E,0x40,0x04,
  76. 0x00,0x08,0x7F,0xFC,0x04,0x40,0x3F,0xF8,0x24,0x48,0x24,0x48,0x3F,0xF8,0x02,0x00,
  77. 0x02,0x04,0xFF,0xFE,0x04,0x20,0x08,0x20,0x06,0x40,0x01,0x80,0x06,0x60,0x38,0x10,
  78. 0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
  79. 0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
  80. 0x01,0x00,0x01,0x00,0x02,0x80,0x04,0x40,0x08,0x20,0x10,0x10,0x2F,0xEE,0xC0,0x04,
  81. 0x00,0x10,0x3F,0xF8,0x02,0x00,0x02,0x00,0x04,0x40,0x08,0x20,0x1F,0xF0,0x00,0x10,
  82. 0x20,0x00,0x20,0x00,0x22,0x04,0x3F,0x7E,0x28,0x44,0x48,0x44,0x88,0x44,0x09,0x44,
  83. 0xFF,0xC4,0x08,0x44,0x08,0x44,0x14,0x44,0x12,0x44,0x22,0x7C,0x40,0x44,0x80,0x00,
  84. 0x00,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x11,0x10,
  85. 0x01,0x00,0x11,0x10,0x11,0xF8,0x11,0x00,0x11,0x00,0x29,0x06,0x47,0xFC,0x80,0x00,
  86. 0x01,0x00,0x11,0x10,0x09,0x20,0x7F,0xFE,0x40,0x02,0x8F,0xE4,0x08,0x20,0x0F,0xE0,
  87. 0x01,0x10,0x1F,0xF8,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x50,0x01,0x20,0x01,0x00,
  88. 0x00,0x20,0x00,0xF0,0x1F,0x00,0x10,0x00,0x11,0x00,0x11,0x00,0x21,0x04,0x7F,0xFE,
  89. 0x01,0x00,0x01,0x00,0x09,0x20,0x09,0x10,0x11,0x08,0x21,0x0C,0x45,0x04,0x02,0x00,
  90. };  


  91. /*************延时1ms**************/
  92. void delay(unsigned int dt)
  93. {
  94.         register unsigned char bt;
  95.         for(;dt;dt--)
  96.         for(bt=0;bt<250;bt++);
  97. }


  98. /**********按键去抖********/
  99. void delay20ms(void)
  100. {
  101.         unsigned char i,j;   
  102.         for(i=0;i<100;i++)   
  103.         for(j=0;j<60;j++);
  104. }


  105. /***********上移****************/
  106. void fun1()
  107. {
  108.         register unsigned char i,j,k,q;
  109.         for(i=0;i<32;i++)   
  110.         {
  111.                 for(q=0;q<BLKN/2;q++)      
  112.                 {
  113.                         dispram[i+q*32]=0x00;
  114.                 }      
  115.                 if(i%2)delay(1);   
  116.         }
  117.         for(i=0;i<TOTAL*2/BLKN;i++)     
  118.         {
  119.                 for (j=0;j<16;j++)        
  120.                 {
  121.                         for(k=0;k<15;k++)         
  122.                         {
  123.                                 for(q=0;q<BLKN/2;q++)            
  124.                                 {
  125.                                         dispram[k*2+q*32]=dispram[(k+1)*2+q*32];               
  126.                                         dispram[k*2+1+q*32]=dispram[(k+1)*2+1+q*32];      
  127.                                 }         
  128.                         }        
  129.                         for(q=0;q<BLKN/2;q++)
  130.                         {
  131.                                 dispram[30+q*32]=Bmp[q+i*BLKN/2][j*2];
  132.                                 dispram[31+q*32]=Bmp[q+i*BLKN/2][j*2+1];
  133.                         }         
  134.                         delay(60);        
  135.                 }      
  136.         delay(250);
  137.         }

  138.         for(i=0;i<32;i++)               //下联
  139.         {
  140.                 for(q=0;q<BLKN/2;q++)         
  141.                 {
  142.                 dispram[i+q*32]=0x00;
  143.                 }         
  144.                 if(i%2)delay(60);      
  145.         }
  146.         delay(250);
  147. }

  148. void ledup(void)
  149. {
  150.         while(1)
  151.         {
  152.                 fun1();
  153.         }
  154. }


  155. /***********下移****************/
  156. void fun2()
  157. {
  158.         register unsigned char i,q,w;   
  159.         for(i=0;i<32;i++)   
  160.         {
  161.                 for(q=0;q<BLKN/2;q++)      
  162.                 {
  163.                         dispram[i+q*32]=0x00;
  164.                 }      
  165.                 if(i%2)delay(1);   
  166.         }
  167.         for (w=0;w<TOTAL*2/BLKN;w++)   
  168.         {
  169.                 for(i=0;i<32;i++)        
  170.                 {
  171.                         for(q=0;q<BLKN/2;q++)      
  172.                         {
  173.                                 dispram[i+q*32]=Bmp4[q+w*BLKN/2][i];
  174.                         }         
  175.                         if(i%2)delay(60);      
  176.                 }
  177.                 delay(250);   
  178.         }
  179.                
  180.         for(i=0;i<32;i++)    //下联
  181.         {
  182.                 for(q=0;q<BLKN/2;q++)      
  183.                 {
  184.                         dispram[i+q*32]=0x00;
  185.                 }      
  186.                 if(i%2)delay(60);   
  187.         }
  188.         delay(250);
  189. }

  190. void leddown(void)
  191. {
  192.         while(1)
  193.         {
  194.                 fun2();
  195.         }
  196. }


  197. /***********左移****************/
  198. void fun3()
  199. {
  200.         register unsigned char i,j,k,l,q;
  201.         for(i=0;i<32;i++)   
  202.         {
  203.                 for(q=0;q<BLKN/2;q++)      
  204.                 {
  205.                         dispram[i+q*32]=0x00;
  206.                 }      
  207.                 if(i%2)delay(1);   
  208.         }
  209.         for(i=0;i<TOTAL1;i++)      
  210.         {
  211.                 for(j=0;j<2;j++)         
  212.                 for(k=0;k<8;k++)         
  213.                 {  
  214.                         for(l=0;l<16;l++)               
  215.                         {
  216.                                 for(q=0;q<BLKN/2;q++)              
  217.                                 {
  218.                                         dispram[l*2+q*32]=dispram[l*2+q*32]<<1|dispram[l*2+1+q*32]>>7;               
  219.                                         if(q==BLKN/2-1)
  220.                                         dispram[l*2+1+q*32]=dispram[l*2+1+q*32]<<1|Bmp2[i][l*2+j]>>(7-k);                 
  221.                                         else
  222.                                         dispram[l*2+1+q*32]=dispram[l*2+1+q*32]<<1|dispram[l*2+(q+1)*32]>>7;
  223.                                 }
  224.                         }
  225.                         delay(10);        
  226.                 }     
  227.         }
  228.         delay(1);
  229.         
  230.         for(i=0;i<32;i++)                                 //下联
  231.         {
  232.                 for(q=0;q<BLKN/2;q++)
  233.                 {
  234.                         dispram[i+q*32]=0x00;
  235.                 }      
  236.                 if(i%2)delay(10);
  237.         }
  238.         delay(10);
  239. }

  240. void ledleft(void)
  241. {
  242.         while(1)
  243.         {
  244.                 fun3();
  245.         }
  246. }


  247. /***********特殊********************/
  248. void fun4()
  249. {
  250.         register unsigned char i,q,w;   
  251.         for(i=0;i<32;i++)  
  252.         {
  253.                 for(q=0;q<BLKN/2;q++)  
  254.                 {
  255.                         dispram[i+q*32]=0x00;
  256.                 }
  257.                 if(i%2)delay(1);   
  258.         }  
  259.         for(i=0;i<32;i++)
  260.         {
  261.                 for(q=0,w=2;q<1,w<3;q++,w++)   
  262.                 {
  263.                         dispram[i+q*32]=Bmp3[0][i];
  264.                         dispram[i+w*32]=Bmp3[0][i];
  265.                 }     
  266.                 if(i%2)delay(40);
  267.         }  
  268.         for(i=0;i<32;i++)
  269.         {   
  270.                 for(q=1,w=3;q<2,w<4;q++,w++)  
  271.                         {
  272.                         dispram[i+q*32]=Bmp3[1][i];
  273.                         dispram[i+w*32]=Bmp3[1][i];
  274.                 }   
  275.                 if(i%2)delay(60);  
  276.         }  
  277.         for(i=0;i<32;i++)
  278.         {
  279.                 for(q=0;q<1;q++)
  280.                 {
  281.                         dispram[i+q*32]=Bmp3[2][i];
  282.                         dispram[i+w*32]=Bmp3[2][i];
  283.                 }
  284.                 for(q=1;q<2;q++)
  285.                 {
  286.                         dispram[i+q*32]=Bmp3[3][i];
  287.                         dispram[i+w*32]=Bmp3[3][i];
  288.                 }
  289.                 if(i%2)delay(60);
  290.         }
  291.         delay(250);
  292.         
  293.         for(i=0;i<32;i++)                                        //下联
  294.         {
  295.                 for(q=0;q<BLKN/2;q++)
  296.                 {
  297.                         dispram[i+q*32]=0xff;
  298.                 }   
  299.                 if(i%2)delay(60);  
  300.         }   
  301.         delay(250);        
  302. }

  303. void ledflash(void)
  304. {
  305.         while(1)
  306.         {
  307.                 fun4();
  308.         }
  309. }

  310. /***********特殊********************/
  311. void ledorder(void)
  312. {
  313.         while(1)
  314.         {
  315.                 fun1();
  316.                 fun2();
  317.                 fun3();
  318.                 fun4();
  319.         }
  320. }

  321. /**********键盘扫描程序************/
  322. void key_scan(void)
  323. {
  324.         if((P2&0xff)!=0xf0)   
  325.         {
  326.                 delay20ms();   
  327.                 if(S1==0)
  328.                 keyval=1;  
  329.                 if(S2==0)   
  330.                 keyval=2;   
  331.                 if(S3==0)   
  332.                 keyval=3;   
  333.                 if(S4==0)
  334.                 keyval=4;
  335.                 if(S5==0)
  336.                 keyval=5;
  337.         }
  338. }


  339. /***********主函数**********/
  340. void main(void)
  341. {
  342.         register unsigned char i,q;
  343.         SCON=0X00;
  344.         TMOD=0X01;
  345.         TR0=1;
  346.         P1=0x3f;
  347.         ET0=1;
  348.         EA=1;
  349.         keyval=0;
  350.         
  351.         
  352.         while(1)
  353.         {   
  354.                         for(i=0;i<32;i++)     
  355.                         {
  356.                                 for(q=0;q<BLKN/2;q++)   
  357.                                 {
  358.                                         dispram[i+q*32]=Bmp1[q][i];
  359. ……………………

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

所有资料51hei提供下载:
16X32,FIVE FUNCTION.rar (170.23 KB, 下载次数: 318)



评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:326016 发表于 2018-5-9 16:38 | 只看该作者
请问一下有16*16的上移、下移、左移、顺序、特殊的码和仿真设计图吗?
回复

使用道具 举报

板凳
ID:342142 发表于 2019-4-25 23:55 | 只看该作者
这个通过程序能不能扩充成16×64的呢
回复

使用道具 举报

地板
ID:337540 发表于 2019-5-14 17:44 | 只看该作者
楼主,你好,如果我改成两个138驱动程序,应该怎么修改程序
回复

使用道具 举报

5#
ID:542094 发表于 2019-5-20 12:39 | 只看该作者
想请问为什么打开不了程序和仿真图
回复

使用道具 举报

6#
ID:320935 发表于 2019-5-20 15:22 | 只看该作者
学习学习
回复

使用道具 举报

7#
ID:539725 发表于 2019-9-24 10:01 | 只看该作者
hjyhjyhjy123 发表于 2019-5-20 12:39
想请问为什么打开不了程序和仿真图

这个仿真图好像要proteus8.2以上才打的开
回复

使用道具 举报

8#
ID:940122 发表于 2021-6-22 15:13 | 只看该作者
w159753123 发表于 2019-9-24 10:01
这个仿真图好像要proteus8.2以上才打的开

可是为什么我是8.9也打不开
回复

使用道具 举报

9#
ID:328014 发表于 2021-6-22 18:10 | 只看该作者
xueting 发表于 2021-6-22 15:13
可是为什么我是8.9也打不开

Proteus8.8白菜直装版 win7 可打开如图

51hei.png (53.15 KB, 下载次数: 55)

51hei.png
回复

使用道具 举报

10#
ID:927615 发表于 2021-6-25 17:37 来自手机 | 只看该作者
弄一个16*16能移动的就好了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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