加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
TM1637.c 2.09 KB
一键复制 编辑 原始数据 按行查看 历史
nay118 提交于 2022-12-12 20:14 . 初始化工程
#include <intrins.h>
#include <STC8.H>
sbit CLK= P1^3; //定义模拟IIC总线的时钟线
sbit DIO = P1^4; //定义模拟IIC总线的数据线
#define uchar unsigned char
code unsigned char tab[] =
{
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
0x77,/*10 A*/
0x7C,/*11 b*/
0x58,/*12 c*/
0x5E,/*13 d*/
0x79,/*14 E*/
0x71,/*15 F*/
0x76,/*16 H*/
0x38,/*17 L*/
0x54,/*18 n*/
0x73,/*19 P*/
0x3E,/*20 U*/
0x00,/*21 黑屏*/
};
void Delay_us(unsigned int i)
{
for(;i>0;i--)
_nop_();;
}
//IIC开始
void TM1637_start(void)
{
CLK=1;
DIO=1;
Delay_us(2);
DIO=0;
}
//IIC应答
void TM1637_ack(void)
{
uchar i;
CLK=0;
Delay_us(5);
//DIO=1;
while(DIO==1&&(i<250))i++;
CLK=1;
Delay_us(2);
CLK=0;
}
//IIC停止
void TM1637_stop(void)
{
CLK=0;
Delay_us(2);
DIO=0;
Delay_us(2);
CLK=1;
Delay_us(2);
DIO=1;
Delay_us(2);
}
//写数据函数
void TM1637_Write(unsigned char DATA)
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK=0;
if(DATA & 0x01)
DIO=1;
else DIO=0;
Delay_us(3);
DATA=DATA>>1;
CLK=1;
Delay_us(3);
}
//TM1637_ack();
}
//按顺序显示
void TM1637_display(uchar a,uchar b,uchar c,uchar d,uchar h)
{
TM1637_start();
TM1637_Write(0x40);//写数据+自动地址加1+普通模式
TM1637_ack();
TM1637_stop();
TM1637_start();
TM1637_Write(0xc0);//设置显示首地址即第一个LED
TM1637_ack();
TM1637_Write(tab[a]);
TM1637_ack();
TM1637_Write(tab[b]|h<<7);//h为1时显示时钟中间的两点
TM1637_ack();
TM1637_Write(tab[c]);
TM1637_ack();
TM1637_Write(tab[d]);
TM1637_ack();
TM1637_stop();
TM1637_start();
TM1637_Write(0x89);//开显示,2/16亮度
TM1637_ack();
TM1637_stop();
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化