单片机解密单片机TM1637驱动数码管程序
单片机解密TM1637.h程序文件:
- #ifndef __TM1637_H__
- #define __TM1637_H__
- #include <STC8H.H>
- //定义端口
- sbit clk = P1^0;
- sbit dio = P3^7;
- extern unsigned char xdata smg_hc[4]; //数码管缓存
- extern unsigned char shu;
- void SmgDisplay(unsigned char *p,char L); //指定数组显示。*p:数码管段码 L:0-9亮度
- void Smg_ctrl_dot(bit dot); //控制小数点亮灭。0:小数点熄灭,1:小数点亮起
- void Smg_ctrl_bit(unsigned char i,unsigned char dat); //控制单独数码管。i:要控制的数码管位 dat:要写入的数据:0~9; 10为熄灭该数码管
- void Smg_ctrl_lum(unsigned char R); //亮度控制。亮度等级:1~8;0为熄灭
- void Smg_ctrl_all(unsigned char a,unsigned char b,unsigned char c,unsigned char d,bit t,char R);
- //数码管,a,b,c,d为4位显示数字,t:小数点0|1,R亮度:0~8
- void Fnshu(unsigned int a); //指定4位数拆份并显示
- void ZUDisplay(unsigned char *p);
- #endif
TM1637.c程序:
- #include <TM1637.H>
- #include <intrins.h>
- static unsigned char data t_display[]={ //标准字库
- // 0 1 2 3 4 5 6 7 8 9 black
- 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
- unsigned char xdata smg_hc[4]; //数码管缓存
- unsigned char luminance=0; //亮度存储
- unsigned char shu;
- bit dot_f=0; //小数点标志位
- void Delay1us() //@24.000MHz
- {
- unsigned long i;
- _nop_();
- _nop_();
- _nop_();
- i = 4UL;
- while (i) i--;
- }
- /*******************************************************************************
- * 函 数 名: Delay_us
- * 函数功能: 延时接口
- * 输 入: 微秒延时
- * 输 出: 无
- *******************************************************************************/
- void Delay_us(unsigned int i)
- {
- for(;i>0;i--)
- { //延时接口
- Delay1us();
- }
- }
- /*******************************************************************************
- * 函 数 名: TM1637_Start
- * 函数功能: 1637起始信号
- * 输 入: 无
- * 输 出: 无
- *******************************************************************************/
- void TM1637_Start(void)
- {
- clk = 1;
- dio = 1;
- Delay_us(2);
- dio = 0;
- }
- /*******************************************************************************
- * 函 数 名: TM1637_ask
- * 函数功能: 1637 应答信号
- * 输 入: 无
- * 输 出: 无
- *******************************************************************************/
- void TM1637_ask(void)
- {
- clk = 0;
- Delay_us(5); //在第八个时钟下降沿之后延时 5us,开始判断 ACK 信号
- while(dio);
- clk = 1;
- Delay_us(2);
- clk=0;
- }
- /*******************************************************************************
- * 函 数 名: TM1637_Stop
- * 函数功能: 1637 停止信号
- * 输 入: 无
- * 输 出: 无
- *******************************************************************************/
- void TM1637_Stop(void)

芯片解密