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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32F103帶鍵盤掃描接口的LED驅動控制程序

[復制鏈接]
跳轉到指定樓層
樓主
TM1637 是一種帶鍵盤掃描接口的LED(發光二極管顯示器)驅動控制專用電路,內部集成有MCU 數字接口、數據鎖存器、LED 高壓驅動、鍵盤掃描等電路。

單片機源程序如下:
  1. #include "TM1637.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "Buzzer.h"
  5. #include "SysTick.h"
  6. /** Write multiple bits in an 8-bit device register.
  7. * @param slaveAddr I2C slave device address
  8. * @param regAddr Register regAddr to write to
  9. * @param bitStart First bit position to write (0-7)
  10. * @param length Number of bits to write (not more than 8)
  11. * @param data Right-aligned value to write
  12. */
  13. static unsigned char temp;
  14. static unsigned char x=1;
  15. //unsigned char channel_1=1;
  16. unsigned char Enable_1;
  17. extern unsigned char channel;
  18. extern unsigned char NumDis[24],TIME[10],G_1,K1;
  19. extern int16_t cache[6],data[6];
  20. //__IO u32 Time_1;
  21. extern __IO u32 Total_time;
  22. void TM1637_Delay_us(unsigned  int Nus)
  23. {
  24. for(;Nus>0;Nus--)
  25.         {
  26.           __nop();
  27.         }
  28. }

  29. void TM1637_Start(void)
  30. {
  31.         TM1637_DIO_OUT();
  32.   TM1637_CLK (1);
  33.         TM1637_OUT_DIO1 = 1;
  34.         TM1637_Delay_us(2);
  35.         TM1637_OUT_DIO1 = 0;
  36.         TM1637_Delay_us(2);
  37.         TM1637_CLK ( 0);
  38. }
  39. void TM1637_Ack(void)
  40. {
  41.         TM1637_DIO_IN();
  42.   TM1637_CLK ( 0);
  43.         TM1637_Delay_us(5);
  44.         while(TM1637_READ_DIO1);
  45.         TM1637_CLK (1);
  46.         TM1637_Delay_us(2);
  47. }
  48. void TM1637_Stop(void)
  49. {
  50.         TM1637_DIO_OUT();
  51.         TM1637_CLK ( 0);
  52.         TM1637_Delay_us(2);
  53.         TM1637_OUT_DIO1 = 0;
  54.         TM1637_Delay_us(2);
  55.         TM1637_CLK (1);
  56.         TM1637_Delay_us(2);
  57.         TM1637_OUT_DIO1 = 1;
  58.         TM1637_Delay_us(2);
  59.         TM1637_CLK( 0);
  60.         TM1637_OUT_DIO1 = 0;
  61. }
  62. void TM1637_WriteByte(unsigned char oneByte)
  63. {
  64. unsigned char i;
  65.         TM1637_DIO_OUT();
  66.         for(i=0;i<8;i++)
  67.         {
  68.          TM1637_CLK(0);
  69.                 if(oneByte&0x01)
  70.                 {
  71.                         TM1637_OUT_DIO1 = 1;
  72.                 }
  73.                 else
  74.                 {
  75.                         TM1637_OUT_DIO1 = 0;
  76.                 }
  77.                 TM1637_Delay_us(3);
  78.                 TM1637_CLK(1);
  79.                 oneByte=oneByte>>1;
  80.         }
  81. }

  82. void TM1637_DisplayChar_1(unsigned char ch,unsigned char p)
  83. {
  84.         if(ch>23)ch=0;//防止數組越界
  85.         TM1637_Start();
  86.         TM1637_WriteByte(0x44);//0x44固定模式有利于控制顯示位,0x40則采用顯示地址自加模式這里不使用
  87.         TM1637_Ack();
  88.         TM1637_Stop();
  89.         TM1637_Start();
  90.         
  91.         TM1637_WriteByte(0xC0+p);//0X00地址開始顯示
  92.         TM1637_Ack();
  93.                
  94.         TM1637_WriteByte(NumDis[ch]);//顯示
  95.         TM1637_Ack();
  96.         
  97.         TM1637_Stop();
  98.         TM1637_Start();
  99.         TM1637_WriteByte(0x8C);
  100.         TM1637_Ack();
  101.         TM1637_Stop();
  102.                
  103. }
  104. void TM1637_Display_1(void)
  105. {
  106.         unsigned char a=0,b=0,c=0,d=0;
  107.         if(cache[0]<0)
  108.         {
  109.                 d=((-cache[0])%60)%10;
  110.                 c=((-cache[0])%60)/10;
  111.                 b=((-cache[0])/60)%10;
  112.                 a=0x40;
  113.         }
  114.         else
  115.         {
  116.         d=(cache[0]%60)%10;
  117.         c=(cache[0]%60)/10;
  118.         b=(cache[0]/60)%10;
  119.         a=(cache[0]/60)/10;
  120.         }
  121.         TM1637_Start();
  122.         TM1637_WriteByte(0x40);//0x40則采用顯示地址自加1模式
  123.         TM1637_Ack();
  124.         TM1637_Stop();
  125.         TM1637_Start();
  126.         TM1637_WriteByte(0xC0);//0X00地址開始顯示
  127.         TM1637_Ack();
  128.                
  129.         TM1637_WriteByte(TIME[a]);//顯示1
  130.         TM1637_Ack();
  131.         if(x==1)
  132.         {
  133.                 temp=TIME[b];
  134.                 x++;
  135.         }
  136.   temp^=0x80;  //10000000^11001111=01001111;01001111^10000000=11001111
  137.         TM1637_WriteByte(temp);//顯示2和跳動的冒號
  138.         TM1637_Ack();
  139.         
  140.         TM1637_WriteByte(TIME[c]);//顯示0
  141.         TM1637_Ack();
  142.                
  143.         TM1637_WriteByte(TIME[d]);//顯示0
  144.         TM1637_Ack();
  145.                
  146.         TM1637_WriteByte(0xFF);
  147.         TM1637_Ack();
  148.                
  149.         TM1637_WriteByte(0xFF);
  150.         TM1637_Ack();
  151.         
  152.         TM1637_Stop();
  153.         TM1637_Start();
  154.         TM1637_WriteByte(0x8c);
  155.         TM1637_Ack();
  156.         TM1637_Stop();
  157. }

  158. void time_1(void)
  159. {
  160.         
  161.         if(x>=2)
  162.                         {
  163.                                                 if((Enable_1==1)&&(channel==0))
  164.                                                 {
  165.                                                                 G_1=1;
  166.                                                                 cache[0]--;
  167.                                                                 if(cache[0]<0)
  168.                                                                 {
  169.                                                                         if((-cache[0])>599)
  170.                                                                         {
  171.                                                                                 Enable_1=0;
  172.                                                                         }
  173.                                                                         K1=1;                                
  174.                                                                 }        
  175.                                                         }
  176.                                 x=1;
  177.                         }
  178. }

  179. void Digital_off_1(void)
  180. {
  181.         TM1637_Start();
  182.         TM1637_WriteByte(0x88);
  183.         TM1637_Ack();
  184.         TM1637_Stop();
  185.         
  186. }
復制代碼

所有資料51hei提供下載:
TM1637.zip (1.92 KB, 下載次數: 34)
原理圖參考:http://www.zg4o1577.cn/bbs/dpj-213102-1.html
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:328014 發表于 2020-10-27 14:40 | 只看該作者
沒有電路圖啊 樓主能分享下電路嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩视频在线免费观看 | 日本亚洲精品成人欧美一区 | 91高清免费观看 | 黄色网址大全在线观看 | 久久综合av | 成人国产a | 日韩二区 | 99精品一区二区 | 99精品一区二区三区 | 国产成人免费视频 | 狠狠躁躁夜夜躁波多野结依 | 不卡在线视频 | 欧美日韩精品国产 | 五月综合久久 | 国产精品美女久久久久久免费 | 成人免费网视频 | 国产成人精品一区二区三区视频 | 日日干天天干 | 成人国产精品 | 国产视频福利 | 国产精品中文字幕在线 | 在线观看亚洲专区 | 在线免费国产 | 国产伦精品| 欧美一区二区三区在线观看 | 91精品国产综合久久久密闭 | 国产97在线视频 | 亚洲丝袜天堂 | 中文字幕三区 | 激情av | 狠狠的干狠狠的操 | 国产高清在线精品一区二区三区 | 国产精品毛片 | 中文字幕在线人 | 麻豆亚洲 | 天堂亚洲网 | 精品亚洲一区二区 | 成人黄色在线 | 久久久久99| 日韩欧美在线视频 | 久优草|