找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6346|回復(fù): 8
收起左側(cè)

請問tm1637數(shù)碼管中間的兩個(gè)小點(diǎn)怎么點(diǎn)亮

[復(fù)制鏈接]
ID:404720 發(fā)表于 2018-11-25 19:54 | 顯示全部樓層 |閱讀模式
我看不懂?dāng)?shù)據(jù)手冊,很迷
回復(fù)

使用道具 舉報(bào)

ID:404720 發(fā)表于 2018-11-25 19:55 | 顯示全部樓層
里面有數(shù)據(jù)手冊

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

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

回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 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ā)送開始信號
  25.         SDA=1;
  26.         IIC_delay();
  27.         SDA=0;
  28.         IIC_delay();
  29.         SCL=0; //開始信號傳送完
  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)答信號
  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)答信號
  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)用開始信號
  86.         WriteByte(addr); //寫起始地址命令(0C0H),地址00H單元。
  87.         WriteByte(WData);//給顯示寄存器寫顯示數(shù)據(jù),值可根據(jù)實(shí)參改變
  88.         stop_IIC(); //調(diào)用結(jié)束信號,一個(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)用開始信號
  100.         WriteByte(0x44);//寫命令40H(數(shù)據(jù)設(shè)置)
  101.         stop_IIC(); //調(diào)用結(jié)束信號,一個(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)用開始信號
  108.         WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據(jù)低三位調(diào)節(jié)。//顯示亮度
  109.         stop_IIC(); //調(diào)用結(jié)束信號,一個(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ù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:404720 發(fā)表于 2018-11-26 10:48 | 顯示全部樓層

謝謝!今天我回去試一下
回復(fù)

使用道具 舉報(bào)

ID:404720 發(fā)表于 2018-11-26 19:17 | 顯示全部樓層

現(xiàn)在可以亮了,請問怎么讓他閃爍起來呢
回復(fù)

使用道具 舉報(bào)

ID:404720 發(fā)表于 2018-11-26 19:55 | 顯示全部樓層

可以了閃爍好了謝謝
回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 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ā)送開始信號
  27.         SDA=1;
  28.         IIC_delay();
  29.         SDA=0;
  30.         IIC_delay();
  31.         SCL=0; //開始信號傳送完
  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)答信號
  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)答信號
  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)用開始信號
  88.         WriteByte(addr); //寫起始地址命令(0C0H),地址00H單元。
  89.         WriteByte(WData);//給顯示寄存器寫顯示數(shù)據(jù),值可根據(jù)實(shí)參改變
  90.         stop_IIC(); //調(diào)用結(jié)束信號,一個(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)用開始信號
  102.         WriteByte(0x44);//寫命令40H(數(shù)據(jù)設(shè)置)
  103.         stop_IIC(); //調(diào)用結(jié)束信號,一個(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)用開始信號
  110.         WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據(jù)低三位調(diào)節(jié)。//顯示亮度
  111.         stop_IIC(); //調(diào)用結(jié)束信號,一個(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ù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:19680 發(fā)表于 2018-11-26 21:35 | 顯示全部樓層
zhengaohui 發(fā)表于 2018-11-26 19:17
現(xiàn)在可以亮了,請問怎么讓他閃爍起來呢

用個(gè)延時(shí)函數(shù)就行了 跟led閃爍的原理是一樣的
回復(fù)

使用道具 舉報(bào)

ID:404720 發(fā)表于 2018-11-27 07:14 來自觸屏版 | 顯示全部樓層
angmall 發(fā)表于 2018-11-26 21:34
讓他閃爍起來, 給你改了一下,你試試。

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

使用道具 舉報(bào)

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表