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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于 tm1629 的控制

[復制鏈接]
跳轉到指定樓層
樓主
ID:167113 發表于 2017-3-3 13:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. ****************************************************************************************************/  #include < REG52.h>  
  2. #include<stdio.h>  #include<intrins.h>//**************************************************************************************************  #define  tm1616  1
  3. #define tm1618  2
  4. #define tm1618a  3
  5. #define  tm1620  4
  6. #define  tm1620b 5
  7. #define  tm1623  6
  8. #define  tm1624   7
  9. #define  tm1626a  8
  10. #define  tm1626b 9
  11. #define  tm1626c  10
  12. #define  tm1626d  11
  13. #define  tm1628    12
  14. #define  tm1629    13
  15. #define  tm1629a   14
  16. #define  tm1629b  15
  17. #define  tm1629c   16
  18. #define  tm1629d   17
  19. #define  tm1638   18
  20. #define  tm1668   19
  21. #define tw1628    20  
  22. #define icmodel  tm1616  //這里選擇的TM1616,更改“tm1616”可以得到其他型號IC的驅動程序
  23. #if icmodel== tm1616



  24. #define seg  7
  25. #define grid  4  
  26. #define  dismodel 1
  27. #elif icmodel== tm1618      
  28. #define seg 5  
  29. #define grid 7
  30. #define key 3  
  31. #define dismodel 4
  32. #elif icmodel== tm1618a   
  33. #define seg 7   
  34. #define grid 5   
  35. #define key 4   
  36. #define dismodel 2   
  37. #elif icmodel== tm1620      
  38. #define seg 8      
  39. #define grid 6   
  40. #define dismodel 3  
  41. #elif icmodel== tm1620b      
  42. #define seg6         
  43. #define grid7  
  44. #define key3
  45. #define dismodel 4
  46. #elif icmodel== tm1623         
  47. #define seg 11            
  48. #define grid 7   
  49. #define key 4   
  50. #define dismodel 4   
  51. #elif icmodel== tm1624      
  52. #define seg 11            
  53. #define grid 7  
  54. #define dismodel 4
  55. #elif icmodel== tm1626a               
  56. #define seg 10               
  57. #define grid 7   
  58. #define key 5   
  59. #define sw 2   
  60. #define led 6   
  61. #define dismodel 4   
  62. #elif icmodel== tm1626b                  
  63. #define seg 11                  
  64. #define grid 7      
  65. #define key 5      
  66. #define sw 4      
  67. #define led 6   
  68. #define dismodel 4  
  69. #elif icmodel== tm1626c                     
  70. #define seg 11                     
  71. #define grid 7         
  72. #define key 5        
  73. #define led 1  
  74. #define dismodel 4
  75. #elif icmodel== tm1626d                  
  76. #define seg 10                  
  77. #define grid 7      
  78. #define key 5     
  79. #define led 1   
  80. #define dismodel 4  
  81. #elif icmodel== tm1628                  
  82. #define seg 10                  
  83. #define grid 7   
  84. #define key 4  
  85. #define dismodel 4  
  86. #elif icmodel== tm1629


  87. #define seg 16                  
  88. #definegrid 8   
  89. #definekey 4  
  90. #definedismodel 1  
  91. #elif icmodel== tm1629a                  
  92. #defineseg 16                  
  93. #definegrid 8   
  94. #definedismodel 1  
  95. #elif icmodel== tm1629b                  
  96. #defineseg 14                  
  97. #definegrid 8  
  98. #definekey 4

  99. #definedismodel 1  
  100. #elif icmodel== tm1629c                  
  101. #defineseg 15                  
  102. #definegrid 8   
  103. #definekey 4  
  104. #definedismodel 1  
  105. #elif icmodel== tm1629d                  
  106. #defineseg 12                  
  107. #definegrid 8   

  108. #definekey 4  
  109. #definedismodel 1  
  110. #elif icmodel== tm1638                  
  111. #defineseg 10                  
  112. #definegrid 8   
  113. #definekey  4  
  114. #definedismodel 1  
  115. #elif icmodel== tm1668                  
  116. #define seg  10

  117. #definegrid 7   
  118. #definekey 5  
  119. #definedismodel 1  
  120. #elif icmodel== tw1628                  
  121. #defineseg 10                  
  122. #definegrid 7   
  123. #definekey 5  
  124. #define dismodel 1      
  125. #else   
  126. #error  "你必須確認IC的型號是否存在?"  
  127. #endif
  128. #define dissetmode 0x03  / /顯示模式設置
  129. #define writedatamode_z 0x40  //采用地址自動加一方式寫顯存
  130. #define writeledmode_z 0x41  //采用地址自動加一方式寫LED顯存命令
  131. #define readkeymode 0x42  //讀按鍵命令
  132. #define readswmode     0x43  //讀SW口命令
  133. #define  writedatamode_g 0x44  //采用固定地址方式寫顯存
  134. #define writeledmode_g 0x45  //采用固定地址方式寫LED顯存命令
  135. #define startaddress 0xc0  //起始地址
  136. #define disconmode 0x8c  //顯示控制
  137. #define datacount 2*grid   //采用地址自動加一方式傳輸數據的個數   
  138. //定義全局變量
  139. unsigned char  k1, k2, k3, k4, k5;   //按鍵值寄存器
  140. unsigned  da_sw;   //SW寄存器
  141. unsigned int  count;   
  142. //端口的定義
  143. sbit STB= P2^0;
  144. sbitCLK= P2^1;
  145. sbitDIO= P2^2; / /串行通訊口
  146. sbit SPEAK = P2^7;   //外接蜂鳴器,可以不必理會  
  147. //*********************************************子程序開始************************************




  148. //----------------------------------------------延時程序開始---------------------------------
  149. void delay(int k)
  150.   { unsigned char i,j;  
  151.     for(;k>0;k--)   
  152.     for(j=255;j>0;j--)  
  153.     for(i=255;i>0;i--);
  154.    }  
  155. / /----------------------------------------------延時程序結束----------------------------------  //----------------------------------------------寫入輸入1個字節(8bit)到LED_IC程序開始---------  
  156. //輸入8BIT數據  
  157. //在時鐘的上升沿通過MCU向LED驅動IC——TM16xx寫數據
  158. void indate(unsigned char p)
  159.   {  unsigned int i;
  160.      STB=0;   //保證“STB”為低電平,程序不依賴于之前端口的狀態  
  161.              //保證程序在實際運行中不會出現“端口迷失”
  162.     for(i=0;i<8;i++)
  163.     { CLK=0; //先將“CLK”清零
  164.       if((p& 0x01)!=0)   
  165.         { DIO=1; //需要傳送的數據的低位為“1”,則把“DIO”清零
  166.      }else
  167.          {
  168.            DIO=0;  //需要傳送的數據的低位為“0”,則把“DIO”置高
  169.           }
  170.      CLK=1;  //送時鐘的上升沿
  171.      p=p>>1; //準備送下一個BIT } //送完一個字節后退出循環
  172.           }  
  173. / /----------------------------------------------寫入輸入1個字節(8bit)到LED_IC程序結束---------  //----------------------------------------------從LED_IC讀入1個字節(8bit)程序開始-------------  
  174. //輸出8BIT數據  
  175. //在時鐘的上升沿通過MCU從LED驅動IC——TM16xx讀數據
  176. # ifdef key
  177. unsigned char outdate()
  178. { unsigned char i,k=0;   //i——控制循環次數,k——臨時保存讀到的數據
  179.       DIO=1;  //釋放DIO為輸入
  180.       STB=0;    //保證“STB”為低電平,程序不依賴于之前端口的狀態  //保證程序在實際運行中不會出現“端口迷失”
  181.       for(i=0;i<8;i++)
  182.       { CLK=0; //先將“CLK”清零
  183.         k=k>>1;
  184.         if(( P2 & 0x04)==0)
  185.                {  
  186.                  k=k& 0x7f; //如果“DIO”為低電平,則把k的最高位清“0”,其他各位保持不變
  187.                 }
  188.         else
  189.                 {
  190.                    k=(k| 0x80& 0xff);  //如果“DIO”為高電平,則把k的最高位置“1”,其他各位保持不變
  191.                  }
  192.         CLK=1;  //送時鐘的上升沿
  193.       }  //送完一個字節后退出循環
  194.      return(k); //返回讀到的1字節數據
  195. }   
  196. #endif
  197. / /----------------------------------------------從LED_IC讀入1個字節(8bit)程序結束-----------  //----------------------------------------------采用地址自動加一方式傳輸地址和數據開始------
  198. //采用地址自動加1方式






  199. //上電后LED-DRIVER顯存中的數據是隨機的,上電后馬上傳顯示控制命令字(打開顯示),會出現亂碼。
  200. //為避免上述現象,用戶可以先傳顯示控制命令將顯示關掉(見應用手冊中詳細介紹),然后正常操作  
  201. //也可以先主動刷新LED-DRIVER顯存中的數據。然后開顯示  
  202. //這里采用是第二種方法
  203. void display(unsigned char disa)
  204. {
  205.    unsigned int i; //i——控制本次需要傳多少個字節顯示數據
  206.    DIO=1;CLK=1;
  207.    STB=1; //通訊開始前通訊端口全部初始化為“1”
  208.    indate( writedatamode_z);  //傳數據設置命令,設置采用地址自動加1方式寫顯示數據,
  209.    STB=1; //數據設置命令傳完后需要將“STB”置“1”
  210.    indate(startaddress);  //傳起始地址  
  211.                          //地址命令傳完后,“STB”保持為“0”繼續傳需要顯示的數據
  212.    for(i=0;i<datacount;i++)
  213.        {
  214.          indate(disa);  //在連續傳顯示的數據過程中,“STB”一直保持為”0“
  215.         }
  216.        STB=1; //傳完所有的顯示數據后(最多14BYTE)后,將“STB置“1”
  217.          indate(disconmode);  //傳顯示控制命令
  218.        STB=1;    //顯示控制命令傳完后將“STB”置“1”
  219. }  
  220. / /----------------------------------------------采用地址自動加一方式傳輸地址和數據結束-------  //----------------------------------------------采用固定地址方式傳輸地址和數據開始-----------  
  221. //采用固定地址方式
  222. void  display2(unsigned char adress,disa)
  223. {
  224.    DIO=1;
  225.    CLK=1;
  226.    STB=1;  //通訊開始前通訊端口全部初始化為“1”
  227.    indate( writedatamode_g); //數據設置命令
  228.    STB=1;
  229.    indate(adress); //傳顯示數據對應的地址
  230.    indate(disa); //保持“STB”=“0”,傳1BYTE顯示數據
  231.    STB=1; //傳完顯示數據后將“STB”置“1”
  232. }  
  233. / /----------------------------------------------采用固定地址方式傳輸地址和數據結束-------------  //----------------------------------------------按鍵掃描程序開始------------------------------  
  234. //按鍵掃描  //只要定義了key都將執行按鍵掃描程序,且必須從低字節開始讀
  235. # ifdef key
  236. unsigned char keyscan()
  237. {
  238.   STB=1;
  239.   indate(readkeymode);    //傳數據設置命令,設置為讀按鍵  
  240.                          //“STB”保持為“0”,讀鍵值  
  241.                         //將讀到的鍵值保存在MCU的寄存器中      
  242.                        //根據IC型號讀指定字節,不允許多讀,否則會造成讀按鍵不穩定
  243.   if(key >=1)  
  244.   k1=outdate();
  245.   if(key >=2)  
  246.   k2=outdate();
  247.   if(key >=3)  
  248.   k3=outdate();
  249.   if(key >=4)  
  250.   k4=outdate();
  251.   if(key >=5)  
  252.   k5=outdate();
  253.   STB=1;
  254.   return 0;     //讀鍵結束將“STB”置“1”  
  255. }   
  256. #endif




  257. //----------------------------------------------按鍵掃描程序結束----------------------------------




  258. //----------------------------------------------PWM數據傳輸開始-----------------------------------
  259. # ifdef led
  260. unsigned char  in_led()
  261. {
  262.   STB=1;
  263.   indate( writeledmode_z);   //數據設置命令,設置為寫LED顯存
  264.   STB=1;
  265.   indate( 0xc0); //起始地址,這里的地址和
  266.   indate( 0x0f); //LED1寬度設置
  267.   indate( 0x0f); //LED2寬度設置
  268.   indate( 0x0f); //LED3寬度設置
  269.   indate( 0x00); //關閉LED123同步調節
  270.   indate( 0x0f); //LED4寬度設置
  271.   indate( 0x0f);    //LED5寬度設置
  272.   indate( 0x0f);    //LED6寬度設置
  273.   indate( 0x00); //關閉LED456同步調節
  274.   STB=1;
  275.   return 0;
  276.   }   
  277. #endif  //----------------------------------------------PWM數據傳輸結束-------------------------------------
  278. # ifdef led
  279. unsigned char  in_led_g(unsigned char  adress_led, da_led)
  280. {
  281.      STB=1;
  282.      indate( writeledmode_g);
  283.      STB=1;indate( adress_led);
  284.      indate( da_led);
  285.      STB=1;
  286.      return 0;
  287. }   #endif  
  288. //----------------------------------------------讀入SW口狀態開始------------------------------------
  289. # ifdef sw
  290. unsigned char  out_sw()
  291.   {
  292.      STB=1;
  293.      indate(readswmode);   //數據設置命令,設置為讀SW輸入口
  294.      d a_sw=outdate();
  295.      STB=1;
  296.      return 0;
  297.    }   
  298. #endif / /----------------------------------------------讀入SW口狀態結束-----------------------------------  //*********************************************子程序結束******************************************  //*********************************************主程序開始******************************************
  299. void main(void)
  300. {   
  301.     SPEAK=0;
  302.     DIO=1;
  303.     CLK=1;
  304.     STB=1;
  305.     indate(dissetmode); / /傳顯示模式設置命令,設置為7個“GRID”方式  
  306.          //這里不在詳細給出多個顯示模式的設置程序請參考產品應用手冊,顯示模式在上電設置好后不允許更改
  307.     STB=1;   
  308.     display( 0xff);   //全亮
  309.     delay(10);
  310.     display2( 0xC0, 0x00);  //采用固定地址方式向C0地址單元寫00
  311.     delay(10);
  312.     #ifdef key






  313.      keyscan();  //調用按鍵掃描程序  
  314.   #endif  //本程序僅僅提供按鍵掃描,2次按鍵掃描的時間不得<10MS,在這里不提供按鍵處理程序  
  315.   #ifdef led  
  316.   in_led();   //6路PWM輸出口輸出"1"
  317.   delay(10);
  318.   in_led_g( 0xc0, 0x00);  //讓LED1輸出"0"
  319.   #endif      
  320.   #ifdef sw out_sw();    //調用讀SW輸入口程序  
  321.   #endif   //這里不提供SW口處理程序
  322.   _nop_();
  323. }   
  324. //*********************************************主程序結束*******************************************

復制代碼


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

使用道具 舉報

沙發
ID:167113 發表于 2017-3-3 17:52 | 只看該作者
請各位大神指導,想做個時鐘
回復

使用道具 舉報

板凳
ID:245466 發表于 2019-1-14 11:20 | 只看該作者
這個代碼太好了,借了我燃眉之急!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成年黄网站色视频 | 五月激情婷婷在线 | 久久国产精品网站 | 久久精品在线播放 | 国产免费一区二区 | 久草视频观看 | 日韩在线一区二区三区 | 精品久久久久久亚洲精品 | 99久久电影 | 一区二区免费在线观看 | 精品视频在线免费观看 | 欧美日韩国产欧美 | 一本久久a久久精品亚洲 | 美国黄色毛片 | 亚洲一区二区视频 | 欧美精品久久 | 久色一区 | 亚洲黄色高清视频 | 91色网站| 国产精品久久国产精品 | 天天艹| h免费观看 | 国产一级视频 | 精品欧美乱码久久久久久1区2区 | 欧美成人第一页 | 一区二区三区在线 | 久久精品黄色 | 黄色日本片 | 国产日韩欧美一区二区在线播放 | 欧美电影一区 | 久久久久久久97 | www.久久久久久久久 | 国产传媒毛片精品视频第一次 | 极品在线 | 中文字幕一区二区三区在线观看 | 国产 日韩 欧美 制服 另类 | 玖玖视频免费 | av超碰| 久久久久无码国产精品一区 | 国产在线观看一区二区三区 | 亚洲一区二区av |