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

標題: STC15W404S單片機TM1650芯片驅動4位共陰數碼管驅動程序 [打印本頁]

作者: 51黑fan    時間: 2016-1-29 19:42
標題: STC15W404S單片機TM1650芯片驅動4位共陰數碼管驅動程序
//使用STC15W404S單片機測試成功驅動TM1650芯片的4位共陰數碼管顯示電路

//陳永飛于2016.1.18

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit CLK = P3^2;
sbit DIO = P3^3;

#define CLK_H  CLK = 1
#define CLK_L  CLK = 0

#define DIO_H  DIO = 1
#define DIO_L  DIO = 0

void TM1650_Set(uchar add,uchar dat);
uchar Scan_Key(void);

uchar CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9顯示代碼

void main()
{
uchar key;
TM1650_Set(0x48,0x51);//為5級亮度,開顯示八段顯示方式,后一個字節中高位用于亮度,低位用于七段或八段顯示方式和開關顯示
                                   //如:0x71為七級亮度,八段顯示方式,開顯示;0x79為為七級亮度,七段顯示方式,開顯示
TM1650_Set(0x68,CODE[0]);
TM1650_Set(0x6A,CODE[5]);
TM1650_Set(0x6C,CODE[1]);
TM1650_Set(0x6E,CODE[4]);
while(1) ;
{
key = Scan_Key();
//第一個按鍵按下
if(key == 0x44)  //此鍵值和數據手冊上對應
{
TM1650_Set(0x6E,CODE[1]);//顯示1
}
//第二個按鍵按下
if(key == 0x4c)
{
TM1650_Set(0x6E,CODE[2]);
}
//第三個按鍵按下

//TM1650_Set(0x6E,CODE[3]);

}
}
void Delay_us(uint i) //us延時
{
for(;i>0;i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void I2CStart(void)//開始信號
{
CLK_H;
DIO_H;
Delay_us(5);
DIO_L;

}

void I2Cask(void) //ACK信號
{
uchar timeout = 1;
CLK_H;
Delay_us(5);
CLK_L;
while((DIO)&&(timeout<=100))
{
  timeout++;
}
Delay_us(5);
CLK_L;
}

void I2CStop(void) //停止信號
{
CLK_H;
DIO_L;
Delay_us(5);
DIO_H;
}

void I2CWrByte(uchar oneByte) //寫一個字節高位在前,低位在后
{
uchar i;
CLK_L;
Delay_us(1);
for(i=0;i<8;i++)
{
oneByte = oneByte<<1;
DIO = CY;
CLK_L;
Delay_us(5);
CLK_H;
Delay_us(5);
CLK_L;
}
}

uchar Scan_Key(void)  // 按鍵掃描
{
uchar i;
uchar rekey;
I2CStart();
I2CWrByte(0x49);//讀按鍵命令
I2Cask();
//DIO_H;
for(i=0;i<8;i++)
{
   CLK_H;
   rekey = rekey<<1;
   if(DIO)
   {
   rekey++;
   }
   Delay_us(5);
   CLK_L;
}
I2Cask();
I2CStop();
return(rekey);
}


void TM1650_Set(uchar add,uchar dat) //數碼管顯示
{
//寫顯存必須從高地址開始寫
I2CStart();
I2CWrByte(add); //第一個顯存地址
I2Cask();
I2CWrByte(dat);
I2Cask();
I2CStop();
}





作者: mengsiu    時間: 2018-5-5 19:07
非常好。!一點就亮!!
稍后調試一下程序,打算做一個小時鐘。


作者: mengsiu    時間: 2018-5-6 10:16
本帖最后由 mengsiu 于 2022-9-20 11:24 編輯

對樓主的程序作了點小修改,實際是方便我自己使用而已,修改內容如下:


  1. /*--------------------------------------------------------------------------
  2. TM1650.H
  3. 四位數碼管驅動 TM1650 讀寫程序
  4. --------------------------------------------------------------------------*/
  5. #ifndef __TM1650_H__
  6. #define __TM1650_H__

  7. sbit CLK = P3^7;
  8. sbit DIO = P3^6;

  9. void Set1650(uchar add,uchar dat);
  10. uchar Scan_Key(void);

  11. uchar BL = 1;          //亮度等級
  12. uchar CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9顯示代碼
  13.                                 // 0    1    2    3    4    5    6    7    8    9

  14. void Init1650(){
  15.         Set1650(0x48,(BL*16+0x01));//設定亮度,開顯示八段顯示方式,后一個字節中高位用于亮度,低位用于七段或八段顯示方式和開關顯
  16.                                                                 //如:0x71為七級亮度,八段顯示方式,開顯示;0x79為為七級亮度,七段顯示方式,開顯示
  17. }

  18. void Delay_us(uint i){ //us延時
  19.         for(;i>0;i--){
  20.                 _nop_();
  21.                 _nop_();
  22.                 _nop_();
  23.                 _nop_();
  24.                 _nop_();
  25.         }
  26. }

  27. void Start1650(void){//開始信號
  28.         CLK = 1;
  29.         DIO = 1;
  30.         Delay_us(5);
  31.         DIO = 0;
  32. }

  33. void Ask1650(void){ //ACK信號
  34.         uchar timeout = 1;
  35.         CLK = 1;
  36.         Delay_us(5);
  37.         CLK = 0;
  38.         while((DIO)&&(timeout<=100)){
  39.                 timeout++;
  40.         }
  41.         Delay_us(5);
  42.         CLK = 0;
  43. }

  44. void Stop1650(void){ //停止信號
  45.         CLK = 1;
  46.         DIO = 0;
  47.         Delay_us(5);
  48.         DIO = 1;
  49. }

  50. void WrByte1650(uchar oneByte){//寫一個字節高位在前,低位在后
  51.         uchar i;
  52.         CLK = 0;
  53.         Delay_us(1);
  54.         for(i=0;i<8;i++){
  55.                 oneByte = oneByte<<1;
  56.                 DIO = CY;
  57.                 CLK = 0;
  58.                 Delay_us(5);
  59.                 CLK = 1;
  60.                 Delay_us(5);
  61.                 CLK = 0;
  62.         }
  63. }

  64. uchar Scan_Key(void){  // 按鍵掃描
  65.         uchar i;
  66.         uchar rekey;
  67.         Start1650();
  68.         WrByte1650(0x49);//讀按鍵命令
  69.         Ask1650();
  70.         //DIO = 1;
  71.         for(i=0;i<8;i++){
  72.                 CLK = 1;
  73.                 rekey = rekey<<1;
  74.                 if(DIO){
  75.                 rekey++;
  76.                 }
  77.                 Delay_us(5);
  78.                 CLK = 0;
  79.         }
  80.         Ask1650();
  81.         Stop1650();
  82.         return(rekey);
  83. }

  84. void Set1650(uchar add,uchar dat){ //數碼管顯示
  85.                                                                 //寫顯存必須從高地址開始寫
  86.         Start1650();
  87.         WrByte1650(add); //第一個顯存地址
  88.         Ask1650();
  89.         WrByte1650(dat);
  90.         Ask1650();
  91.         Stop1650();
  92. }

  93. #endif
復制代碼




作者: zjbhjy    時間: 2019-9-15 17:19
這個好
作者: zy6666    時間: 2019-12-2 16:09
main函數的while(1)后面有個分號
作者: CC##++    時間: 2019-12-8 09:52
您好,能給一份STC15W404S外圍器件電路圖嗎,我不知道怎么選擇外圍器件
作者: CC##++    時間: 2019-12-8 09:54
您好,能給一份STC15W404S電路圖嗎,郵箱1904382840@qq.com,謝謝
作者: 大雨    時間: 2020-4-18 15:18
正在學習,先謝謝了
作者: 大雨    時間: 2020-4-18 15:20
很好,正在學習
作者: liuhailan5757    時間: 2020-5-28 17:08
一點就亮,感謝樓主,省了我好多時間
作者: hl144    時間: 2020-5-28 18:03
正在學習,先謝謝了
作者: xdb2724678    時間: 2020-6-28 20:24
感謝樓主,感謝2樓,正在學習這個;
作者: xdb2724678    時間: 2020-6-28 21:54
mengsiu 發表于 2018-5-6 10:16
對樓主的程序作了點小修改,實際是方便我自己使用而已,修改內容如下:
  • 簡單封裝了一下,日后直接調 ...

  • 您好,我是剛開始學習單片機,您寫這部分文件,整個定義成頭文件即可,是吧?
    作者: lipengxu    時間: 2020-8-19 10:13
    DIO = CY;沒有理解什么意思,并在其他位置沒有找到CY定義
    作者: 滄興電子    時間: 2021-3-23 15:48
    lipengxu 發表于 2020-8-19 10:13
    DIO = CY;沒有理解什么意思,并在其他位置沒有找到CY定義

    CY在頭文件里。特殊功能寄存器PSW里面的CY進位借位標志位。
    作者: billchun    時間: 2021-3-24 21:34
    受益匪淺
    作者: wb731464015    時間: 2021-7-9 10:27
    ack信號最后一行CLK_L是不是應該改成CLK_H???
    作者: 開心就好hhhh    時間: 2021-7-12 15:04
    wb731464015 發表于 2021-7-9 10:27
    ack信號最后一行CLK_L是不是應該改成CLK_H???

    就是CLK_L吧,看時序圖,CLK最后是拉低的
    作者: lsl331    時間: 2021-8-26 10:28
    mengsiu 發表于 2018-5-6 10:16
    對樓主的程序作了點小修改,實際是方便我自己使用而已,修改內容如下:
  • 簡單封裝了一下,日后直接調 ...

  • 非常感謝
    作者: wkaikai    時間: 2021-10-8 09:31
    大神。用stc 15w408as驅動tm1640怎么寫啊

    作者: 931574590    時間: 2021-10-29 19:52
    mengsiu 發表于 2018-5-6 10:16
    對樓主的程序作了點小修改,實際是方便我自己使用而已,修改內容如下:
  • 簡單封裝了一下,日后直接調 ...

  • 這是真的牛,看了老哥的代碼,井井有條,封裝的還好,只要稍稍閱讀說明書就可以對數碼管進行準確的調用。
    作者: 野生奮斗成功君    時間: 2021-12-16 16:22
    STC15W404S單片機TM1650芯片驅動4位共陰數碼管驅動程序 ,詳細的備注有嗎
    作者: dongdhhong    時間: 2022-1-2 16:52


    TM1650_89s51_test.rar (44.46 KB, 下載次數: 159)

    感謝各位教導,稍微再次修改了一下,做了一個計秒累加的動態掃描顯示,稍微調整可以廣泛使用,以表回饋論壇壇友!
    作者: 最后一個夏天1    時間: 2022-7-13 13:14

    你好,我對這個I2Cask()函數有疑問,tm1650的官方手冊是傳輸完成后的第一個時鐘周期即應答ACK,而該函數進入后,延遲了一個時鐘周期應答。并且在DIO拉低后,clk應該給一個上升沿,而該函數在DIO拉低后沒有產生上升沿。




    屏幕截圖 2022-07-13 130928.png (53.27 KB, 下載次數: 179)

    屏幕截圖 2022-07-13 130928.png

    作者: 盛世游龍    時間: 2023-9-13 11:53
    受益匪淺!謝謝樓主分享!
    作者: joyb    時間: 2023-10-24 10:46
    將“I2C”字眼替換掉,更嚴謹
    作者: lhxtzlhxtz    時間: 2023-12-23 10:36
    joyb 發表于 2023-10-24 10:46
    將“I2C”字眼替換掉,更嚴謹

    不一定用Ⅰ2C的專用管肺腳來驅動的,普通腳就可以驅動了,對吧?
    作者: 354724834    時間: 2024-2-3 11:01
    非常感謝。已經下載。測試很好用
    作者: 節水牛仔有點渴    時間: 2024-2-23 11:34
    滄興電子 發表于 2021-3-23 15:48
    CY在頭文件里。特殊功能寄存器PSW里面的CY進位借位標志位。

    你好,我想請教一下,如果使用的單片機中沒有這個寄存器怎么辦呢?,我想使用
    DIO = (oneByte & 0x80) ? 1 : 0;
    但是在使用中好像不可以...
    作者: 354724834    時間: 2024-2-23 19:50
    BL*16+0x01這句沒看懂
    作者: 354724834    時間: 2024-2-23 19:59
    最后一個夏天1 發表于 2022-7-13 13:14
    你好,我對這個I2Cask()函數有疑問,tm1650的官方手冊是傳輸完成后的第一個時鐘周期即應答ACK,而該函數進 ...

    同問

    作者: hi等你    時間: 2024-2-26 09:05
    剛剛寫出1650的代碼,第9位ack完全可以不予理睬,單片機只要象征性的把時鐘端在8位數據

    傳送完后做一個上升沿再下降的波形就行了




    歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
    主站蜘蛛池模板: 亚洲一区二区欧美 | 日韩免费精品视频 | 中文字幕综合网 | 亚洲成人免费观看 | 日韩免费一区二区三区 | 国产精品一区在线观看 | 婷婷中文网 | 国产黄色免费网站 | 男女交配网站 | 黄色小视频在线免费观看 | 秋霞午夜伦理 | 在线观看黄色小视频 | av超碰在线 | 欧美一二区 | 国产综合久久久 | 亚洲va韩国va欧美va精品 | 日韩视频免费大全中文字幕 | 欧美日韩国 | 国产日产av | 午夜一级视频 | 亚久久 | 亚洲成人日韩 | 亚洲天堂av网| 五月激情综合 | 啪啪免费网站 | 六月激情| 久久夜色精品国产欧美乱极品 | 久久久久久99精品久久久 | 成 人 黄 色 片 在线播放 | 国产精品伦理一区 | 亚洲欧美久久 | 欧美在线免费观看视频 | 成人免费毛片嘿嘿连载视频 | 在线观看日本 | 欧美三级又粗又硬 | 久久都是精品 | 国产亚洲欧美在线 | 久久精品视频网 | 精品一区视频 | 国产精品美女在线观看 | 中文字幕在线一区 |