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

第一百一十四节: 动态扫描的数码管显示小数点。 【114.1 动态扫描的数码管显示小数点。 】 上图 11 4.1.1 数码管 如上图,小 数点的段码 是 h,对 应单片机的 P0 .7 口。数码管 编码转换表 (类似字库 )的 11 个以 字节为 单位的数据, 把它们从十六进制 转换成二进 制后, 可以发现第 7 位 ( 对应 P0.7 口) 都是 0。 因此 , 从转换表 里取数据后, 得到 的数据默认 是让数码管的 小数点不显 示…

100%1 / 836
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;
//转换表,里面的 11 个数据,转换成二进制后,第 7 位数据都是 0 默认不显示小数点
code unsigned char Cu8DigTable[]=
{
0x3f, //0 序号 0
0x06, //1 序号 1
0x5b, //2 序号 2
0x4f, //3 序号 3
0x66, //4 序号 4
0x6d, //5 序号 5
0x7d, //6 序号 6
0x07, //7 序号 7
0x7f, //8 序号 8
0x6f, //9 序号 9
0x00, //不显 序号 10
};
volatile unsigned char vGu8ScanTimerFlag=0;
volatile unsigned int vGu16ScanTimerCnt=0;
volatile unsigned char vGu8Display_Righ_4=1; //右起第 4 位数码管显示的变量。这里显示“1”
volatile unsigned char vGu8Display_Righ_3=2; //右起第 3 位数码管显示的变量。这里显示“2”
volatile unsigned char vGu8Display_Righ_2=3; //右起第 2 位数码管显示的变量。这里显示“3”
volatile unsigned char vGu8Display_Righ_1=4; //右起第 1 位数码管显示的变量。这里显示“4”
/* 注释一:
* vGu8Display_Righ_Dot_4,vGu8Display_Righ_Dot_3,vGu8Display_Righ_Dot_2,
* vGu8Display_Righ_Dot_1,这四个全局变量用来传递每位数码管是否需要显示它的小数点,如果是 1
* 代表需要显示其小数点,如果是 0 则不显示小数点。这四个变量作为对上面应用层调用的接口变量。
*/
volatile unsigned char vGu8Display_Righ_Dot_4=1; //右起第 4 位数码管的小数点。1 代表打开显示。
volatile unsigned char vGu8Display_Righ_Dot_3=0; //右起第 3 位数码管的小数点。0 代表关闭显示。
volatile unsigned char vGu8Display_Righ_Dot_2=0; //右起第 2 位数码管的小数点。0 代表关闭显示。
volatile unsigned char vGu8Display_Righ_Dot_1=0; //右起第 1 位数码管的小数点。0 代表关闭显示。
void main()
{
SystemInitial();
Delay(10000);
PeripheralInitial();
while(1)
{
}