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

標(biāo)題: 單片機四位數(shù)碼模塊時鐘驅(qū)動程序 [打印本頁]

作者: bulia    時間: 2018-8-21 16:25
標(biāo)題: 單片機四位數(shù)碼模塊時鐘驅(qū)動程序
制作出來的實物圖如下:


單片機源程序如下:
  1. 之前的程序是倒計時的,現(xiàn)在改成了向前走時了,經(jīng)過反復(fù)的比對時間,時鐘準(zhǔn)確了!!/*************************************************************
  2. ****     Time: 2018.08.21
  3. ********************************/
  4. #include <reg52.h>
  5. #include<intrins.h>
  6. sbit CLK = P2^0;  //時鐘信號
  7. sbit DIO = P2^1;  //數(shù)據(jù)/地址數(shù)據(jù)                                                                                                                                                                 
  8. unsigned char code SEGData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極數(shù)碼管1-9
  9. unsigned char code SEGDataDp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //有小數(shù)點只用于地址0xc1
  10. unsigned char dpFlag = 0; //控制第二個數(shù)碼管的dp的顯示
  11. void TM1637_start( void );
  12. void TM1637_stop( void );
  13. void TM1637_write1Bit(unsigned char mBit);
  14. void TM1637_write1Byte(unsigned char mByte);
  15. void TM1637_writeCammand(unsigned char mData);
  16. void TM1637_writeData(unsigned char addr, unsigned char mData);
  17. void time_set(char hour, char min);
  18. void time_judge( void );
  19. void time_display( void );
  20. void timer0_init( void );
  21. void delay_140us( void );
  22. unsigned int countTime = 0;
  23. unsigned char time, sec;
  24. struct {
  25.         char shi;
  26.         char ge;
  27. }Hour;

  28. struct {
  29.         char shi;
  30.         char ge;
  31. }Min;



  32. /***********************************************************
  33. *****
  34. ***** 主函數(shù)
  35. *****
  36. ***********************************************************/
  37. void main( void )
  38. {
  39.         timer0_init();
  40.         time_set(23, 59);  //設(shè)置5小時倒計時
  41.         while(1)
  42.         {
  43.                 time_display();         //顯示時間
  44.                 if(countTime <= 10)
  45.                 {
  46.                         dpFlag = 0;                       
  47.                 }
  48.                 else
  49.                 if(countTime <= 20)
  50.                 {
  51.                         dpFlag = 1;      
  52.                 }
  53.                 else
  54.                 {
  55.                         countTime = 0;
  56.                         time_judge();
  57.                 }
  58.         }
  59. }

  60. /********************************************************************
  61. * 名稱 : void time_set(char hour, char min)
  62. * 功能 : 設(shè)置時間
  63. * 輸入 : char hour, char min
  64. * 輸出 : 無
  65. **************************************************************/
  66. void time_set(char hour, char min)
  67. {
  68.         if((hour < 0) || (min<0))
  69.         {
  70.                 hour = 0;
  71.                 min = 0;
  72.         }
  73.         Hour.shi = hour/10;
  74.         Hour.ge = hour%10;
  75.         Min.shi = min/10;
  76.         Min.ge = min%10;               
  77. }

  78. /*************************************************************
  79. * 名稱 : time_judge( void )
  80. * 功能 : 判斷時間變化
  81. * 輸入 : void
  82. * 輸出 : 無
  83. **************************************************************/
  84. void time_judge( void )
  85. {      

  86.                  sec++;
  87.                 if(sec>=60)
  88.        {
  89.         sec=0;
  90.         Min.ge ++;
  91.         }
  92.                 if(Min.ge>=10)
  93.        {               
  94.          Min.ge=0;
  95.          Min.shi++;
  96.                 }
  97.                    if(Min.shi>=6)
  98.        {               
  99.          Min.ge=0;
  100.                  Min.shi=0;
  101.          Hour.ge++;
  102.                 }
  103.                 if(Hour.ge>=10)
  104.        {               
  105.          Hour.ge=0;
  106.          Hour.shi++;
  107.                 }
  108.                 if((Hour.shi>=2) &&(Hour.ge>=4) )
  109.        {
  110.              sec=0;
  111.                  Min.ge        =0;
  112.              Min.shi=0;
  113.              Hour.ge=0;               
  114.          Hour.shi=0;                  
  115.                 }

  116. }

  117. /********************************************************************
  118. * 名稱 : void time_display( void )
  119. * 功能 : 顯示時間
  120. * 輸入 : void
  121. * 輸出 : 無
  122. **************************************************************/
  123. void time_display( void )
  124. {
  125.         TM1637_writeCammand(0x44);
  126.         TM1637_writeData(0xc0, SEGData[Hour.shi]);
  127.         if(dpFlag)
  128.                 TM1637_writeData(0xc1, SEGDataDp[Hour.ge]); //小數(shù)點標(biāo)志為1則用小數(shù)點那個數(shù)組
  129.         else
  130.                 TM1637_writeData(0xc1, SEGData[Hour.ge]);
  131.         TM1637_writeData(0xc2, SEGData[Min.shi]);
  132.         TM1637_writeData(0xc3, SEGData[Min.ge]);
  133.         TM1637_writeCammand(0x8a);                              
  134. }

  135. /********************************************************************
  136. * 名稱 : void TM1637_start( void )
  137. * 功能 : start信號
  138. * 輸入 : void
  139. * 輸出 : 無
  140. **************************************************************/
  141. void TM1637_start( void )
  142. {
  143.         CLK = 1;
  144.         DIO = 1;
  145.         delay_140us();
  146.         DIO = 0;
  147.         delay_140us();
  148.         CLK = 0;
  149.         delay_140us();
  150. }

  151. /********************************************************************
  152. * 名稱 : void TM1637_stop( void )
  153. * 功能 : stop信號
  154. * 輸入 : void
  155. * 輸出 : 無
  156. **************************************************************/
  157. void TM1637_stop( void )
  158. {
  159.         CLK = 0;
  160.         delay_140us();
  161.         DIO = 0;
  162.         delay_140us();
  163.         CLK = 1;
  164.         delay_140us();
  165.         DIO = 1;
  166.         delay_140us();
  167. }

  168. /********************************************************************
  169. * 名稱 : void TM1637_write1Bit(unsigned char mBit )
  170. * 功能 : 寫1bit
  171. * 輸入 : unsigned char mBit
  172. * 輸出 : 無
  173. **************************************************************/
  174. void TM1637_write1Bit(unsigned char mBit )
  175. {
  176.         CLK = 0;
  177.         delay_140us();
  178.         if(mBit)
  179.                 DIO = 1;
  180.         else
  181.                 DIO = 0;
  182.         delay_140us();      
  183.         CLK        = 1;
  184.         delay_140us();
  185. }

  186. /********************************************************************
  187. * 名稱 : void TM1637_write1Byte(unsigned char mByte)
  188. * 功能 : 寫1byte
  189. * 輸入 : unsigned char mByte
  190. * 輸出 : 無
  191. **************************************************************/
  192. void TM1637_write1Byte(unsigned char mByte)
  193. {
  194.         char loop = 0;
  195.         for(loop = 0; loop < 8; loop++)
  196.         {
  197.                 TM1637_write1Bit((mByte>>loop)&0x01); //取得最低位      
  198.         }
  199.         CLK = 0;
  200.         delay_140us();
  201.         DIO = 1;
  202.         delay_140us();
  203.         CLK = 1;
  204.         delay_140us();
  205.         while(DIO == 1);  //獲得應(yīng)答位         
  206. }

  207. /********************************************************************
  208. * 名稱 : void TM1637_writeCammand(unsigned char mData)
  209. * 功能 : 寫指令1byte
  210. * 輸入 : unsigned char mData
  211. * 輸出 : 無
  212. **************************************************************/
  213. void TM1637_writeCammand(unsigned char mData)
  214. {
  215.         TM1637_start();
  216.         TM1637_write1Byte(mData);  //數(shù)據(jù)
  217.         TM1637_stop();      
  218. }

  219. /********************************************************************
  220. * 名稱 : void TM1637_writeData(unsigned char addr, unsigned char mData)
  221. * 功能 : 固定地址寫數(shù)據(jù)1byte
  222. * 輸入 : unsigned char addr, unsigned char mData
  223. * 輸出 : 無
  224. **************************************************************/
  225. void TM1637_writeData(unsigned char addr, unsigned char mData)
  226. {
  227.         TM1637_start();
  228.         TM1637_write1Byte(addr);  //地址
  229.         TM1637_write1Byte(mData);  //數(shù)據(jù)
  230.         TM1637_stop();      
  231. }

  232. /********************************************************************
  233. **************************************************************/
  234. void timer0_init( void )
  235. {
  236.         TMOD=0X01;
  237.         TH0=(65536-35000)/256;
  238.         TL0=(65536-35000)%256;
  239.         ET0=1;
  240.         EA=1;
  241.         TR0=1;      
  242. }
復(fù)制代碼


所有資料51hei提供下載:
TM1637.rar (33.18 KB, 下載次數(shù): 23)



作者: 小霞子    時間: 2018-12-5 17:41
感謝感謝感謝




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美福利视频 | 久久综合激情 | 一级毛片视频 | 久久国产精品免费一区二区三区 | 国产一区91精品张津瑜 | 在线观看日本高清二区 | 亚洲麻豆 | 日本精品久久久久久久 | 欧美高清视频在线观看 | 一区二区国产精品 | 91麻豆精品国产91久久久久久久久 | 精品九九九 | 中文字幕亚洲精品 | 亚洲国产成人精品女人久久久 | 91亚洲国产精品 | 国产福利在线看 | 一级片在线视频 | 人人干人人艹 | av中文在线播放 | 亚洲成人av在线播放 | 亚洲国产精品一区二区久久 | 国产精品国产 | 日韩不卡在线 | 成人免费在线小视频 | 成人在线小视频 | 午夜精品一区 | 亚洲国产一区二区三区 | 日韩欧美国产综合 | 一级大片免费 | 精品视频一区二区三区 | 午夜精品| 国产成人精品免费 | a国产一区二区免费入口 | 亚洲欧美在线一区 | 九九免费观看视频 | 黄色免费av | 人人cao | 天天久久| 黄色a视频 | 久久久高清 | 久久综合激情 |