找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5416|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:305552 發(fā)表于 2018-4-10 22:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#include<intrins.h>
sbit SCL=P1^2;
sbit SDA=P1^3;
unsigned char t,shi,ge,bai,dadt;
unsigned char code xsbcdbuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
/*************************************************************************

********************
LCD WRITE 模式 連續(xù)寫入數(shù)據(jù)
*************************************************************************/  
/*********************************************************

*IIC_delay

*******************************************************/

void init()
{
    TMOD=0X01;
    TH0=(65535-50000)/256;
    TL0=(65535-50000)%256;
    ET0=1;
    EA=1;
    TR0=1;
}

void IIC_delay(void)
{
    unsigned char i;
    for(i=0;i<20;i++) _nop_();
}

/*********************************************************
*
啟動IIC
*********************************************************/

void start_IIC(void)

{
    SCL=1; //給芯片發(fā)送開始信號
    SDA=1;
    IIC_delay();
    SDA=0;
    IIC_delay();
    SCL=0; //開始信號傳送完
    IIC_delay();
}

/*******************************************************
*
停止IIC
*******************************************************/
void stop_IIC(void)
{
    SCL=0;
    IIC_delay();
    SDA=0;
    IIC_delay();
    SCL=1;
    IIC_delay();
    SDA=1;
}

void ack_IIC()
{
    SCL=0;
    _nop_();_nop_();_nop_();
    while(SDA);
    SCL=1;
    _nop_();_nop_();_nop_();
    SCL=0;
}

/*******************************************************
*
寫一個字節(jié)數(shù)據(jù)
*******************************************************/

void WriteByte(unsigned char WriteData)
{
    unsigned char i;
    for(i=0;i<8;i++)//開始傳送8位數(shù)據(jù),每循環(huán)一次傳送一位數(shù)據(jù)
    {
        SCL=0;
        IIC_delay();
        WriteData=WriteData>>1;
        SDA=CY;
        IIC_delay();
        SCL=1;
        IIC_delay();
    }
//8位數(shù)據(jù)傳送完
    ack_IIC(); //判斷芯片發(fā)過來的ACK應(yīng)答信號
}
/*******************************************************

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

void write_LEDSROM(unsigned char addr,unsigned char WData)
{
    start_IIC(); //調(diào)用開始信號
    WriteByte(addr); //寫起始地址命令(0C0H),地址00H單元。
    WriteByte(WData);//給顯示寄存器寫顯示數(shù)據(jù),值可根據(jù)實參改變
    stop_IIC(); //調(diào)用結(jié)束信號,一個字節(jié)命令發(fā)送完畢,可以發(fā)送下一個命令
}
/************************************************
/************************************************
*
分開寫數(shù)據(jù)到LED
**************************************************/
void xsled(void)
{
    SDA=1;
    SCL=1;
    start_IIC(); //調(diào)用開始信號
    WriteByte(0x44);//寫命令40H(數(shù)據(jù)設(shè)置)
    stop_IIC(); //調(diào)用結(jié)束信號,一個字節(jié)命令發(fā)送完畢,可以發(fā)送下一個命令
    write_LEDSROM(0xC0,0x00); //第一個數(shù)碼管
    write_LEDSROM(0xC1,xsbcdbuf[bai]);  //第二個數(shù)碼管
    write_LEDSROM(0xC2,xsbcdbuf[shi]); //第三個數(shù)碼管
    write_LEDSROM(0xC3,xsbcdbuf[ge]);//第四個數(shù)碼管
    IIC_delay();
    start_IIC(); //調(diào)用開始信號
    WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據(jù)低三位調(diào)節(jié)。//顯示亮度
    stop_IIC(); //調(diào)用結(jié)束信號,一個字節(jié)命令發(fā)送完畢,可以發(fā)送下一個命令
}

void jisuan()
{     
    bai=dadt/100;
    shi=dadt/10%10;
    ge=dadt%10;
}

void main()
{
    //P1=0xff;
    init();
     while(1)
    {
        jisuan();
        xsled();
        if(t==20)
        {
            t=0;
            dadt++;
            if(dadt==1000)
            {
                dadt=0;
            }
        }
    }
}

void T0_time() interrupt 1
{
    TH0=(65535-50000)/256;
    TL0=(65535-50000)%256;
    t++;
}  

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

使用道具 舉報

沙發(fā)
ID:61349 發(fā)表于 2018-7-28 03:22 | 只看該作者
程序測試順利通過,采用的寫 SRAM 數(shù)據(jù)固定地址模式
回復(fù)

使用道具 舉報

板凳
ID:91580 發(fā)表于 2018-9-17 14:40 | 只看該作者
我也測試通過,感謝樓主!
回復(fù)

使用道具 舉報

地板
ID:404720 發(fā)表于 2018-11-24 22:11 | 只看該作者
請問為什么只能到255好像,應(yīng)該改哪里才能到9999
回復(fù)

使用道具 舉報

5#
ID:358930 發(fā)表于 2018-11-25 03:15 來自手機 | 只看該作者
zhengaohui 發(fā)表于 2018-11-24 22:11
請問為什么只能到255好像,應(yīng)該改哪里才能到9999

unsigned uint t,shi,ge,bai,dadt;定意就是最大255這樣改下就大了,大約65536能夠吧。不能大,慢慢思考吧。
回復(fù)

使用道具 舉報

6#
ID:358930 發(fā)表于 2018-11-25 08:58 | 只看該作者
其實我開始的時候?qū)W單片也是這樣,不想去看那些不相干的定義,總想著主程序編譯通過才是王道,其實真正能寫的人不多,也沒精力每個器件都自己寫驅(qū)動,借下別人的也沒啥問題,但問題來了,讀懂別人的程序成了最大的問題,所以閱讀理解才是學(xué)習(xí)路上成功的天梯,直通創(chuàng)造的核心。古人云:熟讀唐詩三百首,(不說啦)。寫程序還是一件嚴(yán)謹(jǐn)?shù)氖聠。?dāng)我學(xué)會說話,才可能歌唱,當(dāng)我讀懂別人,才可能創(chuàng)造超越…………
回復(fù)

使用道具 舉報

7#
ID:404720 發(fā)表于 2018-11-25 10:14 | 只看該作者
冰冰潔潔 發(fā)表于 2018-11-25 08:58
其實我開始的時候?qū)W單片也是這樣,不想去看那些不相干的定義,總想著主程序編譯通過才是王道,其實真正能寫 ...

很有見解!同
回復(fù)

使用道具 舉報

8#
ID:16255 發(fā)表于 2018-11-25 14:13 | 只看該作者
冰冰潔潔 發(fā)表于 2018-11-25 08:58
其實我開始的時候?qū)W單片也是這樣,不想去看那些不相干的定義,總想著主程序編譯通過才是王道,其實真正能寫 ...

受教了,謝謝
回復(fù)

使用道具 舉報

9#
ID:424598 發(fā)表于 2018-11-26 22:25 來自手機 | 只看該作者
代碼不錯?茨懿荒芎臀业募t外定時器結(jié)合
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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