久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3810|回復: 0
打印 上一主題 下一主題
收起左側

單片機16×16點陣滾動顯示Proteus仿真+代碼 帶按鍵暫停按鍵

[復制鏈接]
跳轉到指定樓層
樓主
16×16點陣模塊仿真-按鍵暫停版仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


取模方式:


單片機源程序如下:
  1. #include "main.h"
  2. #include <intrins.h>

  3. #define Display_Num_Word 1                                //液晶能顯示的漢字個數

  4. unsigned char Display_Buffer[2];
  5. unsigned char Display_Swap_Buffer[Display_Num_Word][32]={0};                                        //顯示緩沖區
  6. bit Shift_Bit = 0;
  7. bit Flag_Shift = 0;
  8. #define Shift_Speed 5                                                                                        //移動速度
  9. unsigned char Timer0_Count = 0;
  10. unsigned char temp = 0x80;
  11. unsigned char Shift_Count = 0;
  12. unsigned char Display_Word_Count = 0;
  13. sbit Pause=P3^7;
  14. #define Num_Of_Word 8
  15. unsigned char code Word[Num_Of_Word][32] =
  16. {


  17. 0xDF,0xEC,0xED,0x05,0xF5,0xED,0xEC,0xC7,0xAB,0x6B,0xEF,0xEE,0xEE,0xED,0xEB,0xE7,
  18. 0xFF,0x03,0xFB,0xFB,0xFB,0xFB,0x03,0x6F,0x6F,0x6F,0x6F,0xED,0xED,0xED,0xF1,0xFF,/*"祝",0*/

  19. 0xFD,0xFD,0xC0,0xFD,0xFD,0x00,0xFE,0xFD,0xF3,0xE7,0xD0,0xB7,0x77,0xF7,0xF8,0xFF,
  20. 0xFF,0xF7,0x2F,0xDF,0xBF,0x01,0xFF,0xFF,0xEF,0x1F,0xFF,0xF7,0xF7,0xF7,0x07,0xFF,/*"老",1*/

  21. 0xF7,0xF4,0xB7,0xB7,0xB7,0xB6,0xB6,0xB6,0xB6,0xB6,0xB6,0xF6,0xEE,0xEF,0xDF,0xBF,
  22. 0xFF,0x01,0xDF,0xDF,0xDF,0x03,0xDB,0xDB,0xDB,0xDB,0xDB,0xCB,0xD7,0xDF,0xDF,0xDF,/*"師",2*/

  23. 0xEF,0xF7,0x80,0xFF,0xDD,0xEB,0x00,0xF7,0xF7,0x80,0xF7,0xD5,0xB6,0x77,0xD7,0xEE,
  24. 0xFF,0xFB,0x87,0xBF,0xBF,0xBF,0x81,0xB7,0xB7,0xB7,0xB7,0xB7,0xB7,0x77,0x77,0xF7,/*"新",3*/

  25. 0xEF,0xEF,0xE0,0xDF,0xDF,0xBF,0xE0,0xEF,0xEF,0xEF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
  26. 0xFF,0xFF,0x03,0x7F,0x7F,0x7F,0x07,0x7F,0x7F,0x7F,0x01,0x7F,0x7F,0x7F,0x7F,0x7F,/*"年",4*/

  27. 0xEF,0xEF,0xEF,0xEC,0xE7,0xAB,0xAF,0xAF,0x68,0xEF,0xEF,0xEF,0xEE,0xEE,0xED,0xEB,
  28. 0xBF,0xBF,0xBF,0x07,0xB7,0xB7,0xB7,0xB7,0x01,0xBF,0x5F,0x5F,0xEF,0xEF,0xF7,0xF9,/*"快",5*/

  29. 0xFF,0xFF,0xE0,0xEF,0xEE,0xDE,0xDE,0xC0,0xFE,0xF6,0xF6,0xEE,0xDE,0xBE,0xFA,0xFD,
  30. 0xDF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0xFF,0xDF,0xEF,0xF7,0xFB,0xFB,0xFF,0xFF,/*"樂",6*/

  31. 0xFF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF,0xEF,0xEF,0xFF,0xFF,
  32. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"!",7*/
  33. };

  34. //************************************************************
  35. //主函數
  36. //************************************************************
  37. void delay(unsigned int z)               
  38. {
  39.         unsigned int i,j;
  40.         for(i=0; i<z; i++)
  41.                 for(j = 0; j < 110; j++);
  42. }



  43. void main()
  44. {
  45.         Init_Timer0();
  46.         Clear_Display();
  47.         while(1)
  48.         {

  49.             if(Pause==0)                                   //暫停鍵
  50.                 {       
  51.                     delay(10);
  52.                         if(Pause==0)
  53.                     {
  54.                        TR0=~TR0;
  55.                     }while(Pause==0);                         
  56.                 }
  57.                 Display(Display_Swap_Buffer);
  58.                 if(Flag_Shift == 1)
  59.                 {
  60.                         Flag_Shift = 0;
  61.                         Display_Word_Count = Shift_Count/16;                                //計算當前顯示第幾個字
  62.                         Calc_Shift();                                                                               
  63.                        
  64.                         Shift_Count++;
  65.                        
  66.                         if(Shift_Count == (Num_Of_Word+1)*16 )                                //移動次數
  67.                         {
  68.                                 Shift_Count = 0;                               
  69.                         }                       
  70.                 }                                                                       
  71.         }
  72. }

  73. //****************************************************
  74. //初始化定時器0
  75. //****************************************************
  76. void Init_Timer0()
  77. {
  78.         TMOD = 0X01;                        //T0, 工作模式1

  79.         TH0 = (65536 - 50000)/256;
  80.         TL0 = (65536 - 50000)%256;

  81.         TR0 = 1;                                //開啟定時器
  82.         ET0 = 1;                            //開啟定時器中斷
  83.         EA = 1;                                        //開啟總中斷               
  84. }

  85. //****************************************************
  86. //中斷函數
  87. //****************************************************
  88. void Timer0() interrupt 1
  89. {
  90.         TH0 = (65536 - 50000)/256;
  91.         TL0 = (65536 - 50000)%256;
  92.        
  93.         TF0 = 0;
  94.         Timer0_Count++;
  95.         if(Timer0_Count >= Shift_Speed)
  96.         {
  97.                 Timer0_Count = 0;
  98.                 Flag_Shift = 1;
  99.         }

  100. }

  101. //************************************************************
  102. //計算移動數據,存在在緩沖器
  103. //************************************************************
  104. void Calc_Shift()
  105. {
  106.         unsigned char i;

  107.         for(i = 0;i < 16;i++)
  108.         {
  109.                 if((Display_Swap_Buffer[0][16+i]&0x80) == 0)                                                                        //前8位        移位
  110.                 {
  111.                         Display_Swap_Buffer[0][i] = (Display_Swap_Buffer[0][i] << 1)&0xfe;                         //最低位清零       
  112.                 }
  113.                 else
  114.                 {
  115.                         Display_Swap_Buffer[0][i] = (Display_Swap_Buffer[0][i] << 1)|0x01;                        //最低位置一        
  116.                 }

  117.                 if(Shift_Count%16 < 8 && Display_Word_Count < Num_Of_Word)
  118.                 {
  119.                         Shift_Bit = Word[Display_Word_Count][i]&temp;
  120.                 }
  121.                 else if(Shift_Count%16 < 16 && Display_Word_Count < Num_Of_Word)
  122.                 {
  123.                         Shift_Bit = Word[Display_Word_Count][16+i]&temp;
  124.                 }
  125.                 else
  126.                 {
  127.                         Shift_Bit = 1;                                                //把字移出緩沖區
  128.                 }

  129.                 if( Shift_Bit == 0)                                                                                                                //后8位移位
  130.                 {
  131.                         Display_Swap_Buffer[0][16+i] = (Display_Swap_Buffer[0][16+i] << 1)&0xfe;                 //最低位清零
  132.                 }
  133.                 else
  134.                 {
  135.                         Shift_Bit =        1;
  136.                         Display_Swap_Buffer[0][16+i] = (Display_Swap_Buffer[0][16+i] << 1)|0x01;                //最低位置一                        
  137.                 }
  138.                
  139.         }
  140.         temp = (temp>>1)&0x7f;
  141.         if(temp == 0x00)
  142.         {
  143.                 temp = 0x80;
  144.         }
  145. }

  146. //************************************************************
  147. //清空緩沖區
  148. //************************************************************
  149. void Clear_Display()
  150. {
  151.         unsigned char i,j;
  152.         for(j = 0 ; j < Display_Num_Word; j++)
  153.         {
  154.                 for(i = 0 ; i < 32 ;i++)
  155.                 {
  156.                         Display_Swap_Buffer[j][i] = 0xff;                                //0=顯示  1=不顯示        
  157.                 }
  158.         }
  159. }

  160. //************************************************************
  161. //num為字數  dat[][32]為字模的名稱
  162. //*************************************************************
  163. void Display(unsigned char dat[][32])                                       
  164. {
  165.         unsigned char i,j;

  166.         for( i = 0 ; i < 16 ; i++ )
  167.         {
  168.                 LEDARRAY_G = 1;                        //更新數據時候關閉顯示。等更新完數據,打開138顯示行。防止重影。

  169.                 Display_Buffer[0] = dat[0][i];               
  170.                 Display_Buffer[1] = dat[0][i+16];

  171.                 Send(Display_Buffer[1]);
  172.                 Send(Display_Buffer[0]);

  173.                 LEDARRAY_LAT = 1;                                        //鎖存數據
  174.                 _nop_();
  175.        
  176.                 LEDARRAY_LAT = 0;
  177.                 _nop_();

  178.                 Scan_Line(i);                                                //選擇第i行

  179.                 LEDARRAY_G = 0;
  180.                
  181.                 for( j = 0 ; j < 100 ; j++);                //延時一段時間,讓LED亮起來。                               
  182.         }       
  183. }

  184. //****************************************************
  185. //掃描某一行
  186. //****************************************************
  187. void Scan_Line( unsigned char m)
  188. {       
  189.         switch(m)
  190.         {
  191.                 case 0:                       
  192.                         LEDARRAY_D = 0;LEDARRAY_C = 0;LEDARRAY_B = 0;LEDARRAY_A = 0;                                        
  193.                         break;
  194.                 case 1:                                       
  195.                         LEDARRAY_D = 0;LEDARRAY_C = 0;LEDARRAY_B = 0;LEDARRAY_A = 1;                
  196.                         break;
  197.                 case 2:                                       
  198.                         LEDARRAY_D = 0;LEDARRAY_C = 0;LEDARRAY_B = 1;LEDARRAY_A = 0;                
  199.                         break;
  200.                 case 3:                                       
  201.                         LEDARRAY_D = 0;LEDARRAY_C = 0;LEDARRAY_B = 1;LEDARRAY_A = 1;                
  202.                         break;
  203.                 case 4:
  204.                         LEDARRAY_D = 0;LEDARRAY_C = 1;LEDARRAY_B = 0;LEDARRAY_A = 0;                
  205.                         break;
  206.                 case 5:
  207.                         LEDARRAY_D = 0;LEDARRAY_C = 1;LEDARRAY_B = 0;LEDARRAY_A = 1;                
  208.                         break;
  209.                 case 6:
  210.                         LEDARRAY_D = 0;LEDARRAY_C = 1;LEDARRAY_B = 1;LEDARRAY_A = 0;                
  211.                         break;
  212.                 case 7:
  213.                         LEDARRAY_D = 0;LEDARRAY_C = 1;LEDARRAY_B = 1;LEDARRAY_A = 1;                
  214.                         break;
  215.                 case 8:
  216.                         LEDARRAY_D = 1;LEDARRAY_C = 0;LEDARRAY_B = 0;LEDARRAY_A = 0;                
  217.                         break;
  218.                 case 9:
  219.                         LEDARRAY_D = 1;LEDARRAY_C = 0;LEDARRAY_B = 0;LEDARRAY_A = 1;                
  220.                         break;       
  221.                 case 10:
  222.                         LEDARRAY_D = 1;LEDARRAY_C = 0;LEDARRAY_B = 1;LEDARRAY_A = 0;                
  223.                         break;
  224.                 case 11:
  225.                         LEDARRAY_D = 1;LEDARRAY_C = 0;LEDARRAY_B = 1;LEDARRAY_A = 1;                
  226.                         break;
  227.                 case 12:
  228.                         LEDARRAY_D = 1;LEDARRAY_C = 1;LEDARRAY_B = 0;LEDARRAY_A = 0;                
  229.                         break;
  230.                 case 13:
  231.                         LEDARRAY_D = 1;LEDARRAY_C = 1;LEDARRAY_B = 0;LEDARRAY_A = 1;                
  232.                         break;
  233.                 case 14:
  234.                         LEDARRAY_D = 1;LEDARRAY_C = 1;LEDARRAY_B = 1;LEDARRAY_A = 0;                
  235.                         break;
  236.                 case 15:
  237.                         LEDARRAY_D = 1;LEDARRAY_C = 1;LEDARRAY_B = 1;LEDARRAY_A = 1;                
  238.                         break;
  239.                 default : break;       
  240.         }
  241. }

  242. ……………………

  243. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
16×16點陣模塊仿真-按鍵暫停版.rar (1.79 MB, 下載次數: 57)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本羞羞影院 | 亚洲国产精品91 | 在线观看成人免费视频 | 日日摸夜夜爽人人添av | 中文字幕视频在线观看 | h视频在线看 | 91久久久久久久久久久久久 | 免费在线视频一区二区 | 日韩在线观看一区 | 国产十日韩十欧美 | 天天影视亚洲综合网 | 高清久久久| 蜜桃av鲁一鲁一鲁一鲁 | 亚洲国产一区视频 | 一区二区三区在线免费观看 | 欧美一级免费看 | 91欧美 | 日本在线综合 | 成人美女免费网站视频 | 色免费视频| 天天干天天草 | 99久久久久久99国产精品免 | 九九久久99| 欧美三级电影在线播放 | 日本不卡免费新一二三区 | 99久久久久 | 国产精品无码久久久久 | 美女张开腿露出尿口 | 国产午夜精品视频 | 天天夜碰日日摸日日澡 | 国产成人精品一区二区 | 成人精品一区二区 | 国产精品亚洲欧美日韩一区在线 | 中文在线一区二区 | 欧美天堂 | 久久九九网站 | 亚洲精品黄 | 91xxx在线观看 | 国产在线视频一区二区董小宛性色 | 亚洲精品一区二区网址 | 成人午夜视频在线观看 |