数码管的静态显示与动态显示
学习数码管的静态与动态显示,首先要清楚,同一个时刻,单片机只能使能一个数码管。
动态显示:轮流点亮数码管,利用人眼的视觉暂留现象,造成多个数码管被点亮的视觉体验。
静态显示:可理解为非动态显示,即不会轮番点亮数码管。在多个数码管的显示中,静态显示的意义不大。
记住:100Hz无闪烁!!!
只要刷新频率大于100Hz,即刷新时间小于10ms,就可以做到无闪烁,这也是动态扫描的硬性指标。
静态显示的演示代码:
#include
//数码管静态显示
unsigned char code LedChar[10]={//数码管显示的数字0~9
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char cnt = 0;
unsigned char sec = 0;
***it DigitalTube = P1^0;;
void main()
{
//点亮数码管
DigitalTube = 0;
//设置定时器
TMOD = 0X01;
TH0 = 0XB8;
TL0 = 0X00;
TR0 = 1;
while(1)
{
P0 = LedChar[sec];
if(TF0 == 1)
{
TF0 = 0;
TH0 = 0XB8;
TL0 = 0X00;
cnt++;
if(cnt>=50)
{
cnt = 0;
sec++;
if(sec>=10)
{
sec = 0;
}
}
}
}
}
动态显示的演示代码
#include
//数码管动态显示
unsigned char code LedChar[10]={//数码管显示的数字0~9
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char flag ;
***it DigitalTube1 = P1^0;
***it DigitalTube2 = P1^1;
void main()
{
TMOD = 0X01;
TH0 = 0Xe7b8;
TL0 = 0X0000;
TR0 = 1;
flag = 0;
while(1)
{
if(flag == 0)
{
DigitalTube1 = 0;
DigitalTube2 = 1;
P0 = LedChar[1];
}
else if(flag == 1)
{
DigitalTube1 = 1;
DigitalTube2 = 0;
P0 = LedChar[2];
}
if(TF0 == 1)
{
TF0 = 0;
TH0 = 0Xe7b8;
TL0 = 0X0000;
flag = !flag;
}
}
}
数码管的静态显示与动态显示
学习数码管的静态与动态显示,首先要清楚,同一个时刻,单片机只能使能一个数码管。
动态显示:轮流点亮数码管,利用人眼的视觉暂留现象,造成多个数码管被点亮的视觉体验。
静态显示:可理解为非动态显示,即不会轮番点亮数码管。在多个数码管的显示中,静态显示的意义不大。
记住:100Hz无闪烁!!!
只要刷新频率大于100Hz,即刷新时间小于10ms,就可以做到无闪烁,这也是动态扫描的硬性指标。
静态显示的演示代码:
#include
//数码管静态显示
unsigned char code LedChar[10]={//数码管显示的数字0~9
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char cnt = 0;
unsigned char sec = 0;
***it DigitalTube = P1^0;;
void main()
{
//点亮数码管
DigitalTube = 0;
//设置定时器
TMOD = 0X01;
TH0 = 0XB8;
TL0 = 0X00;
TR0 = 1;
while(1)
{
P0 = LedChar[sec];
if(TF0 == 1)
{
TF0 = 0;
TH0 = 0XB8;
TL0 = 0X00;
cnt++;
if(cnt>=50)
{
cnt = 0;
sec++;
if(sec>=10)
{
sec = 0;
}
}
}
}
}
动态显示的演示代码
#include
//数码管动态显示
unsigned char code LedChar[10]={//数码管显示的数字0~9
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char flag ;
***it DigitalTube1 = P1^0;
***it DigitalTube2 = P1^1;
void main()
{
TMOD = 0X01;
TH0 = 0Xe7b8;
TL0 = 0X0000;
TR0 = 1;
flag = 0;
while(1)
{
if(flag == 0)
{
DigitalTube1 = 0;
DigitalTube2 = 1;
P0 = LedChar[1];
}
else if(flag == 1)
{
DigitalTube1 = 1;
DigitalTube2 = 0;
P0 = LedChar[2];
}
if(TF0 == 1)
{
TF0 = 0;
TH0 = 0Xe7b8;
TL0 = 0X0000;
flag = !flag;
}
}
}
举报