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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC89C52單片機+老王4位數碼管AIP1637程序分享

[復制鏈接]
跳轉到指定樓層
樓主
制作出來的實物效果圖如下:



話不多說,上單片機代碼
//主函數
  1. #include <intrins.h>
  2. #include <TM1637.H>


  3. void main()
  4. {
  5.    
  6.   TM1637_init();
  7.         TM1637_show_digit(0, 1, 0);
  8.         TM1637_show_digit(1, 2, 1);
  9.         TM1637_show_digit(2, 3, 0);
  10.   TM1637_show_digit(3, 4, 0);
  11.         
  12.     while(1)
  13.     {
  14.                

  15.     }

  16. }
復制代碼
1637.c
  1. #include <TM1637.H>



  2. code unsigned char TM1637_SEG_TAB[] =
  3. {
  4.      0x3F // 00111111 0
  5.     ,0x06 // 00000110 1
  6.     ,0x5B // 01011011 2
  7.     ,0x4F // 01001111 3
  8.     ,0x66 // 01100110 4
  9.     ,0x6d // 01101101 5
  10.     ,0x7d // 01111101 6
  11.     ,0x07 // 00000111 7
  12.     ,0x7F // 01111111 8
  13.     ,0x6F // 01101111 9
  14.     ,0x77 // 01110111 A
  15.     ,0x7C // 01111100 b
  16.     ,0x39 // 00111001 C
  17.     ,0x5E // 01011110 d
  18.     ,0x79 // 01111001 E
  19.     ,0x71 // 01110001 F
  20. };



  21. void I2C_delay()
  22. {
  23.     nop_();
  24. }


  25. void I2C_start()
  26. {   
  27.     I2C_SCL = 1;
  28.     I2C_SDA = 1;


  29.     I2C_delay();


  30.     I2C_SDA = 0; // 時鐘線設置為常態,低電平。
  31. }


  32. /*
  33. I2C 總線寫1個字節
  34. 不包含應答位的檢測
  35. */
  36. void I2C_write_byte(char byte_to_write)
  37. {
  38.     unsigned char i;


  39.     for(i=0; i<8; i++)
  40.     {
  41.         I2C_SCL = 0;

  42.         I2C_SDA = byte_to_write & 0x01;
  43.         I2C_delay();

  44.         I2C_SCL = 1;
  45.         I2C_delay();


  46.         I2C_SCL = 0;
  47.         I2C_delay();


  48.         byte_to_write >>= 1;
  49.     }

  50.     return;
  51. }


  52. void I2C_check_ack()
  53. {
  54.     // I2C 檢查應答位,實際未檢查,只發送了應答位時鐘,認為TM1637工作正常


  55.     I2C_SCL = 0;
  56.     I2C_delay();//在第八個時鐘下降沿之后延時5us,開始判斷ACK 信號

  57.     while(I2C_SDA)
  58.     {
  59.         ;
  60.     }


  61.     I2C_SCL = 1;
  62.     I2C_delay();


  63.     I2C_SCL=0;
  64. }


  65. void I2C_send_ack()
  66. {
  67.     I2C_SDA = 0;
  68.     I2C_delay();


  69.     I2C_SCL = 1;
  70.     I2C_delay();


  71.     I2C_SCL = 0;
  72.     I2C_delay();


  73.     I2C_SDA = 1;
  74.     I2C_delay();
  75. }


  76. void I2C_stop()
  77. {
  78.     I2C_SCL = 0;
  79.     I2C_delay();


  80.     I2C_SDA = 0;
  81.     I2C_delay();


  82.     I2C_SCL = 1;
  83.     I2C_delay();


  84.     I2C_SDA = 1;
  85. }


  86. ///
  87. //
  88. // TM1637模塊操作函數
  89. //
  90. //


  91. void TM1637_write_command_byte(unsigned char command)
  92. {
  93.     I2C_start();
  94.     I2C_write_byte(command);
  95.     I2C_check_ack();
  96.     I2C_stop();
  97. }




  98. // bright : 0 - 7
  99. void TM1637_display_switch_and_bright(bit enable_display, unsigned char bright)
  100. {
  101.     TM1637_write_command_byte(0x80 + (enable_display ? 0x08 : 0x00) + bright);
  102. }




  103. void TM1637_write_display_bytes(unsigned char first_addr,
  104.                                 unsigned char bytes_to_write[],
  105.                                 unsigned char num_of_bytes)
  106. {
  107.     unsigned char i;


  108.     I2C_start();
  109.     I2C_write_byte(0x40);
  110.     I2C_check_ack();
  111.     I2C_stop();


  112.     I2C_start();
  113.     I2C_write_byte(0xC0 + first_addr);
  114.     I2C_check_ack();


  115.     for(i=0; i<num_of_bytes; i++)
  116.     {
  117.         I2C_write_byte(bytes_to_write[i]);
  118.         I2C_check_ack();
  119.     }


  120.     I2C_stop();
  121. }



  122. /**
  123.    * @brief  顯示數據
  124.    * @param  地址值  addr: 0 - 5
  125.    * @param  數據                  
  126.    * @param
  127.    * @retval None
  128.    */   
  129. void TM1637_write_display_byte(unsigned char addr, unsigned char segments)
  130. {
  131.     I2C_start();
  132.     I2C_write_byte(0x40 + addr);
  133.     I2C_check_ack();
  134.     I2C_stop();


  135.     I2C_start();
  136.     I2C_write_byte(0xC0 + addr);
  137.     I2C_check_ack();


  138.     I2C_write_byte(segments);
  139.     I2C_check_ack();


  140.     I2C_stop();
  141. }







  142. void TM1637_show_digit(unsigned char pos, unsigned char digit, bit with_dot)
  143. {
  144.     TM1637_write_display_byte(pos, TM1637_SEG_TAB[digit] | (with_dot ? 0x80 : 0x00));
  145. }




  146. void TM1637_init()
  147. {
  148.     unsigned char i;


  149.     TM1637_display_switch_and_bright(1, TM1637_BRIGHTNESS);


  150.     for(i=0; i<6; i++)
  151.     {
  152.         TM1637_write_display_byte(i, 0xFF);
  153.     }

  154.     for(i=0; i<6; i++)
  155.     {
  156.         TM1637_write_display_byte(i, 0x00);
  157.     }



  158. }
復制代碼

1637.h
  1. #ifndef __TM1637_H__
  2. #define __TM1637_H__



  3. #include"reg52.h"
  4. #include"intrins.h"

  5. sbit I2C_SCL = P2^0;   //定義模擬IIC總線的時鐘線
  6. sbit I2C_SDA = P2^1;   //定義模擬IIC總線的數據線


  7. #define TM1637_BRIGHTNESS 4 // 0 - 7 亮度

  8. void TM1637_show_digit(unsigned char pos, unsigned char digit, bit with_dot);
  9. void TM1637_init();

  10. #endif

復制代碼

Keil代碼下載: AIP1637.zip (40.3 KB, 下載次數: 30)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1064915 發表于 2023-6-17 09:55 | 只看該作者
這個比較實用
回復

使用道具 舉報

板凳
ID:639666 發表于 2023-12-22 10:29 | 只看該作者
給個電路看看


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品久久久 | 成人午夜影院 | 国产精品波多野结衣 | 天天综合久久 | 91精品国产美女在线观看 | 久久综合久久久 | 国产精品久久九九 | 日韩欧美大片在线观看 | 国产精品海角社区在线观看 | 免费精品久久久久久中文字幕 | 久久久久久久久综合 | 欧美日一区二区 | 99re在线视频 | 欧美在线一二三 | av在线电影网站 | 色偷偷人人澡人人爽人人模 | 日韩视频二区 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 亚洲精品一区二区在线观看 | 99热在线免费 | 欧美中文一区 | 在线观看日本网站 | 成人片免费看 | 国产欧美在线观看 | 欧美啪啪 | 国产精品日日做人人爱 | 成人激情视频在线观看 | 成人精品视频在线 | 伊人久久综合影院 | 91大神在线看| 国产成人小视频 | 91av视频 | 日韩欧美天堂 | 玖玖国产精品视频 | 中文字幕久久精品 | 99热在这里只有精品 | 成人久久18免费网站麻豆 | 91精品国产麻豆 | 2020亚洲天堂 | 欧美精品一区二区三区在线 | 亚洲精品久久久久久久不卡四虎 |