自学单片机,买了一套开发板,进入学习的第 3 阶段:8 位共阴极数码管。刚刚触摸了锁存器的用法,写在这儿用于备份……
程序便是运用锁存器,动态显现数字,使 8 位数码管看起来一起显现不同的字样……
附上源码:(初出茅庐,不免有写的欠好的当地,仅作备份之用,欢迎点拨,喷子退散……)
#include
#defineDATA P1 // 界说 P1 为数据输入
sbitSEG = P0^0;// 界说 段锁存器
sbitBIT = P0^2;// 界说 位锁存器
unsigned char codeSEG_CODE[ ] = {0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f};// 段码 1-8
unsigned char codeBIT_CODE[ ] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
// 位码 从 0 位至 7 位
voidDelay(unsigned intt);
voidmain (void)
{
unsigned chari = 0;
while(1) {
SEG = 1; // 关段锁存
DATA = SEG_CODE[i];// 送段码
SEG = 0;// 开段锁存,指定了某位详细显现什么数字
BIT = 1;// 关位锁存
DATA = BIT_CODE[i];// 送位码
BIT = 0;// 开位锁存,指定了哪一位显现
Delay(200); // 经测验:200 为佳,过小呈现重影,过大呈现闪耀
// 20 重影,300 数字颤动,2000 扫描闪耀
i++;
if(i==8) i = 0;// 循环显现
}
}
voidDelay(unsigned intt)
{
while(t–);
}
弥补一个技巧:
忽然某一位想显现小数点了,怎么办?
假设你正在运用temp[i]代表某一个显现字符,忽然想显现小数点,能够运用temp[i] | 0x80,经过“或”运算完成加上小数点……