您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > TM1637四段数码管模块驱动(.c和.h)
1.注意事项①写地址可以自动加一(0x40),写指定(0x44)②0xc0-0xc3,分别是4段数码管的地址③0x8a开显示,0x80关显示④通信方式IIC,但写数据式低位在前,别反了。TM1637.C#includeTM1637.h#includedelay.h/*********************************************************************************************LCDWRITE模式连续写入数据**************************************************************************************************/unsignedcharconstNum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x40};//0123456789A-/**********************************************************IIC_delay*******************************************************/voidIIC_Init(){PD_DDR|=0x0C;PD_CR1=0xFF;PD_CR2=0x00;PD_ODR|=0x0C;SCL_H;SDA_H;}voidIIC_delay(void){unsignedchari;for(i=0;i20;i++)asm(nop);}/**********************************************************启动IIC*********************************************************/voidstart_IIC(void){SCL_H;//给芯片发送开始信号SDA_H;IIC_delay();SDA_L;IIC_delay();SCL_L;//开始信号传送完IIC_delay();}/********************************************************停止IIC*******************************************************/voidstop_IIC(void){SCL_L;IIC_delay();SDA_L;IIC_delay();SCL_H;IIC_delay();SDA_H;}voidack_IIC(){SCL_L;SDA_L;asm(nop);asm(nop);asm(nop);//while(SDA_R);SCL_H;asm(nop);asm(nop);asm(nop);SCL_L;}/********************************************************写一个字节数据*******************************************************/voidWriteByte(unsignedcharWriteData){unsignedchari;SCL_L;for(i=0;i8;i++){if(WriteData&0x01)SDA_H;elseSDA_L;WriteData=1;IIC_delay();SCL_H;IIC_delay();SCL_L;IIC_delay();}ack_IIC();//判断芯片发过来的ACK应答信号}voidwrite_LEDSROM(unsignedcharaddr,unsignedcharWData){start_IIC();//调用开始信号WriteByte(addr);//写起始地址命令(0C0H),地址00H单元。WriteByte(WData);//给显示寄存器写显示数据,值可根据实参改变stop_IIC();//调用结束信号,一个字节命令发送完毕,可以发送下一个命令}voidClear_Led(void){SDA_H;SCL_H;start_IIC();//调用开始信号WriteByte(0x44);//写命令40H(数据设置),stop_IIC();//调用结束信号,一个字节命令发送完毕,可以发送下一个命令write_LEDSROM(0xC0,0x40);//最高位write_LEDSROM(0xC1,0x40);//中间位write_LEDSROM(0xC2,0x40);//最低位write_LEDSROM(0xC3,0x40);//最低位IIC_delay();start_IIC();//调用开始信号WriteByte(0x8a);//送开屏命令,(8BH),亮度可以根据低三位调节。;//显示亮度0x80,关显示stop_IIC();//调用结束信号,一个字节命令发送完毕,可以发送下一个命令}voidClose_Led(void){SDA_H;SCL_H;start_IIC();//调用开始信号WriteByte(0x80);//送开屏命令,(8BH),亮度可以根据低三位调节。;//显示亮度0x80,关显示stop_IIC();//调用结束信号,一个字节命令发送完毕,可以发送下一个命令}voidShow_Led(intT){u8Num0,Num1,Num2,Num3;unsignedlongH;//T=580;H=T;H=98*H*H/2;//Num0=(u8)(T/1000);//Num1=(u8)(T%1000/100);//Num2=(u8)(T%100/10);//Num3=(u8)(T%10);Num0=(u8)(H/10000000);Num1=(u8)(H%1000000/100000);Num2=(u8)(H%100000/10000);Num3=(u8)(H%10000/1000);SDA_H;SCL_H;start_IIC();//调用开始信号WriteByte(0x44);//写命令40H(数据设置),stop_IIC();//调用结束信号,一个字节命令发送完毕,可以发送下一个命令write_LEDSROM(0xC0,Num[Num0]);//最高位write_LEDSROM(0xC1,Num[Num1]);//中间位write_LEDSROM(0xC2,Num[Num2]);//最低位write_LEDSROM(0xC3,Num[Num3]);//最低位IIC_delay();start_IIC();//调用开始信号WriteByte(0x8a);//送开屏命令,(8BH),亮度可以根据低三位调节。;//显示亮度stop_IIC();//调用结束信号,一个字节命令发送完毕,可以发送下一个命令}voidShow_Led_One(u8Num0,u8Num1,u8Num2,u8Num3){SDA_H;SCL_H;start_IIC();//调用开始信号WriteByte(0x44);//写命令40H(数据设置),stop_IIC();//调用结束信号,一个字节命令发送完毕,可以发送下一个命令write_LEDSROM(0xC0,Num[Num0]);//最高位write_LEDSROM(0xC1,Num[Num1]);//中间位write_LEDSROM(0xC2,Num[Num2]);//最低位write_LEDSROM(0xC3,Num[Num3]);//最低位IIC_delay();start_IIC();//调用开始信号WriteByte(0x8a);//送开屏命令,(8BH),亮度可以根据低三位调节。;//显示亮度stop_IIC();//调用结束信号,一个字节命令发送完毕,可以发送下一个命令}TM1637.H#ifndef_TM1637_h_#define_TM1637_h_#includeiostm8s103f3.h#defineu8unsignedchar#defineu16unsignedint//SCL-PD3#defineSCL_H(PD_ODR|=(13))#defineSCL_L(PD_ODR&=~(13))//SDA-PD2#defineSDA_H(PD_ODR|=(12))#defineSDA_L(PD_ODR&=~(12))#defineSDA_RPD_IDR_IDR2//函数声明voidIIC_Init(void);//IIC初始化voidClear_Led(void);voidShow_Led(intT);voidShow_Led_One(u8Num0,u8Num1,u8Num2,u8Num3);voidClose_Led(void);#endif
本文标题:TM1637四段数码管模块驱动(.c和.h)
链接地址:https://www.777doc.com/doc-7231148 .html