数码管前三位显示一个跑表,从000到999之间以百分之一秒速度运行,当按下一个独立键盘时跑表停止,松开……
1.数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表)。
在上题的基础上,用另外三个独立键盘实现按下第一个时计时停止,按下第二个时计时开始,按下第三个是计数值清零从头开始
#include<>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
void init();//初始化子程序
void delay(uint);//延时子程序
void display(uint);//显示子程序
void keyscan();//按键扫描子程序
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint x,y;
void main()
{
init();
while(1)
{
if(x==1)
{
x=0;
if(y==1000)
y=0;
}
display(y);
keyscan();
}
}
void init()
{
P2=0x3f;
P1=0xf8;
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
x=0;
y=0;
}
void timer0()interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
x++;
y++;
}
void delay(uint ms)
{
uint x,y;
for(x=ms;x>0;x--)
for(y=110;y>0;y--);
}
void display(uint a)
{
uint bai,shi,ge;
bai=a/100;
shi=a%100/10;
ge=a%10;
P2=table[bai];
P1=0xfe;
delay(1);
P1=0xff;
P2=table[shi];
P1=0xfd;
delay(1);
P1=0xff;
P2=table[ge];
P1=0xfb;
delay(1);
P1=0xff;
}
void keyscan()
{
if(key1==0)
{
delay(5);
if(key1==0)
TR0=0;
while(key1==0)
display(y);
TR0=1;
}
if(key2==0)
{
delay(5);
if(key2==0)
TR0=0;
}
if(key3==0)
{
delay(5);
if(key3==0)
TR0=1;
}
if(key4==0)
{
delay(5);
if(key4==0)
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
x=0;
y=0;
}
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容