完整word版00-99秒倒计时器程序及仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目一:秒计时器
功能要求:
1.系统上电,数码管显示“99”.
2.每隔1秒,数码管显示减1,减小到“00”后,数码管显示“00”,同时继电器开启。
3.按键的定义如下:
“暂停/开始”按键S13:当S13按下时,秒表计时停止,数码管显示当前数值,再次按下时恢复计时。
“设置”按键S14:当停止计时时,按下S14键,可以设置秒数。按键S1-S10分别对应数字0-9,先输入数字为十位数,后输入数字为个位数,若输入数字大于99,数码管显示“99”。设置结束后,按下S13键启动计时。
“重新开始”按键S15:当S15按下时,数码管显示为“99”,秒表从新开始计时。
#include
#include
unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code
jp[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; unsigned char a[2]={0,0};
unsigned char int_time;
unsigned char second=99;
unsigned char c;
bit zt;
bit sz;
unsigned char count;
unsigned char y;
unsigned char x;
unsigned char count2;
//函数功能:数码管动态扫描延时
void delay(unsigned char s)
{
unsigned char i,j;
for(i=0;i
for(j=0;j<125;j++)
;
}
//数码管显示子程序
void DisplaySecond(unsigned char k)
{
P2=0xfe;
P0=Tab[k/10];
delay(1);
P2=0xfd;
P0=Tab[k_x0010_];
delay(1);
}
//扫描键盘的值
void sm(void)
{ unsigned char k,j,n,a,m;
m=0xfe;
P1=0xf0;
k=P1;
k=k&0xf0;
if(k!=0xf0)
{ delay(5);
if(k!=0xf0)
{for(j=0;j<4;j++)
{ P1=m;n=P1;
for(a=0;a<16;a++)
{if(jp[a]==n)
c=a; //键值保存在C中
while(P1==jp[a]);
}
m=_crol_(m,1);
}
}
}
}
//按键
void aj(void)
{
if(P1!=0xf0)
{
if(c==12) //按下暂停/开始键{
count++;
if(count==1)
{
TR0=0;
zt=1;
}
if(count==2)
{
TR0=1;
count=0;
}
}
if(c==13)
{
if(zt==1)
{
second=00;
sz=1;
count2=0;}
}
if(c<10)
{
if(sz==1)
{
count2++;
if(count2==1)
{
a[0]=c;
second=a[0]*10+a[1]; }
if(count2==2)
{
a[1]=c;
second=a[0]*10+a[1]; }
}
}
if(c==14)
{
second=99;
}
}
P1=0xf0;
}
//主函数
void main(void)
{
TMOD=0x01;
TH0=(65536-46083)/256; TL0=(65536-46083)%6; EA=1;
ET0=1;
while(1)
{
DisplaySecond(second);
sm();
aj();
}
}
//函数功能:定时器0的中断服务子程序void interserve(void)interrupt 1 using 1 {
int_time ++;
if(int_time==20)
{
int_time=0;
second--;
if(second==-1)
{second=00;
P2=0x7f;
delay(5);
}
}
TH0=(65536-46083)/256;
TL0=(65536-46083)%6;
}