多功能秒表系统设计
设计要求:
(1)两位LED显示,显示时间为00~99秒。
(2)具有开始、暂停、复位功能。
(3)在秒表工作过程中能通过按键多次(不少于4次)记录当前的时间。
(4)可以通过按钮查看记录的时间 。
本人现在可以实现开始、暂停、复位功能,后面的记录和查看功能有没有哪位大佬可以帮忙改一下。求求了。
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit w0=P2^0;
sbit w1=P2^1;
sbit s1=P3^4; //启动
sbit s2=P3^5; //暂停
sbit s3=P3^6; //清零
sbit s4=P3^7; //记录
sbit s5=P3^3; //查询
unsigned char recordTimes[4]; // 记录的时间,长度为4
uchar count=0; //对50ms定时时间进行计数
uchar miao=0; //秒计数器
uchar j,k;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//共阴极
void timedr0init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=0;
ET0=1;
EA=1;
}
void delay(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
} //延时
void display(uchar n)
{
uchar c,d;
c=n/10;
d=n%10;
P0=0x00; //xiao
P0=table[c];
w0=0,w1=1;
delay(5);
P0=0x00;
P0=table[d];
w1=0,w0=1;
delay(5);
// P0=table[n/10];w0=0,w1=1;
// P0=tabie[n%10];w0=1,w1=0;
}
void scankeys()
{static bit recordFlag = 0; //声明了一个静态的位变量 recordFlag,并将其初始化为 0
static unsigned char recordIndex = 0;//静态无字符变量
if(s1==0)//启动
{
TR0=1;
}
if(s2==0)//暂停
{
TR0=0;
}
if(s3==0)//清零
{
TR0=0,miao=count=0;
}
if (s4 == 0) { // 记录
if (!recordFlag && recordIndex < 4) {
recordFlag = 1;
recordTimes[recordIndex++] = miao;
while (s4 == 0);
delay(100); // 等待按键释放,防止重复记录
}
}
else {
recordFlag = 0;
}
if (s5 == 0) { // 查看记录
if (recordIndex > 0)
{
uchar i;
for (i = 0; i < recordIndex; i++)
{
display(recordTimes[ i]);
delay(100);
}
}
}
}
void main()
{
timedr0init();
while(1)
{
display(miao);
scankeys();
}
}
void time0() interrupt 1
{ TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
miao++;
if(miao==100)
miao=0;
}
}
|