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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請問tm1637數碼管中間的兩個小點怎么點亮

[復制鏈接]
跳轉到指定樓層
樓主
ID:404720 發表于 2018-11-25 19:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我看不懂數據手冊,很迷
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:404720 發表于 2018-11-25 19:55 | 只看該作者
里面有數據手冊

4位數碼管顯示模塊.zip

519.01 KB, 下載次數: 105

回復

使用道具 舉報

板凳
ID:155507 發表于 2018-11-26 09:22 | 只看該作者
你可以參考一下

  1. //基于TM1637的數碼管控制

  2. #include<reg52.h>  //包含52單片機頭文件
  3. #include<intrins.h> // _nop_ 頭文件
  4. //定義端口
  5. sbit SCL=P1^2;    //定義模擬IIC總線的時鐘線
  6. sbit SDA=P1^3;    //定義模擬IIC總線的數據線
  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. 啟動IIC
  21. *********************************************************/

  22. void start_IIC(void)
  23. {
  24.         SCL=1; //給芯片發送開始信號
  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. 判斷芯片發過來的ACK應答信號
  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. 寫一個字節數據
  62. *******************************************************/

  63. void WriteByte(unsigned char WriteData)
  64. {
  65.         unsigned char i;
  66.         for(i=0;i<8;i++)//開始傳送8位數據,每循環一次傳送一位數據
  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位數據傳送完
  77.         ack_IIC(); //判斷芯片發過來的ACK應答信號
  78. }
  79. /*******************************************************

  80. /************************************************
  81. 寫一字節數據到LEDSROM
  82. **************************************************/

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

復制代碼
回復

使用道具 舉報

地板
ID:404720 發表于 2018-11-26 10:48 | 只看該作者

謝謝!今天我回去試一下
回復

使用道具 舉報

5#
ID:404720 發表于 2018-11-26 19:17 | 只看該作者

現在可以亮了,請問怎么讓他閃爍起來呢
回復

使用道具 舉報

6#
ID:404720 發表于 2018-11-26 19:55 | 只看該作者

可以了閃爍好了謝謝
回復

使用道具 舉報

7#
ID:155507 發表于 2018-11-26 21:34 | 只看該作者
讓他閃爍起來, 給你改了一下,你試試。

  1. //基于TM1637的數碼管控制

  2. #include<reg52.h>  //包含52單片機頭文件
  3. #include<intrins.h> // _nop_ 頭文件
  4. //定義端口
  5. sbit SCL=P1^2;    //定義模擬IIC總線的時鐘線
  6. sbit SDA=P1^3;    //定義模擬IIC總線的數據線
  7. unsigned char t, shi, ge, bai;
  8. unsigned int dadt;
  9. bit Blink = 0; //中間的兩個小點閃爍起來標志位,=1表示點亮,=0表示不點亮
  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. 啟動IIC
  23. *********************************************************/
  24. void start_IIC(void)
  25. {
  26.         SCL=1; //給芯片發送開始信號
  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. 判斷芯片發過來的ACK應答信號
  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. 寫一個字節數據
  64. *******************************************************/

  65. void WriteByte(unsigned char WriteData)
  66. {
  67.         unsigned char i;
  68.         for(i=0;i<8;i++)//開始傳送8位數據,每循環一次傳送一位數據
  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位數據傳送完
  79.         ack_IIC(); //判斷芯片發過來的ACK應答信號
  80. }
  81. /*******************************************************

  82. /************************************************
  83. 寫一字節數據到LEDSROM
  84. **************************************************/

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

使用道具 舉報

8#
ID:19680 發表于 2018-11-26 21:35 | 只看該作者
zhengaohui 發表于 2018-11-26 19:17
現在可以亮了,請問怎么讓他閃爍起來呢

用個延時函數就行了 跟led閃爍的原理是一樣的
回復

使用道具 舉報

9#
ID:404720 發表于 2018-11-27 07:14 來自觸屏版 | 只看該作者
angmall 發表于 2018-11-26 21:34
讓他閃爍起來, 給你改了一下,你試試。

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 福利视频三区 | 蜜臀网站 | 日韩av在线免费 | 爱综合 | 日本久久福利 | 日韩三级电影在线看 | 麻豆av免费观看 | 日本亚洲一区 | 欧美综合久久 | 视频在线亚洲 | 日韩精品一区二区在线 | 亚洲男人天堂2024 | 国产激情在线观看视频 | 91精品国产日韩91久久久久久 | 免费精品久久久久久中文字幕 | 久久久久久黄 | 欧美美女爱爱视频 | 蜜桃精品在线 | 欧美日韩在线视频一区 | 国产精产国品一二三产区视频 | 久久精品国产精品青草 | 国内精品视频免费观看 | 久久亚洲国产 | 日韩在线一区二区三区 | 亚洲一区免费 | 日韩一区二区在线视频 | 一区二区三区四区在线视频 | 午夜久久久 | 久久久91精品国产一区二区三区 | 亚洲视频二区 | m豆传媒在线链接观看 | 亚洲高清在线 | 亚洲综合久久久 | 91久久综合亚洲鲁鲁五月天 | 女女百合av大片一区二区三区九县 | 亚洲精品aⅴ | 欧美午夜视频 | 国产99视频精品免视看9 | 男女视频免费 | 中文字幕成人av | 日本xx视频免费观看 |