//跟設(shè)定的功能差不多,可是發(fā)現(xiàn)按鍵有點(diǎn)問題,但是還是能很好的工作,程序?qū)懙挠悬c(diǎn)亂
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp1,temp2,temp3,tt,flag;//miao fen shi
/*
用定時(shí)器實(shí)現(xiàn)定時(shí)功能
用中斷實(shí)現(xiàn)調(diào)時(shí)間(中斷進(jìn)入,用4個(gè)獨(dú)立按鍵控制調(diào)時(shí)間)
用定時(shí)器0 方式1實(shí)行
LED顯示
顯示時(shí)間 初始化 開機(jī)顯示00:00:00
功能:操作步驟
時(shí)鐘運(yùn)行過程中,按下key4關(guān)定時(shí)器時(shí)鐘顯示,但是不運(yùn)行,即為暫停狀態(tài)
再按下key1,選擇調(diào)時(shí)間的位,是分還是時(shí),key2加時(shí)間+1,key3減時(shí)間-1
key2加分鐘時(shí)間到60自動(dòng)轉(zhuǎn)設(shè)為30,加小時(shí)到24自動(dòng)轉(zhuǎn)設(shè)定為12、、這樣加快了設(shè)定的便捷性
時(shí)間設(shè)定完成后,按一下key4,啟動(dòng)TR0
再按下key1,開始正常工作。
*/
//uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code tabledu[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0xbf};
sbit p37=P3^7;
sbit p36=P3^6;
sbit p35=P3^5;
sbit p34=P3^4;
sbit p33=P3^3;
sbit p32=P3^2;
sbit p31=P3^1;
sbit p30=P3^0;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
//zhu: yong SW22jin ru wai bu zhong duan
//key1 tiaozheng wei zhuyao wei xiangshang yi dong ji:mei an yi ci zhixiang shi fen miao
//key2 an yici jia yi
//key3 an yici jian yi
void init()
{
P1=0xff;
tt=0;
flag=0;
temp1=0;
temp2=0;
temp3=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
IT0=0;//電平觸發(fā)
IE0=1;
// EX0=1;//開外部中斷0
IP=0x20;
}
void delay(uchar z)
{
uchar x,y;
for(x=60;x>0;x--)
for(y=z;y>0;y--);
}
void display()
{
p37=0;
P0=tabledu[temp1%10];
delay(1);
p37=1;
p36=0;
P0=tabledu[temp1/10];
delay(1);
p36=1;
p35=0;
P0=tabledu[10];
delay(1);
p35=1;
p34=0;
P0=tabledu[temp2%10];
delay(1);
p34=1;
p33=0;
P0=tabledu[temp2/10];
delay(1);
p33=1;
p32=0;
P0=tabledu[10];
delay(1);
p32=1;
p31=0;
P0=tabledu[temp3%10];
delay(1);
p31=1;
p30=0;
P0=tabledu[temp3/10];
delay(1);
p30=1;
}
void tiaoshi()
{
uchar i=0;
while(key1)
display();
/* if(key4==0)//有鍵按下
{
delay(5);
if(key4==0)//若為真,說明確實(shí)有鍵按下
while(key4==0);
flag=0;
TR0=1;
}
*/
while((key2)&&(key3)&&flag)
{
while(!key2);
while(!key3);
if(key1==0&&flag)//有鍵按下
{
delay(5);
if(key1==0)//若為真,說明確實(shí)有鍵按下
while(key1==0);
i++;
// gomain();
if(i==1)
{
while(key1)
{
p34=0;
P0=tabledu[temp2%10];
delay(1);
p34=1;
p33=0;
P0=tabledu[temp2/10];
delay(1);
p33=1;
if(key2==0)//有鍵按下
{
delay(5);
if(key2==0)//若為真,說明確實(shí)有鍵按下
while(key2==0);
temp2++;
if(temp2==60)
temp2=30;
}
if(key3==0)//有鍵按下
{
delay(5);
if(key3==0)//若為真,說明確實(shí)有鍵按下
while(key3==0);
temp2--;
// if(temp2==0)
// temp2=30;
}
if(key4==0)//有鍵按下
{
delay(5);
if(key4==0)//若為真,說明確實(shí)有鍵按下
while(key4==0);
flag=0;
TR0=1;
}
}
}
if(i==2)
{
while(key1)
{
p31=0;
P0=tabledu[temp3%10];
delay(1);
p31=1;
p30=0;
P0=tabledu[temp3/10];
delay(1);
p30=1;
if(key2==0)//有鍵按下
{
delay(5);
if(key2==0)//若為真,說明確實(shí)有鍵按下
while(key2==0);
temp3++;
if(temp3==24)
temp3=12;
}
if(key3==0)//有鍵按下
{
delay(5);
if(key3==0)//若為真,說明確實(shí)有鍵按下
while(key3==0);
temp3--;
// if(temp3==0)
// temp3=30;
}
if(key4==0)//有鍵按下
{
delay(5);
if(key4==0)//若為真,說明確實(shí)有鍵按下
while(key4==0);
flag=0;
TR0=1;
}
}
}
if(i==2)
i=0;
}
/* if(key4==0)//有鍵按下
{
delay(5);
if(key4==0)//若為真,說明確實(shí)有鍵按下
while(key4==0);
flag=0;
TR0=1;
}
*/
}
}
void main()
{
init();
while(1)
{
if(!key4)
{
flag=1;
}
display();
while(flag)
{
TR0=0;
display();
if(!key1)
tiaoshi();
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==20)
{
tt=0;
temp1++;
if(temp1==60)
{ temp1=0;
temp2++;
if(temp2==60)
{ temp2=0;
temp3++;
if(temp3==24)
{temp1=0;temp2=0;temp3=0;}
}
}
}
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |