解决按键控制数码管带来闪灭显示问题的项目工程-初级版
/*****本程序分两个程序。一个是程序一,按键控制数码管带来闪灭显示问题的程序。
另一个是程序二,解决按键控制数码管带来闪灭显示问题的程序。通过利用数码
管显示函数代替按键扫描函数内的按键延时,以及在按键扫描函数内按键松手时,
再次调用数码管显示函数。提醒:先试程序一,再试程序二,之后两者对比,找
出不同点,取最适合的。
*****/
//程序一:按键控制数码管带来闪灭显示问题的程序
//#include<reg51.h>
//#define uchar unsigned char
//#define uint unsigned int
//sbit add=P3^0;
//sbit dec=P3^4;
//uchar lingweiflag;
//uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9。
//uint num;
//uint qian,bai,shi,ge;//定义拆字变量
///**ms级延时子程序**/
//void delay(uint x)
//{
// uint i,j;
// for(i=0;i<x;i++)
// for(j=0;j<110;j++);
//}
//void display()
//{
// qian=num/1000;//取得千位数字
// bai=num%1000/100;//取得百位数字
// shi=num%100/10;//取得十位数字
// ge=num%10;//取得个位数字
//
// P2=0xfe;//数码管千位显示位
// P1=table;//数码管千位数值显示
// delay(2);//延时
//
// P2=0xfd;//数码管百位显示位
// P1=table;//数码管百位数值显示
// delay(2);//延时
//
// P2=0xfb;//数码管十位显示位
// P1=table;//数码管十位数值显示
// delay(2);//延时
//
// P2=0xf7;//数码管个位显示位
// P1=table;//数码管个位数值显示
// delay(2);//延时
// }
//void keyscan()
//{
// if(add==0)
// {
// delay(5);
// if(add==0)
//{
// num++;
// while(!add);
// lingweiflag=0;
// }
// }
// if(dec==0&&lingweiflag==0)
// {
// delay(5);
// if(dec==0)
//{
// num--;
// while(!dec);
// }
// }
// if(num>9999)
// {
// num=0;
// }
// if(num==0)
// {
// num=0;
// lingweiflag=1;
// }
// }
//void main()
//{
// while(1)
// {
// display();
// keyscan();
// }
//} //程序二:解决按键控制数码管带来闪灭显示问题的程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit add=P3^0;
sbit dec=P3^4;
uchar lingweiflag;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9
uint num;
uint qian,bai,shi,ge;//定义拆字变量。
/**ms级延时子程序**/
void delay(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++);
}
void display()
{
qian=num/1000;//取得千位数字
bai=num%1000/100;//取得百位数字
shi=num%100/10;//取得十位数字
ge=num%10;//取得个位数字
P2=0xfe;//数码管千位显示位
P1=table;//数码管千位数值显示
delay(2);//延时
P2=0xfd;//数码管百位显示位
P1=table;//数码管百位数值显示
delay(2);//延时
P2=0xfb;//数码管十位显示位
P1=table;//数码管十位数值显示
delay(2);//延时
P2=0xf7;//数码管个位显示位
P1=table;//数码管个位数值显示
delay(2);//延时
}
void keyscan()
{
if(add==0)
{
//delay(5);
display();
if(add==0)
{
num++;
// while(!add);
while(!add)
{
display();
}
lingweiflag=0;
}
}
if(dec==0&&lingweiflag==0)
{
//delay(5);
display();
if(dec==0)
{
num--;
// while(!dec);
while(!dec)
display();
}
}
if(num>9999)
{
num=0;
}
if(num==0)
{
num=0;
lingweiflag=1;
}
}
void main()
{
while(1)
{
display();
keyscan();
}
}
页:
[1]