TM1637数码管显示STC51单片机驱动程序

/*
Coder : Farman

Date  : 2018-01-02

参考了厂家的TM1637数据手册,在此表示感谢。

*/


#include   //包含52单片机头文件
#include "Delay.h"







sbit I2C_SCL = P2^1;   //定义模拟IIC总线的时钟线
sbit I2C_SDA = P2^0;   //定义模拟IIC总线的数据线


#define TM1637_BRIGHTNESS 7 // 0 - 7





void I2C_delay()
{
    nop_();
}


void I2C_start()
{   
    I2C_SCL = 1; 
    I2C_SDA = 1;


    I2C_delay();


    I2C_SDA = 0; // 时钟线设置为常态,低电平。
}


/*
I2C 总线写1个字节


不包含应答位的检测
*/
void I2C_write_byte(char byte_to_write)
{
    unsigned char i;


    for(i=0; i<8; i++)
    {
        I2C_SCL = 0;

        I2C_SDA = byte_to_write & 0x01;
        I2C_delay();

        I2C_SCL = 1;
        I2C_delay();


        I2C_SCL = 0;
        I2C_delay();


        byte_to_write >>= 1;
    }

    return; 
}


void I2C_check_ack()
{
    // I2C 检查应答位,实际未检查,只发送了应答位时钟,认为TM1637工作正常


    I2C_SCL = 0;
    I2C_delay();//在第八个时钟下降沿之后延时5us,开始判断ACK 信号

    while(I2C_SDA)
    {
        ;
    }


    I2C_SCL = 1;
    I2C_delay();


    I2C_SCL=0;
}


void I2C_send_ack()
{
    I2C_SDA = 0;
    I2C_delay();


    I2C_SCL = 1;
    I2C_delay();


    I2C_SCL = 0;
    I2C_delay();


    I2C_SDA = 1;
    I2C_delay();
}


void I2C_stop()
{
    I2C_SCL = 0;
    I2C_delay();


    I2C_SDA = 0;
    I2C_delay(); 


    I2C_SCL = 1;
    I2C_delay();


    I2C_SDA = 1;
}


///
//
// TM1637模块操作函数
//
//


void TM1637_write_command_byte(unsigned char command)
{
    I2C_start();
    I2C_write_byte(command);
    I2C_check_ack();
    I2C_stop();
}




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




void TM1637_write_display_bytes(unsigned char first_addr, 
                                unsigned char bytes_to_write[],
                                unsigned char num_of_bytes)
{
    unsigned char i;


    I2C_start();
    I2C_write_byte(0x40);
    I2C_check_ack();
    I2C_stop();


    I2C_start();
    I2C_write_byte(0xC0 + first_addr);
    I2C_check_ack();


    for(i=0; i

 

你可能感兴趣的:(硬件,显示)