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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7716|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)按鍵控制16*16LED點(diǎn)陣0-9滾動(dòng)仿真電路和源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
51單片機(jī)驅(qū)動(dòng)的16*16 LED 點(diǎn)陣 0-9滾動(dòng)   74HC595  74HC138  74HC04
有4個(gè)按鍵

proteus仿真原理圖如下:



單片機(jī)源程序如下:
  1. /*2個(gè)點(diǎn)陣左/右移動(dòng)顯示*/
  2. /*頭文件*/
  3. #include <reg52.h>      
  4. #include <intrins.h>
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. #define NOP() _nop_()

  8. /*端口定義*/

  9. sbit EN_port = P1^3;
  10. sbit DA_in_port = P1^2;
  11. sbit CLK_port = P1^1;      //時(shí)鐘
  12. sbit Latch_port = P1^0;

  13. #define ABCD_port P1  //HC138 ABCD端口定義
  14. //sbit D_port = P1^7;
  15. //sbit C_port = P1^6;
  16. //sbit B_port = P1^5;
  17. //sbit A_port = P1^4;

  18. sbit S1 = P2^0;
  19. sbit S2 = P2^1;
  20. sbit S3 = P2^2;
  21. sbit S4 = P2^3;

  22. //顯示的字庫(kù)
  23. uchar code ziku_table[]={

  24. 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/*顯示8行空白*/
  25. 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

  26. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xDF,0xFE,0xEF,0xFD,0xEF,0xFD,0xEF,0xFD,
  27. 0xEF,0xFD,0xEF,0xFD,0xEF,0xFD,0xEF,0xFD,0xDF,0xFE,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,/*"C:\Users\Administrator\Desktop\點(diǎn)陣16x16陜顯示數(shù)字\0.BMP.BMP",0*/

  28. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0x1F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,
  29. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x1F,0xFC,0xFF,0xFF,0xFF,0xFF,/*"C:\Users\Administrator\Desktop\點(diǎn)陣16x16陜顯示數(shù)字\1.BMP",0*/


  30. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFC,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xFF,0xFD,
  31. 0xFF,0xFD,0xFF,0xFE,0x7F,0xFF,0xBF,0xFF,0xDF,0xFB,0x1F,0xF8,0xFF,0xFF,0xFF,0xFF,/*"C:\Users\Administrator\Desktop\點(diǎn)陣16x16陜顯示數(shù)字\2.BMP.BMP",0*/

  32. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFC,0xDF,0xFB,0xDF,0xFB,0xFF,0xFD,0x7F,0xFE,
  33. 0xFF,0xFD,0xFF,0xFB,0xFF,0xFB,0xDF,0xFB,0xDF,0xFD,0x3F,0xFE,0xFF,0xFF,0xFF,0xFF,/*"C:\Users\Administrator\Desktop\點(diǎn)陣16x16陜顯示數(shù)字\3.BMP",0*/


  34. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x7F,0xFE,0xBF,0xFE,0xDF,0xFE,0xDF,0xFE,
  35. 0xEF,0xFE,0xEF,0xFE,0x0F,0xFC,0xFF,0xFE,0xFF,0xFE,0x3F,0xFC,0xFF,0xFF,0xFF,0xFF,/*"C:\Users\Administrator\Desktop\點(diǎn)陣16x16陜顯示數(shù)字\4.BMP",0*/


  36. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xF8,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0x5F,0xFE,
  37. 0x9F,0xFD,0xFF,0xFB,0xFF,0xFB,0xDF,0xFB,0xDF,0xFD,0x3F,0xFE,0xFF,0xFF,0xFF,0xFF,/*"C:\Users\Administrator\Desktop\點(diǎn)陣16x16陜顯示數(shù)字\5.BMP",0*/

  38. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFC,0xBF,0xFD,0xDF,0xFF,0xDF,0xFF,0x5F,0xFE,
  39. 0x9F,0xFD,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xBF,0xFD,0x7F,0xFE,0xFF,0xFF,0xFF,0xFF,/*"C:\Users\Administrator\Desktop\點(diǎn)陣16x16陜顯示數(shù)字\6.BMP",0*/

  40. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xF8,0xDF,0xFD,0xDF,0xFD,0xFF,0xFE,0xFF,0xFE,
  41. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,/*"C:\Users\Administrator\Desktop\點(diǎn)陣16x16陜顯示數(shù)字\7.BMP",0*/

  42. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xFE,0xEF,0xFD,0xEF,0xFD,0xEF,0xFD,0xDF,0xFE,
  43. 0x3F,0xFF,0xDF,0xFE,0xEF,0xFD,0xEF,0xFD,0xEF,0xFD,0x1F,0xFE,0xFF,0xFF,0xFF,0xFF,/*"C:\Users\Administrator\Desktop\點(diǎn)陣16x16陜顯示數(shù)字\8.BMP",0*/

  44. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFE,0xBF,0xFD,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,
  45. 0xBF,0xF9,0x7F,0xFA,0xFF,0xFB,0xFF,0xFB,0xBF,0xFD,0x3F,0xFE,0xFF,0xFF,0xFF,0xFF,/*"C:\Users\Administrator\Desktop\點(diǎn)陣16x16陜顯示數(shù)字\9.BMP",0*/0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/*顯示8行空白*/
  46. 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

  47. 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/*顯示8行空白*/
  48. 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

  49. };


  50. uchar data disp_buff[64];         //64 個(gè)顯示數(shù)據(jù)緩存
  51.                                                         //數(shù)據(jù)格式為 第1級(jí)第1行高八位,低八位,第2級(jí)第1行高八位,低八位,第1級(jí)第2行高八位。。。。。。
  52. uchar data disp_han;                   //目前顯示到第幾行


  53. void T0_Set()                                         /*定義中斷方式,中斷時(shí)間*/
  54. {
  55.     TMOD = 0x01;                                  //定時(shí)0,工作在方式1
  56.     TH0  = (65536-1000)/256;
  57.     TL0  = (65536-1000)/256;
  58.     TR0  = 1;                                     //啟動(dòng)計(jì)數(shù)
  59.     EA   = 1;                                     //開(kāi)總中斷
  60.     ET0  = 1;                                     //開(kāi)定時(shí)器0中斷
  61.         return;
  62. }

  63. void delay_1ms(uchar x)        //延時(shí)1ms程序
  64. {
  65.     uchar j;
  66.     while(x--){
  67.         for(j=0;j<125;j++)
  68.             {;}
  69.         }   
  70. }


  71. void main()                      //主程序
  72. {
  73.         uchar i;
  74.         uint data_temp[3];
  75.         uint temp,temp1;
  76.         uchar hanzi;
  77.         uchar han;
  78.         uchar shift=1;

  79.         uchar mode=0;


  80. MM:shift=1;
  81.         mode=0;
  82. if(mode==0)
  83. {
  84.         for(i=0;i<64;i++) disp_buff[i]=0xff;
  85.         T0_Set();
  86.         while(1){
  87.                 for(hanzi=0;hanzi<10;hanzi++){        //最多顯示多少個(gè)字
  88.                         for(shift=0;shift<16;shift++){        //一個(gè)字移位16位
  89.                                 for(han=0;han<16;han++){   //一個(gè)字有16行數(shù)據(jù)                        
  90.                                         data_temp[0]=ziku_table[(hanzi*32)+(han*2)+1]*0x100 + ziku_table[(hanzi*32)+(han*2)];
  91.                                         data_temp[1]=ziku_table[((hanzi+1)*32)+(han*2)+1]*0x100 + ziku_table[((hanzi+1)*32)+(han*2)];
  92.                                         data_temp[2]=ziku_table[((hanzi+2)*32)+(han*2)+1]*0x100 + ziku_table[((hanzi+2)*32)+(han*2)];

  93. M0:            if(S2==0)
  94.         {
  95.                 delay_1ms(10);      //延時(shí)去抖動(dòng)
  96.                 mode=1; //在1 2 3中切換
  97.                  while(!S2){;}           //等待按鍵釋放
  98.                 goto M1;
  99.         }




  100.                  if(S3==0)
  101.         {
  102.                 delay_1ms(10);     //延時(shí)去抖動(dòng)
  103.         while(!S3){;}          //等待按鍵釋放
  104.                 goto MM;
  105.         }
  106.                  if(S4==0)
  107.         {
  108.                 delay_1ms(10);     //延時(shí)去抖動(dòng)
  109.         while(!S4){;}          //等待按鍵釋放
  110.                 while(1)
  111.                 {
  112.                         if(S1==0){mode=0;break;}
  113.                         if(S2==0){mode=1;break;}
  114.                         if(S3==0){mode=0;break;}
  115.                         if(S4==0){break;}
  116.                 }
  117.         }


  118.                                         //左往右移動(dòng)
  119.                                         temp = data_temp[0];
  120.                                         temp1 = data_temp[1];
  121.                                         for(i=shift;i>0;i--){
  122.                                                 temp = (temp<<1) ;
  123.                                                 if((temp1&0x8000)!=0) temp = temp + 0x0001;
  124.                                                 temp1 = (temp1<<1);
  125.                                                 }
  126.                                         disp_buff[han*4+3]=temp/0x100;
  127.                                         disp_buff[han*4+2]=temp%0x100;
  128.                                         //----------------------                                
  129.                                         temp = data_temp[1];
  130.                                         temp1 = data_temp[2];
  131.                                         for(i=shift;i>0;i--){
  132.                                                 temp = (temp<<1) ;
  133.                                                 if((temp1&0x8000)!=0) temp = temp + 0x0001;
  134.                                                 temp1 = (temp1<<1);
  135.                                                 }
  136.                                         disp_buff[han*4+1]=temp/0x100;
  137.                                         disp_buff[han*4]=temp%0x100;

  138.                         
  139.                                         }
  140.                                 delay_1ms(15); //移位速度
  141.                                 }
  142.                         }
  143. }//mode==0
  144. if(mode==1)
  145. {
  146.                 for(hanzi=0;hanzi<6;hanzi++){        //最多顯示多少個(gè)字
  147.                         for(shift=0;shift<16;shift++){        //一個(gè)字移位16位
  148.                                 for(han=0;han<16;han++){   //一個(gè)字有16行數(shù)據(jù)                        
  149.                                         data_temp[0]=ziku_table[(hanzi*32)+(han*2)+1]*0x100 + ziku_table[(hanzi*32)+(han*2)];
  150.                                         data_temp[1]=ziku_table[((hanzi+1)*32)+(han*2)+1]*0x100 + ziku_table[((hanzi+1)*32)+(han*2)];
  151.                                 data_temp[2]=ziku_table[((hanzi+2)*32)+(han*2)+1]*0x100 + ziku_table[((hanzi+2)*32)+(han*2)];
  152. M1:          if(S1==0)
  153.         {
  154.                 delay_1ms(10);           //延時(shí)去抖動(dòng)
  155.                 mode=0; //在1 2 3中切換
  156.                  while(!S1){;}                //等待按鍵釋放
  157.                 goto M0;
  158.         }         
  159.                  if(S3==0)
  160.         {
  161.                 delay_1ms(10);     //延時(shí)去抖動(dòng)
  162.         while(!S3){;}          //等待按鍵釋放
  163.                 goto MM;
  164.         }
  165.                  if(S4==0)
  166.         {
  167.                 delay_1ms(10);     //延時(shí)去抖動(dòng)
  168.         while(!S4){;}          //等待按鍵釋放
  169.                 while(1)
  170.                 {
  171.                         if(S1==0){mode=0;break;}
  172.                         if(S2==0){mode=1;break;}
  173.                         if(S3==0){mode=0;break;}
  174.                         if(S4==0){break;}
  175.                 }
  176.         }                                                        
  177.                                 
  178.                                 //右往左移動(dòng)
  179.                                         temp = data_temp[0];
  180.                                         temp1 = data_temp[1];
  181.                                         for(i=shift;i>0;i--){
  182.                                                 temp = (temp>>1) ;
  183.                                                 if((temp1&0x0001)!=0) temp = temp + 0x8000;
  184.                                                 temp1 = (temp1>>1);
  185.                                                 }
  186.                                         disp_buff[han*4+1]=temp/0x100;
  187.                                         disp_buff[han*4+0]=temp%0x100;
  188.                                         //------------------------------
  189.                                         temp = data_temp[1];
  190.                                         temp1 = data_temp[2];
  191.                                         for(i=shift;i>0;i--){
  192.                                                 temp = (temp>>1) ;
  193.                                                 if((temp1&0x0001)!=0) temp = temp + 0x8000;
  194.                                                 temp1 = (temp1>>1);
  195.                                                 }
  196.                                         disp_buff[han*4+3]=temp/0x100;
  197.                                         disp_buff[han*4+2]=temp%0x100;                                
  198.                                         }
  199.                                 delay_1ms(15); //移位速度
  200.                                 }
  201.                         }
  202.                 }
  203. }
  204. }



  205. void SLED_Disp() interrupt 1 using 3
  206. {
  207.         uchar i;
  208.         uchar data_buff;
  209.         uchar temp;
  210.         uchar zishu;
  211.         uchar code Module_Quantity=2; //模塊數(shù)量
  212.         uchar han;        
  213.     TH0  = (65536-1000)/256;
  214.     TL0  = (65536-1000)/256;
  215.         Latch_port = 0;  //HC595鎖定輸出,避免數(shù)據(jù)傳輸過(guò)程中,屏數(shù)據(jù)變化從而顯示閃爍
  216.         CLK_port = 0;
  217.         han=disp_han;
  218.         for(zishu=Module_Quantity;zishu>0;zishu--){
  219.                 temp = disp_han*Module_Quantity*2 + (zishu-1)*2+1;
  220.                 data_buff = disp_buff[temp];
  221.                 for(i=0;i<8;i++){
  222.                         if((data_buff&0x80)!=0) DA_in_port = 1;
  223.                         else DA_in_port = 0;
  224.                         CLK_port = 1;
  225.                         CLK_port = 0;
  226.                         data_buff <<= 1;
  227.                         }
  228.                 temp = disp_han*Module_Quantity*2 + (zishu-1)*2;
  229.                 data_buff = disp_buff[temp];
  230.                 for(i=0;i<8;i++){
  231.                         if((data_buff&0x80)!=0) DA_in_port = 1;
  232.                         else DA_in_port = 0;
  233.                         CLK_port = 1;
  234.                         CLK_port = 0;
  235.                         data_buff <<= 1;
  236.                         }
  237.                 }
  238.                  
  239.         EN_port = 1;    //關(guān)屏顯示,原理為使HC138輸出全為1,從而三極管截止,點(diǎn)陣不顯示
  240.         ABCD_port = (ABCD_port & 0x0f)|(han<<4);  //HC138譯碼輸出
  241.         Latch_port = 1; //允許HC595數(shù)據(jù)輸出到Q1-Q8端口
  242.         EN_port = 0;    //HC138輸出有效,打開(kāi)顯示
  243.         Latch_port = 0;        //鎖定HC595數(shù)據(jù)輸出

  244.         disp_han++;        //顯示下一行數(shù)據(jù)
  245.         if(disp_han>=16) disp_han=0;
  246. ……………………

  247. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
1 滾動(dòng)0-9 仿真電路和源程序.rar (59.32 KB, 下載次數(shù): 104)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:683847 發(fā)表于 2020-1-13 12:44 | 只看該作者
請(qǐng)問(wèn)應(yīng)用這個(gè)程序,我需要“應(yīng)用電子技術(shù)1班25號(hào)”這幾個(gè)字需要怎么改
回復(fù)

使用道具 舉報(bào)

板凳
ID:432653 發(fā)表于 2020-2-21 17:42 | 只看該作者
左移的時(shí)候會(huì)出現(xiàn)亂碼,咋整
回復(fù)

使用道具 舉報(bào)

地板
ID:830986 發(fā)表于 2020-10-20 14:41 | 只看該作者
求硬件電路的原理分析
回復(fù)

使用道具 舉報(bào)

5#
ID:949635 發(fā)表于 2021-7-6 14:07 | 只看該作者
請(qǐng)問(wèn)這個(gè)非門是干嘛的呢
回復(fù)

使用道具 舉報(bào)

6#
ID:874695 發(fā)表于 2021-7-13 15:21 | 只看該作者
兄弟怎么用獨(dú)立按鍵控制16X16點(diǎn)陣
按下K1 出現(xiàn)漢字 “開(kāi)”,10S后熄滅。
按下K2 出現(xiàn)漢字“關(guān)”,10S后熄滅。


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲综合在线视频 | 久久精品久久精品久久精品 | 日韩在线欧美 | 成人免费淫片aa视频免费 | 日韩av成人 | 国产精品久久久久久 | 99热首页| 久久久999国产精品 中文字幕在线精品 | 欧美精品一区二区三区四区 在线 | 欧美日本在线观看 | 欧美日韩在线一区二区三区 | 国产精品免费一区二区三区四区 | 国产精品区一区二区三区 | 国产成人一区二区三区精 | 男人的天堂视频网站 | 伊人久久麻豆 | 欧美精品国产精品 | 一二三四在线视频观看社区 | 亚洲国产精品成人综合久久久 | 亚洲h在线观看 | av片在线播放 | 亚洲综合区| av片毛片| 亚洲激精日韩激精欧美精品 | 成人一区二区三区视频 | a免费视频 | 精品一二区 | 99riav3国产精品视频 | 中文字幕国产精品视频 | 久久爆操 | 81精品国产乱码久久久久久 | 亚洲 中文 欧美 日韩 在线观看 | 一区二区三区四区免费观看 | av中文天堂| 欧美日韩国产一区二区三区 | 成人在线视频网址 | www国产成人免费观看视频,深夜成人网 | 久久一区精品 | 国产精品毛片在线 | 中文字幕视频在线观看 | 国产精品第2页 |