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

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

QQ登錄

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

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

單片機(jī)16x16點(diǎn)陣顯示漢字程序 左右移動(dòng),可快慢,暫停

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:412177 發(fā)表于 2022-11-21 11:53 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include<reg52.h>
  2. #define uint                 unsigned int
  3. #define u16                 unsigned int
  4. #define uchar         unsigned char
  5. #define u8                         unsigned char
  6. sbit H_stcp                          =         P2^6;                //輸出時(shí)鐘線
  7. sbit H_shcp                          =         P2^7;   //HC595芯片輸入時(shí)鐘線
  8. sbit H_ds                            =         P2^5;                //數(shù)據(jù)線

  9. sbit HC138_A0                 =         P2^0;        //
  10. sbit HC138_A1                 =         P2^1;        //
  11. sbit HC138_A2                 =         P2^2;        //
  12. sbit HC138_A3                 =         P2^3;        //


  13. u16 volatile W_BCNT;                //顯示字標(biāo)志
  14. u8 volatile W_LCNT;                //顯示位移標(biāo)志
  15. u8 speed=5;                //移動(dòng)速度

  16. #define WORDNUM   8
  17. unsigned char code Word[WORDNUM][32] = {
  18. {0x00,0x00,0x31,0x2A,0x24,0x20,0x2F,0x20,0xE6,0x11,0x08,0xC4,0x3F,0x10,0x08,0x04,
  19. 0x00,0x06,0x88,0x00,0x07,0x01,0xC1,0x21,0x4D,0x11,0x81,0x01,0xEE,0x00,0x0C,0x02},/*"您",3*/

  20. {0x00,0x02,0x02,0x22,0x22,0x2A,0x26,0x22,0x63,0xA2,0x26,0x2A,0x22,0x22,0x02,0x02,
  21. 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x00},/*"辛",4*/

  22. {0x00,0x21,0x21,0x21,0x21,0xF9,0x21,0x21,0x2F,0x21,0x21,0xF9,0x21,0x21,0x21,0x21,
  23. 0x00,0x00,0x00,0x00,0x3F,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x3F,0x00,0x00,0x00},/*"苦",5*/

  24. {0x00,0x00,0x00,0x40,0x60,0x50,0x48,0x44,0x47,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
  25. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x02,0x00,0x00,0x00,0x00,0x00},/*"了",6*/

  26. /*--  文字:  軍  --*/
  27. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  28. {0x00,0x00,0x78,0x44,0x4B,0x70,0x49,0x44,0x00,0x07,0x34,0x2F,0xE4,0x37,0x08,0x04,
  29. 0x00,0x10,0x90,0x90,0xFF,0x90,0x90,0x50,0x00,0xFF,0x91,0xFC,0x90,0xF8,0x06,0x01},

  30. /*--  文字:  放  --*/
  31. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  32. {0x00,0x08,0x08,0x0F,0x08,0x08,0xE8,0x1B,0x04,0x12,0x13,0x12,0x52,0x9F,0x10,0x10,
  33. 0x00,0x01,0x02,0x84,0x68,0x10,0x68,0x84,0x02,0x01,0xFC,0x02,0x04,0xF0,0x0C,0x02},

  34. {0x00,0x60,0x50,0x44,0x44,0x44,0x44,0x44,0x45,0x5C,0x46,0x45,0x44,0x44,0x60,0x10,
  35. 0x00,0x08,0x08,0x48,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0xC8,0x48,0x08,0x08},





  36. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,
  37. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x00,0x00,0x00},/*"!",7*/






  38. };


  39. unsigned char  WordTemp[32] = {
  40. 0x01,0x01,0x61,0x71,0x19,0x0D,0x05,0xFF,0xFF,0x01,0x7D,0x7C,0x44,0x47,0x47,0x40,
  41. 0x02,0x06,0x0C,0x18,0x70,0xE4,0x86,0xFF,0xFF,0x00,0x7C,0x7E,0x43,0xC3,0xC2,0x00,
  42. };

  43. /*************************/
  44. //延時(shí)函數(shù)
  45. /*************************/
  46. void delay_ms(uint xms)
  47. {
  48.     uint i, j;
  49.     for(i = xms; i > 0; i--)
  50.             for(j = 118; j > 0; j--);
  51. }

  52. #define HC595_QA        0x80
  53. #define HC595_QB        0x20
  54. #define HC595_QC        0x04
  55. #define HC595_QD        0x01
  56. #define HC595_QE        0x10
  57. #define HC595_QF        0x40
  58. #define HC595_QG        0x02
  59. #define HC595_QH        0x08
  60. void sendbyte_All(u8 group1,u8 group2)      //利用HC595輸出
  61. {
  62.         u8 z;
  63.         for(z = 0; z < 8; z++)                 //循環(huán)8次移入數(shù)據(jù)
  64.         {
  65.                 H_shcp = 0;
  66.                 switch(z)
  67.                 {
  68.                         case 0:H_ds = group2 & HC595_QH;break;
  69.                         case 1:H_ds = group2 & HC595_QG;break;
  70.                         case 2:H_ds = group2 & HC595_QF;break;
  71.                         case 3:H_ds = group2 & HC595_QE;break;
  72.                         case 4:H_ds = group2 & HC595_QD;break;
  73.                         case 5:H_ds = group2 & HC595_QC;break;
  74.                         case 6:H_ds = group2 & HC595_QB;break;
  75.                         case 7:H_ds = group2 & HC595_QA;break;
  76.                 }
  77.                 H_shcp = 1;              //上升沿輸入數(shù)據(jù)
  78.         }
  79.         for(z = 0; z < 8; z++)                 //循環(huán)8次移入數(shù)據(jù)
  80.         {
  81.                 H_shcp = 0;
  82.                 switch(z)
  83.                 {
  84.                         case 0:H_ds = group1 & HC595_QH;break;
  85.                         case 1:H_ds = group1 & HC595_QG;break;
  86.                         case 2:H_ds = group1 & HC595_QF;break;
  87.                         case 3:H_ds = group1 & HC595_QE;break;
  88.                         case 4:H_ds = group1 & HC595_QD;break;
  89.                         case 5:H_ds = group1 & HC595_QC;break;
  90.                         case 6:H_ds = group1 & HC595_QB;break;
  91.                         case 7:H_ds = group1 & HC595_QA;break;
  92.                 }
  93.                 H_shcp = 1;              //上升沿輸入數(shù)據(jù)
  94.         }

  95.         H_stcp = 0;
  96.         H_stcp = 1;                //上升沿使數(shù)據(jù)并行輸出
  97. }
  98. void HC138Out(u8 i,u8 l)
  99. {
  100.         u8 j;
  101.         switch(i)
  102.         {
  103.                 case  7:j=5;break;
  104.                 case  6:j=2;break;
  105.                 case  5:j=1;break;
  106.                 case  4:j=7;break;
  107.                 case  3:j=0;break;
  108.                 case  2:j=6;break;
  109.                 case  1:j=4;break;
  110.                 case  0:j=3;break;
  111.         }
  112.         HC138_A0 = j&0x01;
  113.         HC138_A1 = j&0x02;
  114.         HC138_A2 = j&0x04;
  115.         if(l)
  116.                 HC138_A3=0;
  117.         else
  118.                 HC138_A3=1;
  119. }

  120. void WordDisplay(u8 *word)
  121. {
  122.         uchar i;
  123.         for(i = 0; i < 8; i++)  
  124.         {  
  125.                 sendbyte_All(0,0); //消影
  126.                 HC138Out(i,0);
  127.                 sendbyte_All(*(word+i),*(word+i+8)); //輸出信息
  128.         }
  129.         for(i = 0; i < 8; i++)  
  130.         {  
  131.                 sendbyte_All(0,0); //消影
  132.                 HC138Out(i,1);
  133.                 sendbyte_All(*(word+i+16),*(word+i+24)); //輸出信息
  134.         }
  135. }

  136. /*********************定時(shí)器0、定時(shí)器1初始化******************/
  137. void time0_init()         
  138. {
  139.         TMOD = 0x01;                    //設(shè)置定時(shí)器0為工作模式1 (16-bit)
  140.         TL0 = 15536;                    //給定時(shí)器低位賦初始值                65536-15536=50000us=50ms,即50ms一個(gè)中斷
  141.         TH0 = 15536 >> 8;               //給定時(shí)器高位賦初始值
  142.         TR0 = 1;                        //開(kāi)啟定時(shí)器0
  143.         ET0 = 1;                        //允許定時(shí)器0中斷
  144.         EA = 1;                         //開(kāi)啟全局中斷
  145. }

  146. //按鍵
  147. sbit Key1=P1^3;                                 //設(shè)置鍵
  148. sbit Key2=P1^4;                                 //加按鍵
  149. sbit Key3=P3^2;                                 //減按鍵
  150. sbit Key4=P3^3;                                 //交通管制鍵
  151. //========================================================================
  152. // 函數(shù): u8 Key_Scan()
  153. // 應(yīng)用: temp=u8 Key_Scan();
  154. // 描述: 按鍵掃描并返回按下的鍵值
  155. // 參數(shù): NONE
  156. // 返回: 按下的鍵值
  157. // 版本: VER1.0
  158. // 日期: 2015-05-29
  159. // 備注: 該函數(shù)帶松手檢測(cè),按下鍵返回一次鍵值后返回0,直至第二次按鍵按下
  160. //========================================================================
  161. u8 Key_Scan()
  162. {         
  163.         static u8 key_up=1;//按鍵按松開(kāi)標(biāo)志
  164.         if(key_up&&(Key1==0||Key2==0||Key3==0||Key4==0))
  165.         {
  166.                 delay_ms(10);//去抖動(dòng)
  167.                 key_up=0;
  168.                 if(Key1==0)                        return 1;
  169.                 else if(Key2==0)return 2;
  170.                 else if(Key3==0)return 3;
  171.                 else if(Key4==0)return 4;
  172.         }
  173.         else if(Key1==1&&Key2==1&&Key3==1&&Key4==1)
  174.                 key_up=1;            
  175.          return 0;// 無(wú)按鍵按下
  176. }

  177. void main()
  178. {
  179.         uchar key_can;         //按鍵值
  180.         uchar mode=0;         //模式
  181.         uchar modej=0;         //模式
  182.         uchar i;
  183.         time0_init();
  184.         while(1)
  185.         {
  186.                 key_can=Key_Scan();
  187.                 if(1==key_can)
  188.                 {
  189.                         TR0 = 1;              //開(kāi)啟定時(shí)器0
  190.                         if(modej)                                                        //判斷暫停標(biāo)志,此處處理是為了防止暫停再啟動(dòng)方向會(huì)變
  191.                         {
  192.                                 modej=0;                                
  193.                                 mode++;
  194.                                 if(mode>=2)
  195.                                 {
  196.                                         mode=0;
  197.                                 }
  198.                         }
  199.                         mode++;
  200.                         if(mode>=2)
  201.                         {
  202.                                 mode=0;
  203.                         }
  204.                 }
  205.                 if(2==key_can)
  206.                 {
  207.                         TR0 = 0;              //關(guān)閉定時(shí)器0,暫停
  208.                         modej=1;                                                        //暫停標(biāo)志
  209.                 }
  210.                 if(4==key_can)
  211.                 {
  212.                         speed+=1;                                                        //速度加1
  213.                 }
  214.                 if(3==key_can)
  215.                 {
  216.                         speed-=1;                                                        //速度減1
  217.                         if(speed==0)
  218.                                 speed=1;
  219.                 }
  220.                 if(1==mode)//往右移
  221.                 {
  222.                         for(i = 0; i < 16-W_LCNT; i++)  
  223.                         {
  224.                                 WordTemp[i]=Word[W_BCNT][i+W_LCNT];
  225.                         };
  226.                         for(i = 0; i <W_LCNT ; i++)  
  227.                         {
  228.                                 WordTemp[i+16-W_LCNT]=Word[W_BCNT+1][i];
  229.                         };
  230.                         for(i = 16; i < 32-W_LCNT; i++)  
  231.                         {
  232.                                 WordTemp[i]=Word[W_BCNT][i+W_LCNT];
  233.                         };
  234.                         for(i = 16; i <16+W_LCNT ; i++)  
  235.                         {
  236.                                 WordTemp[i+16-W_LCNT]=Word[W_BCNT+1][i];
  237.                         };
  238.                 }
  239.                         
  240.                 if(0==mode)//往左移
  241.                 {
  242.                         for(i = 0; i < 16-W_LCNT; i++)  
  243.                         {
  244.                                 WordTemp[i+W_LCNT]=Word[W_BCNT][i];
  245.                         };
  246.                         for(i = 0; i < W_LCNT ; i++)  
  247.                         {
  248.                                 WordTemp[i]=Word[W_BCNT+1][16-W_LCNT+i];
  249.                         };
  250.                         for(i = 16; i < 32-W_LCNT; i++)  
  251.                         {
  252.                                 WordTemp[i+W_LCNT]=Word[W_BCNT][i];
  253.                         };
  254.                         for(i = 16; i <16+W_LCNT ; i++)  
  255.                         {
  256.                                 WordTemp[i]=Word[W_BCNT+1][16-W_LCNT+i];
  257.                         };
  258.                 }
  259.                 WordDisplay(WordTemp);
  260.         }
  261. }

  262. /*********************定時(shí)器0中斷服務(wù)程序************************/
  263. void time0_int() interrupt 1  
  264. {                                                   
  265.         static uchar volatile value;                         //定時(shí)10ms中斷一次
  266.         TL0 = 15536;                    //給定時(shí)器低位重裝初始值                65536-15536=50000us=50ms,即50ms一個(gè)中斷
  267.         TH0 = 15536 >> 8;               //給定時(shí)器高位重裝初始值
  268.         value ++;
  269.         if(value >= speed)
  270.         {
  271.                 value = 0;
  272.                 W_LCNT++;
  273.                 if(W_LCNT >= 16)
  274.                 {
  275.                         W_LCNT=0;
  276.                         W_BCNT++;
  277.                         if(W_BCNT >= (WORDNUM-1))
  278.                         {
  279.                                 W_BCNT=0;
  280.                         }
  281.                 }
  282.                
  283.         }
  284. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:262 發(fā)表于 2022-11-21 15:18 | 只看該作者
電路是如何連接的?樓主能介紹一下嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av天空| 久久精彩 | 免费视频一区二区 | 成人福利视频网站 | 性欧美hd| 日韩久久久久久 | 久久91 | 美女视频. | 欧美xxxx网站 | 日韩三级在线 | 日韩欧美在线观看 | 亚洲va中文字幕 | 国产精品成人一区二区三区 | 国产性网 | 一级黄在线观看 | 日韩在线看片 | 亚洲三区在线观看 | 国产99久久精品一区二区300 | 毛片免费观看 | 国产亚洲人成a在线v网站 | 精品综合久久久 | 亚洲美女在线视频 | 欧美大片黄| 欧美一区二区三区久久精品 | 成人av一区二区三区 | 国产午夜精品一区二区三区四区 | 欧美一区二区三区视频 | 天天干天天草 | 黑人中文字幕一区二区三区 | 91精品国产自产精品男人的天堂 | 你懂的av| 黑人巨大精品欧美一区二区免费 | 日韩欧美一区二区三区免费观看 | 中文字幕一区二区三 | 超碰欧美 | av黄色在线 | 精品乱码一区二区三四区 | 精品日韩一区二区 | 狠狠操电影 | 亚洲一区免费 | 久综合 |