|
多功能秒表系統(tǒng)設(shè)計
設(shè)計要求:
(1)兩位LED顯示,顯示時間為00~99秒。
(2)具有開始、暫停、復(fù)位功能。
(3)在秒表工作過程中能通過按鍵多次(不少于4次)記錄當(dāng)前的時間。
(4)可以通過按鈕查看記錄的時間 。
本人現(xiàn)在可以實現(xiàn)開始、暫停、復(fù)位功能,后面的記錄和查看功能有沒有哪位大佬可以幫忙改一下。求求了。
#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定時時間進(jìn)行計數(shù)
uchar miao=0; //秒計數(shù)器
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; //聲明了一個靜態(tài)的位變量 recordFlag,并將其初始化為 0
static unsigned char recordIndex = 0;//靜態(tài)無字符變量
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); // 等待按鍵釋放,防止重復(fù)記錄
}
}
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;
}
}
|
|