好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

TM1637驱动数码管.doc

5页
  • 卖家[上传人]:枫**
  • 文档编号:472117304
  • 上传时间:2023-01-04
  • 文档格式:DOC
  • 文档大小:24.50KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 精品文档,仅供学习与交流,如有侵权请联系网站删除TM1637是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口,数据锁存器,LED高压驱动,键盘扫描等电路采用功率CMOS工艺,显示模式(8段×6位),支持共阳数码管输出,键扫描(8×2bit),增强型抗干扰按键识别电路,辉度调节电路(占空比8级可调),两线串行接口(CLK,DIO),振荡方式:内置RC振荡(450Khz+-5%),内置上电复位电路,内置自动消隐电路引脚功能:当传输数据时,当SCL高电平时,DIO由高变低则代表开始信号,当SCL高电平时,DIO由低变高则代表停止信号,只有当SCL低电平时DIO上的数据才可以发生改变,在SCL高电平时DIO上的数据要保持不变,此时数据发送出去,当正确传输8位数据后TM1637会第九个时钟在DIO管脚上给出一个ACK信号,把DIO拉低传输时序类似于I2C通信传输数据是低位在前高位在后传输过程:下面仅是数码管驱动程序:(注有待改进)驱动的下面这种数码管,普通也行,只是看不到1s的闪烁效果 **** Describe: TM1673控制芯片,可以设置时间的倒计时(定时不准,可以自己校准),四个数码管0xc0,0xc1,0xc2,0xc3 **** Time: 2015.05.14 **** Author: zys#include #includesbit CLK = P0^0; //时钟信号sbit DIO = P0^1; //数据/地址数据 //共阴极数码管unsigned char code SEGData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//1-9unsigned char code SEGDataDp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //有小数点只用于地址0xc1unsigned char dpFlag = 0; //控制第二个数码管的dp的显示void TM1637_start( void );void TM1637_stop( void );void TM1637_write1Bit(unsigned char mBit);void TM1637_write1Byte(unsigned char mByte);void TM1637_writeCammand(unsigned char mData);void TM1637_writeData(unsigned char addr, unsigned char mData);void time_set(char hour, char min);void time_judge( void );void time_display( void );void timer0_init( void );void delay_140us( void );void delay_1ms(unsigned int i);unsigned int countTime = 0;unsigned char time, sec;struct { char shi; char ge;}Hour;struct { char shi; char ge;}Min;***** 主函数void main( void ) timer0_init(); time_set(5, 0); //设置5小时倒计时 while(1) time_display(); //显示时间 if(countTime <= 10) dpFlag = 0; else if(countTime <= 20) dpFlag = 1; else countTime = 0; time_judge(); * 名称 : void time_set(char hour, char min)* 功能 : 设置时间* 输入 : char hour, char min* 输出 : 无void time_set(char hour, char min) if((hour < 0) || (min<0)) hour = 0; min = 0; Hour.shi = hour/10; Hour.ge = hour%10; Min.shi = min/10; Min.ge = min%10; * 名称 : time_judge( void )* 功能 : 判断时间变化* 输入 : void* 输出 : 无void time_judge( void ) if(++sec == 60) //60秒 sec = 0; if((Hour.shi || Hour.ge || Min.shi || Min.ge) && (--Min.ge <= -1)) Min.ge = 9; if((Hour.shi) ||(Hour.ge) && (--Min.shi <= -1)) Min.shi = 5; if(Hour.shi && (--Hour.ge <= -1)) Hour.ge = 9; if(--Hour.shi <= -1) Hour.shi = 0; else if((!Hour.shi) && (--Hour.ge <= -1)) Hour.ge = 0; else if((!Hour.shi) && (!Hour.ge) && (--Min.shi <= -1)) Min.shi = 0; else if(((!Hour.shi) && (!Hour.ge) && (!Min.shi) ) && (Min.ge <= -1)) Min.ge = 0;* 名称 : void time_display( void )* 功能 : 显示时间* 输入 : void* 输出 : 无void time_display( void ) TM1637_writeCammand(0x44); TM1637_writeData(0xc0, SEGData[Hour.shi]); if(dpFlag) TM1637_writeData(0xc1, SEGDataDp[Hour.ge]); //小数点标志为1则用小数点那个数组 else TM1637_writeData(0xc1, SEGData[Hour.ge]); TM1637_writeData(0xc2, SEGData[Min.shi]); TM1637_writeData(0xc3, SEGData[Min.ge]); TM1637_writeCammand(0x8a); * 名称 : void TM1637_start( void )* 功能 : start信号* 输入 : void* 输出 : 无void TM1637_start( void ) CLK = 1; DIO = 1; delay_140us(); DIO = 0; delay_140us(); CLK = 0; delay_140us();* 名称 : void TM1637_stop( void )* 功能 : stop信号* 输入 : void* 输出 : 无void TM1637_stop( void ) CLK = 0; delay_140us(); DIO = 0; delay_140us(); CLK = 1; delay_140us(); DIO = 1; delay_140us();* 名称 : void TM1637_write1Bit(unsigned char mBit )* 功能 : 写1bit* 输入 : unsigned char mBit* 输出 : 无void TM1637_write1Bit(unsigned char mBit ) CLK = 0; delay_140us(); if(mBit) DIO = 1; else DIO = 0; delay_140us(); CLK = 1; delay_140us();* 名称 : void TM1637_write1Byte(unsigned char mByte)* 功能 : 写1byte* 输入 : unsigned char mByte* 输出 : 无void TM1637_write1Byte(unsigned char mByte) char loop = 0; for(loop = 0; loop < 8; loop++) TM1637_write1Bit((mByte>>loop)&0x01); //取得最低位 CLK = 0; delay_140us(); DIO = 1; delay_140us(); CLK = 1; delay_140us(); while(DIO == 1); //获得应答位 * 名称 : void TM1637_writeCammand(unsigned char mData)* 功能 : 写指令1byte* 输入 : unsigned char mData* 输出 : 无void TM1637_writeCammand(unsigned char mData) TM1637_start(); TM1637_write1Byte(mData); //数据 TM1637_stop(); * 名称 : void TM1637_writeData(unsigned char addr, unsigned char mData)* 功能 : 固定地址写数据1byte* 输入 : unsigned char addr, unsigned char mData* 输出 : 无void TM1637_writeData(unsigned char addr, unsigned char mData) TM1637_start(); TM1637_write1Byte(addr); //地址 TM1637_write1Byte(mData); //数据 TM1637_stop(); * 名称 : void timer0_init()* 功能 : 定时50ms,实际运行中由于指令运行造成的延时,实际时间肯定大于50ms* 输入 : 无* 输出 : 无void timer0_init( void ) TMOD=0X01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; ET0=1; EA=1; TR0=1; * 名称 : * 功能 : 定时50ms,实际运行中由于指令运行造成的延时,实际时间肯定大于50ms* 输入 : 无* 输出 : 无void timer0_isr() int。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.