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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc8G1K單片機驅動TM1620彩色數碼模塊程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:369412 發表于 2023-10-20 16:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. /* TM1620顯示控制芯片
  2. * File:      TM1620.c
  3. * Author:  
  4. * Date:      
  5. *
  6. * 顯示屏內容:
  7. * 2.5位數字1,2,3位+0小數點+8個ICON
  8. *
  9. * 彩膜測試演示
  10. */

  11. #include <reg51.h>
  12. #include <intrins.h>

  13. /***************************
  14. *
  15. *
  16. *

  17. ****************************/

  18. #define u8 unsigned char                                             
  19. #define u16 unsigned int

  20. sbit STB=P1^4;
  21. sbit CLK=P1^3;
  22. sbit DIO=P1^2;

  23. sfr P1M0 = 0x92;        //
  24. sfr P1M1 = 0x91;        //
  25. sfr P3M0 = 0xB2;        //
  26. sfr P3M1 = 0xB1;        //

  27. sbit LED=P2^7;
  28. sbit KEY=P3^2;                //TP_FLAG 重合聲明
  29. sbit KEYU=P3^0;                // 亮度++
  30. sbit KEYD=P3^1;                // 亮度--
  31.                   /*0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11, */  
  32. u8 code  NUM[] = { 0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00,0xff, };
  33. /*
  34. u8 code  dat[] = { 0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6, };
  35. u8 code  NUM[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0xff, };  
  36. u8 code ICON[] = { 0x80,0x80,0x80,0xff,0x3f, };
  37. u8 Key_value;
  38. */
  39. u8 DDRAM[12] ;
  40. u8 CRT;        // 當前亮度參數值
  41. void get_key(void);        // 按鍵更改亮度
  42. void delayus(u8 t)
  43. {
  44.         while(t--);
  45. }
  46. //=============1MS======================//   
  47. void delayms(u16 temp)   
  48. {   
  49.     unsigned int i,j;   
  50.     for(j=temp;j>0;j--)   
  51.     {
  52.             for(i=0;i<1000;i++)  ;
  53.         }
  54.         LED=~LED;            
  55.         get_key();
  56. }   

  57. void send_data(u8 dat)  
  58. {                                                                        
  59.     u8 i;
  60.     for(i=0;i<8;i++)                                                     
  61.     {                                                                    
  62.         CLK=0;
  63.         DIO = dat & 1;
  64.                 delayus(20);
  65.         CLK=1;     
  66.         dat=dat>>1;  
  67.                 delayus(20);
  68.     }
  69.    
  70. }
  71. /*
  72. void write_cmd(u8 cmd)
  73. {
  74.         STB = 0;
  75.         send_data(cmd);
  76.         STB = 1;
  77. }
  78. void write_dat(u8 addr,u8 dat)
  79. {
  80.         STB = 0;
  81.         send_data(addr);        // C0H~CBH
  82.         send_data(dat);                //
  83.         STB = 1;
  84. }

  85. */
  86. void updata_TM1620(void)
  87. {
  88.         u8 i;
  89.         STB = 0;
  90.     send_data(0x02);// 寫入命令0x02:顯示模式6位8段
  91.     STB = 1;
  92.         STB = 0;
  93.     send_data(0x40);// 寫入命令0x40:數據命令 固定地址0x44,地址自動增加0x41/42/43
  94.     STB = 1;
  95.         STB = 0;
  96.         send_data(0xc0);// 寫入命令0xc0:顯示地址
  97.         for(i=0;i<12;i++)
  98.         {
  99.                 send_data(DDRAM[i]);
  100.         }
  101.         STB=1;
  102.         delayus(20);
  103.         STB = 0;
  104.     send_data(CRT);// 寫入命令0x8c:顯示控制
  105.         STB = 1;
  106. }

  107. void init_TM1620(void)
  108. {
  109.         u8 i;
  110.         delayus(100);
  111.         for(i=0;i<12;i++)
  112.         {
  113.                 DDRAM[i] = 0;
  114.         }
  115.         updata_TM1620();
  116. }


  117. void dis_num(u8 addr,u8 num)        // addr = 1,2,3,4,5,6
  118. {
  119.        
  120.         DDRAM[addr *2 -2] = NUM[num] ;
  121.         updata_TM1620();
  122. }

  123. void dis_icon(u8 addr,u8 icon)        // addr = 3,4,5,6
  124. {                                                                                        // icon = 1,2
  125.         addr = addr *2 -2 ;
  126.         if (icon==1)
  127.                 DDRAM[addr] = 0x1c ;        //左右單獨顯示
  128.         else if (icon==2)
  129.                 DDRAM[addr] = 0xe0 ;        //左右單獨顯示
  130.         else if (icon==3)       
  131.                 DDRAM[addr] = 0xfc ;        // 全顯
  132.         else if(icon==4)
  133.                 DDRAM[addr] = 0x18 ;        // %
  134.         updata_TM1620();
  135.         delayms(500);
  136. }

  137. void dis_clr(u8 dat)
  138. {
  139.         u8 i;
  140.         for(i=0;i<12;i++)
  141.         {
  142.                 DDRAM[i] = dat;
  143.         }
  144.         updata_TM1620();
  145. }
  146. void get_key(void)
  147. {
  148.         u8 i,t;
  149.         t=CRT; // 保存原始值
  150.         if(KEYU==0)
  151.         {
  152.                 for(i=0;i<50;i++);        // 延時去抖
  153.                 if(KEYU==0)
  154.                 {
  155.                         while(!KEYU);
  156.                         if(CRT<0x90)
  157.                                 CRT++;
  158.                 }
  159.                 for(i=0;i<50;i++);        // 延時去抖
  160.         }
  161.         if(KEYD==0)
  162.         {
  163.                 for(i=0;i<50;i++);        // 延時去抖
  164.                 if(KEYD==0)
  165.                 {
  166.                         while(!KEYD);
  167.                         if(CRT>0x80)
  168.                                 CRT--;
  169.                 }
  170.                 for(i=0;i<50;i++);        // 延時去抖
  171.         }
  172.         if(t!=CRT)        // CRT值有改動則保存
  173.         {
  174.                 iap_erase(0);
  175.                 write_eeprom(0,CRT);
  176.         }
  177. }

  178. void int0_isr() interrupt 0
  179. {
  180.         u8 i;
  181.         EX0 = 0;
  182.         for(i=0;i<150;i++);        // 延時去抖
  183.         if(!KEY)        //有效按下
  184.         {
  185.                 KEY = 1 ;
  186.                 for(i=0;i<150;i++);
  187.                 while(!KEY);        //等待放手
  188.                
  189.                 while(KEY);        //二次按鍵
  190.                
  191.                 while(!KEY);        //等待放手
  192.         }
  193.         EX0 = 1 ;
  194. }

  195. // **********************
  196. // **** MAIN()***********
  197. // **********************
  198. void main(void)                                                              
  199. {   
  200.         u8 i;
  201.         u8 I[] = {2,5,8};
  202.         delayms(200);
  203.         P1M1 = 0x00;        //P1口推挽輸出
  204.         P1M0 = 0xff;
  205.         P3M1 = 0x00;        //P3口雙向
  206.         P3M0 = 0x00;
  207.        
  208.         //CRT = read_eeprom(0);        // 讀亮度值
  209.         ////if(CRT>0x8f || CRT< 0x80)        // 亮度值限制在80H~8FH之間
  210.         //{
  211.         //        CRT = 0x8c;
  212.         //}
  213.         EA = 1;        //開總中斷
  214.         EX0 = 1;//開外中斷0
  215.        
  216.         init_TM1620();        //
  217.                
  218.         dis_clr(0);
  219.         i = 0;
  220.         while(1)   
  221.         {
  222.                 init_TM1620();        //
  223.        
  224.                 dis_clr(0);       
  225.                 delayms(100);
  226.                
  227.                 dis_clr(0xff);                       
  228.                 delayms(1000);
  229.                
  230.                 dis_clr(0);
  231.                 delayms(100);
  232.                
  233.                 dis_num(1,I[i]);        // 位1 顯示5
  234.                 dis_num(2,I[i]);        // 位2 顯示5
  235.                
  236.                 dis_icon(3,2);        // 位3 顯示min
  237.                 dis_icon(3,4);        // 位3 顯示%
  238.                
  239.                 dis_icon(4,1);        // 位4 顯示右
  240.                 dis_icon(4,2);        // 位5 顯示左
  241.                 dis_icon(4,3);        // 位5 全顯
  242.                
  243.                 dis_icon(5,1);        // 位5 顯示右
  244.                 dis_icon(5,2);        // 位5 顯示左
  245.                 dis_icon(5,3);        // 位5 全顯
  246.                
  247.                 dis_icon(6,1);        // 位6 顯示右
  248.                 dis_icon(6,2);        // 位6 顯示左
  249.                 dis_icon(6,3);        // 位6 他顯
  250.                
  251.                 delayms(500);
  252.                 i++;
  253.                 if(i==3)
  254.                         i=0;
  255.                
  256.         }  
  257. }   


復制代碼


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:50577 發表于 2023-10-22 00:31 | 只看該作者
有沒有51modbus rtu的通信
回復

使用道具 舉報

板凳
ID:50577 發表于 2023-10-22 00:32 | 只看該作者
有沒有51單片機modbus rtu的通信程序
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区四区五区 | 人人亚洲 | 成人伊人 | 久久国产一区 | 九色porny自拍视频 | 亚洲精品久久久蜜桃网站 | 久久新 | 国产亚洲一区二区三区在线观看 | 亚洲精品一区二区在线观看 | 亚洲一区二区高清 | 久久久久久久一区二区 | 久久国| 一区二区在线免费播放 | 国产欧美日韩久久久 | 成年人网站免费 | 久久久久久久久久久久久9999 | 日本精品久久久一区二区三区 | 成人在线精品视频 | 欧美性一区二区三区 | 99国产精品99久久久久久粉嫩 | 亚洲精品久久久久久久不卡四虎 | 无吗视频 | 久久国产精品无码网站 | 亚洲国产成人av好男人在线观看 | 91在线电影 | 一区二区国产精品 | 中文字幕乱码一区二区三区 | av中文字幕在线观看 | 欧美高清视频在线观看 | 玖操| 成人欧美一区二区三区在线播放 | 亚洲网视频| 国产精品中文字幕在线 | 人人澡人人射 | 国产精品久久久久久久久 | 超级黄色一级片 | 亚洲成人在线免费 | 亚洲欧美国产视频 | 日本超碰| 免费的av | 中文字幕 亚洲一区 |