从单片机基础到程序框架(全集 2019pdf版).pdf - 第600页

DisplayS can(); //数 码管的动 态扫描函数 if(1==vG u8ScanTimer Flag&&vGu1 6ScanTimerC nt>0) //数码 管显示切换时 间的定时器 { vGu16Sca nTimerCnt-- ; } TH0=0xfc ; TL0=0x66 ; } void Syste mInitial( void) { //初始 化上电瞬间数 码管的状态, 关闭显示所 有的数码 …

100%1 / 836
case 2: //显示右起第 2 数码管
Su8GetCode=Cu8DigTable[vGu8Display_Righ_2]; //从编码转换表中提取出来的编码
P0=Su8GetCode; //段码端输出需要显示的编
P1_0=1; //右起 1 位数码管的公共端 com4,“总开关”关闭,输出高电平 1
P1_1=0; //右起 2 位数码管的公共端 com3,“总开关”打开,输出低电平 0
P1_2=1; //右起 3 位数码管的公共端 com2,“总开关”关闭,输出高电平 1
P1_3=1; //右起 4 位数码管的公共端 com1,“总开关”关闭,输出高电平 1
break;
case 3: //显示右起第 3 数码管
Su8GetCode=Cu8DigTable[vGu8Display_Righ_3]; //从编码转换表中提取出来的编码
P0=Su8GetCode; //段码端输出需要显示的编
P1_0=1; //右起 1 位数码管的公共端 com4,“总开关”关闭,输出高电平 1
P1_1=1; //右起 2 位数码管的公共端 com3,“总开关”关闭,输出高电平 1
P1_2=0; //右起 3 位数码管的公共端 com2,“总开关”打开,输出低电平 0
P1_3=1; //右起 4 位数码管的公共端 com1,“总开关”关闭,输出高电平 1
break;
case 4: //显示右起第 4 数码管
Su8GetCode=Cu8DigTable[vGu8Display_Righ_4]; //从编码转换表中提取出来的编码
P0=Su8GetCode; //段码端输出需要显示的编
P1_0=1; //右起 1 位数码管的公共端 com4,“总开关”关闭,输出高电平 1
P1_1=1; //右起 2 位数码管的公共端 com3,“总开关”关闭,输出高电平 1
P1_2=1; //右起 3 位数码管的公共端 com2,“总开关”关闭,输出高电平 1
P1_3=0; //右起 4 位数码管的公共端 com1,“总开关”打开,输出低电平 0
break;
}
Su8ScanStep++;
if(Su8ScanStep>4) //如果扫描步骤大于 4,继续从第 1 步开始扫描
{
Su8ScanStep=1;
}
vGu8ScanTimerFlag=0;
vGu16ScanTimerCnt=SCAN_TIME;
vGu8ScanTimerFlag=1; //启动新一轮的定时器
}
}
void T0_time() interrupt 1
{
DisplayScan(); //数码管的动态扫描函数
if(1==vGu8ScanTimerFlag&&vGu16ScanTimerCnt>0) //数码管显示切换时间的定时器
{
vGu16ScanTimerCnt--;
}
TH0=0xfc;
TL0=0x66;
}
void SystemInitial(void)
{
//初始化上电瞬间数码管的状态,关闭显示所有的数码
P0=0x00;
P1_0=1; //右起第 1 位数码管的公共端 com4,“总开关”关闭,输出低电平 1
P1_1=1; //右起第 2 位数码管的公共端 com3,“总开关”关闭,输出高电平 1
P1_2=1; //右起第 3 位数码管的公共端 com2,“总开关”关闭,输出低电平 1
P1_3=1; //右起第 4 位数码管的公共端 com1,“总开关”关闭,输出高电平 1
TMOD=0x01;
TH0=0xfc;
TL0=0x66;
EA=1;
ET0=1;
TR0=1;
}
void Delay(unsigned long u32DelayTime)
{
for(;u32DelayTime>0;u32DelayTime--);
}
void PeripheralInitial(void)
{
}
第一百一十四节: 动态扫描的数码管显示小数点。
【114.1 动态扫描的数码管显示小数点。
上图 114.1.1 数码管
如上图,小数点的段码 h,对应单片机的 P0.7 口。数码管编码转换表(类似字库)的 11 个以字节为
单位的数据,把它们从十六进制转换成二进制后,可以发现第 7 对应 P0.7 口)都是 0。因此从转换表
里取数据后,得到的数据默认是让数码管的小数点不显示的。如果想显示这个小数点就需要用到“或(|)
语句操作,把第 7 位改为 1。比如,本节程序需要显示“1.234”这个带小数点的数值,代码如下:
#include "REG52.H"
#define SCAN_TIME 1
void T0_time();
void SystemInitial(void) ;
void Delay(unsigned long u32DelayTime) ;
void PeripheralInitial(void) ;
void DisplayScan(void);
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;