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

標(biāo)題: 請(qǐng)問tm1637數(shù)碼管中間的兩個(gè)小點(diǎn)怎么點(diǎn)亮 [打印本頁(yè)]

作者: zhengaohui    時(shí)間: 2018-11-25 19:54
標(biāo)題: 請(qǐng)問tm1637數(shù)碼管中間的兩個(gè)小點(diǎn)怎么點(diǎn)亮
我看不懂?dāng)?shù)據(jù)手冊(cè),很迷

作者: zhengaohui    時(shí)間: 2018-11-25 19:55
里面有數(shù)據(jù)手冊(cè)

4位數(shù)碼管顯示模塊.zip

519.01 KB, 下載次數(shù): 105


作者: angmall    時(shí)間: 2018-11-26 09:22
你可以參考一下

  1. //基于TM1637的數(shù)碼管控制

  2. #include<reg52.h>  //包含52單片機(jī)頭文件
  3. #include<intrins.h> // _nop_ 頭文件
  4. //定義端口
  5. sbit SCL=P1^2;    //定義模擬IIC總線的時(shí)鐘線
  6. sbit SDA=P1^3;    //定義模擬IIC總線的數(shù)據(jù)線
  7. unsigned char t, shi, ge, bai;
  8. unsigned int dadt;
  9. unsigned char code xsbcdbuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
  10. /*********************************************************

  11. *IIC_delay

  12. *******************************************************/

  13. void IIC_delay(void)
  14. {
  15.         unsigned char i;
  16.         for(i=0;i<20;i++) _nop_();
  17. }

  18. /*********************************************************
  19. *
  20. 啟動(dòng)IIC
  21. *********************************************************/

  22. void start_IIC(void)
  23. {
  24.         SCL=1; //給芯片發(fā)送開始信號(hào)
  25.         SDA=1;
  26.         IIC_delay();
  27.         SDA=0;
  28.         IIC_delay();
  29.         SCL=0; //開始信號(hào)傳送完
  30.         IIC_delay();
  31. }

  32. /*******************************************************
  33. *
  34. 停止IIC
  35. *******************************************************/
  36. void stop_IIC(void)
  37. {
  38.         SCL=0;
  39.         IIC_delay();
  40.         SDA=0;
  41.         IIC_delay();
  42.         SCL=1;
  43.         IIC_delay();
  44.         SDA=1;
  45. }
  46. /*******************************************************
  47. *
  48. 判斷芯片發(fā)過來的ACK應(yīng)答信號(hào)
  49. *******************************************************/
  50. void ack_IIC()
  51. {
  52.         SCL=0;
  53.         _nop_();_nop_();_nop_();
  54.         while(SDA);
  55.         SCL=1;
  56.         _nop_();_nop_();_nop_();
  57.         SCL=0;
  58. }

  59. /*******************************************************
  60. *
  61. 寫一個(gè)字節(jié)數(shù)據(jù)
  62. *******************************************************/

  63. void WriteByte(unsigned char WriteData)
  64. {
  65.         unsigned char i;
  66.         for(i=0;i<8;i++)//開始傳送8位數(shù)據(jù),每循環(huán)一次傳送一位數(shù)據(jù)
  67.         {
  68.                 SCL=0;
  69.                 IIC_delay();
  70.                 WriteData=WriteData>>1;
  71.                 SDA=CY;
  72.                 IIC_delay();
  73.                 SCL=1;
  74.                 IIC_delay();
  75.         }
  76.         //8位數(shù)據(jù)傳送完
  77.         ack_IIC(); //判斷芯片發(fā)過來的ACK應(yīng)答信號(hào)
  78. }
  79. /*******************************************************

  80. /************************************************
  81. 寫一字節(jié)數(shù)據(jù)到LEDSROM
  82. **************************************************/

  83. void write_LEDSROM(unsigned char addr,unsigned char WData)
  84. {
  85.         start_IIC(); //調(diào)用開始信號(hào)
  86.         WriteByte(addr); //寫起始地址命令(0C0H),地址00H單元。
  87.         WriteByte(WData);//給顯示寄存器寫顯示數(shù)據(jù),值可根據(jù)實(shí)參改變
  88.         stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
  89. }
  90. /************************************************
  91. /************************************************
  92. *
  93. 分開寫數(shù)據(jù)到LED
  94. **************************************************/
  95. void xsled(void)
  96. {
  97.         SDA=1;
  98.         SCL=1;
  99.         start_IIC(); //調(diào)用開始信號(hào)
  100.         WriteByte(0x44);//寫命令40H(數(shù)據(jù)設(shè)置)
  101.         stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
  102.         write_LEDSROM(0xC0,0x00); //第一個(gè)數(shù)碼管
  103.         write_LEDSROM(0xC1,xsbcdbuf[bai]|0x80);  //第二個(gè)數(shù)碼管  0x80 點(diǎn)亮數(shù)碼管中間的兩個(gè)小點(diǎn)
  104.         write_LEDSROM(0xC2,xsbcdbuf[shi]); //第三個(gè)數(shù)碼管
  105.         write_LEDSROM(0xC3,xsbcdbuf[ge]);//第四個(gè)數(shù)碼管
  106.         IIC_delay();
  107.         start_IIC(); //調(diào)用開始信號(hào)
  108.         WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據(jù)低三位調(diào)節(jié)。//顯示亮度
  109.         stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
  110. }

  111. void init()
  112. {
  113.         TMOD|=0X01; // Timer0
  114.         TH0=(65535-50000)/256; // 50ms
  115.         TL0=(65535-50000)%256;
  116.         ET0=1;
  117.         EA=1;
  118.         TR0=1;
  119. }

  120. void jisuan()
  121. {     
  122.         bai=dadt/100;
  123.         shi=dadt/10%10;
  124.         ge=dadt%10;
  125. }

  126. void main()
  127. {
  128.         //P1=0xff;
  129.         init();
  130.         while(1)
  131.         {
  132.                 jisuan();
  133.                 xsled();
  134.                 if(t>=20)  // 1s
  135.                 {
  136.                         t=0;
  137.                         dadt++;
  138.                         if(dadt>=1000) //能到999
  139.                         {
  140.                                 dadt=0;
  141.                         }
  142.                 }
  143.         }
  144. }

  145. void T0_time() interrupt 1  // 50ms
  146. {
  147.         TH0=(65535-50000)/256;
  148.         TL0=(65535-50000)%256;
  149.         t++;
  150. }

復(fù)制代碼

作者: zhengaohui    時(shí)間: 2018-11-26 10:48
angmall 發(fā)表于 2018-11-26 09:22
你可以參考一下

謝謝!今天我回去試一下
作者: zhengaohui    時(shí)間: 2018-11-26 19:17
angmall 發(fā)表于 2018-11-26 09:22
你可以參考一下

現(xiàn)在可以亮了,請(qǐng)問怎么讓他閃爍起來呢
作者: zhengaohui    時(shí)間: 2018-11-26 19:55
angmall 發(fā)表于 2018-11-26 09:22
你可以參考一下

可以了閃爍好了謝謝
作者: angmall    時(shí)間: 2018-11-26 21:34
讓他閃爍起來, 給你改了一下,你試試。

  1. //基于TM1637的數(shù)碼管控制

  2. #include<reg52.h>  //包含52單片機(jī)頭文件
  3. #include<intrins.h> // _nop_ 頭文件
  4. //定義端口
  5. sbit SCL=P1^2;    //定義模擬IIC總線的時(shí)鐘線
  6. sbit SDA=P1^3;    //定義模擬IIC總線的數(shù)據(jù)線
  7. unsigned char t, shi, ge, bai;
  8. unsigned int dadt;
  9. bit Blink = 0; //中間的兩個(gè)小點(diǎn)閃爍起來標(biāo)志位,=1表示點(diǎn)亮,=0表示不點(diǎn)亮
  10. unsigned char code xsbcdbuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
  11.                               // 0    1    2    3    4    5     6    7    8   9    0
  12. /*********************************************************

  13. *IIC_delay

  14. *******************************************************/
  15. void IIC_delay(void)
  16. {
  17.         unsigned char i;
  18.         for(i=0;i<20;i++) _nop_();
  19. }
  20. /*********************************************************
  21. *
  22. 啟動(dòng)IIC
  23. *********************************************************/
  24. void start_IIC(void)
  25. {
  26.         SCL=1; //給芯片發(fā)送開始信號(hào)
  27.         SDA=1;
  28.         IIC_delay();
  29.         SDA=0;
  30.         IIC_delay();
  31.         SCL=0; //開始信號(hào)傳送完
  32.         IIC_delay();
  33. }
  34. /*******************************************************
  35. *
  36. 停止IIC
  37. *******************************************************/
  38. void stop_IIC(void)
  39. {
  40.         SCL=0;
  41.         IIC_delay();
  42.         SDA=0;
  43.         IIC_delay();
  44.         SCL=1;
  45.         IIC_delay();
  46.         SDA=1;
  47. }
  48. /*******************************************************
  49. *
  50. 判斷芯片發(fā)過來的ACK應(yīng)答信號(hào)
  51. *******************************************************/
  52. void ack_IIC()
  53. {
  54.         SCL=0;
  55.         _nop_();_nop_();_nop_();
  56.         while(SDA);
  57.         SCL=1;
  58.         _nop_();_nop_();_nop_();
  59.         SCL=0;
  60. }

  61. /*******************************************************
  62. *
  63. 寫一個(gè)字節(jié)數(shù)據(jù)
  64. *******************************************************/

  65. void WriteByte(unsigned char WriteData)
  66. {
  67.         unsigned char i;
  68.         for(i=0;i<8;i++)//開始傳送8位數(shù)據(jù),每循環(huán)一次傳送一位數(shù)據(jù)
  69.         {
  70.                 SCL=0;
  71.                 IIC_delay();
  72.                 WriteData=WriteData>>1;
  73.                 SDA=CY;
  74.                 IIC_delay();
  75.                 SCL=1;
  76.                 IIC_delay();
  77.         }
  78.         //8位數(shù)據(jù)傳送完
  79.         ack_IIC(); //判斷芯片發(fā)過來的ACK應(yīng)答信號(hào)
  80. }
  81. /*******************************************************

  82. /************************************************
  83. 寫一字節(jié)數(shù)據(jù)到LEDSROM
  84. **************************************************/

  85. void write_LEDSROM(unsigned char addr,unsigned char WData)
  86. {
  87.         start_IIC(); //調(diào)用開始信號(hào)
  88.         WriteByte(addr); //寫起始地址命令(0C0H),地址00H單元。
  89.         WriteByte(WData);//給顯示寄存器寫顯示數(shù)據(jù),值可根據(jù)實(shí)參改變
  90.         stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
  91. }
  92. /************************************************
  93. /************************************************
  94. *
  95. 分開寫數(shù)據(jù)到LED
  96. **************************************************/
  97. void xsled(void)
  98. {
  99.         SDA=1;
  100.         SCL=1;
  101.         start_IIC(); //調(diào)用開始信號(hào)
  102.         WriteByte(0x44);//寫命令40H(數(shù)據(jù)設(shè)置)
  103.         stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
  104.         write_LEDSROM(0xC0,0x00); //第一個(gè)數(shù)碼管
  105.         write_LEDSROM(0xC1,xsbcdbuf[bai]|(Blink ? 0x80 : 0x00)); //第二個(gè)數(shù)碼管  0x80 點(diǎn)亮數(shù)碼管中間的兩個(gè)小點(diǎn)
  106.         write_LEDSROM(0xC2,xsbcdbuf[shi]); //第三個(gè)數(shù)碼管
  107.         write_LEDSROM(0xC3,xsbcdbuf[ge]);//第四個(gè)數(shù)碼管
  108.         IIC_delay();
  109.         start_IIC(); //調(diào)用開始信號(hào)
  110.         WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據(jù)低三位調(diào)節(jié)。//顯示亮度
  111.         stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
  112. }

  113. void init()
  114. {
  115.         TMOD|=0X01; // Timer0
  116.         TH0=(65535-50000)/256; // 50ms
  117.         TL0=(65535-50000)%256;
  118.         ET0=1;
  119.         EA=1;
  120.         TR0=1;
  121. }
  122. void jisuan()
  123. {     
  124.         bai=dadt/100;
  125.         shi=dadt/10%10;
  126.         ge=dadt%10;
  127. }
  128. void main()
  129. {
  130.         //P1=0xff;

  131.         init();
  132.         while(1)
  133.         {
  134.                 jisuan();
  135.                 xsled();
  136.                 if(t>=20)  // 1s
  137.                 {
  138.                         t=0;
  139.                         dadt++;
  140.                         if(dadt>=1000) //能到999
  141.                         {
  142.                                 dadt=0;
  143.                         }
  144.                 }
  145.         }
  146. }

  147. void T0_time() interrupt 1  // 50ms
  148. {
  149.         TH0=(65535-50000)/256;
  150.         TL0=(65535-50000)%256;
  151.         t++;
  152.         if(t%2==0)
  153.          Blink =~Blink; //中間的兩個(gè)小點(diǎn)閃爍起來
  154. }
復(fù)制代碼

作者: superplaim    時(shí)間: 2018-11-26 21:35
zhengaohui 發(fā)表于 2018-11-26 19:17
現(xiàn)在可以亮了,請(qǐng)問怎么讓他閃爍起來呢

用個(gè)延時(shí)函數(shù)就行了 跟led閃爍的原理是一樣的
作者: zhengaohui    時(shí)間: 2018-11-27 07:14
angmall 發(fā)表于 2018-11-26 21:34
讓他閃爍起來, 給你改了一下,你試試。

謝謝大佬,感覺又漲姿勢(shì)了!我的方法是直接在百位那邊加了個(gè)delay,先“|0x80”,然后再delay不“|0x80”,
感覺沒你的程序精妙。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91福利网址 | 日韩在线免费视频 | 久久久九九 | 日韩在线中文 | 欧美成人黄色小说 | 亚洲黄色高清视频 | av一二三区 | 欧美精品久久久久 | 亚洲高清成人 | 91视频国产一区 | 久久久久久久久久久久久久av | 亚洲精品一区二区网址 | 中文字幕在线视频网站 | 91在线看 | 亚洲精品一区二区三区蜜桃久 | 欧美日韩一区二区三区四区 | 欧美日韩免费 | 欧美一区二区在线免费观看 | 国产成人精品一区二区三区在线 | 成人做爰9片免费看网站 | 男女视频网站 | 亚洲女人天堂成人av在线 | 精品久久久久久久人人人人传媒 | 久久极品 | 久久精品一区二区三区四区 | 99久视频| 日韩在线免费视频 | 国产乱码精品1区2区3区 | 秋霞电影院午夜伦 | 亚洲国产成人精品女人久久久 | 欧美日韩在线一区二区 | 天天久久| 欧美激情在线精品一区二区三区 | 亚洲 精品 综合 精品 自拍 | 成人午夜激情 | 中文字幕 国产精品 | h片免费看 | 国产成人精品免高潮在线观看 | 91av久久久 | 成人精品久久 | 99re在线视频免费观看 |