//跟设定的功能差不多,可是发现按键有点问题,但是还是能很好的工作,程序写的有点乱
#include<reg51.h> #define uint unsigned int #define uchar unsigned char
uchar temp1,temp2,temp3,tt,flag;//miao fen shi /* 用定时器实现定时功能 用中断实现调时间(中断进入,用4个独立按键控制调时间) 用定时器0 方式1实行 LED显示 显示时间 初始化 开机显示00:00:00
功能:操作步骤 时钟运行过程中,按下key4关定时器时钟显示,但是不运行,即为暂停状态 再按下key1,选择调时间的位,是分还是时,key2加时间+1,key3减时间-1 key2加分钟时间到60自动转设为30,加小时到24自动转设定为12、、这样加快了设定的便捷性 时间设定完成后,按一下key4,启动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;//电平触发 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)//若为真,说明确实有键按下 while(key4==0); flag=0; TR0=1; } */ while((key2)&&(key3)&&flag) { while(!key2); while(!key3); if(key1==0&&flag)//有键按下 { delay(5); if(key1==0)//若为真,说明确实有键按下 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)//若为真,说明确实有键按下 while(key2==0); temp2++; if(temp2==60) temp2=30; } if(key3==0)//有键按下 { delay(5); if(key3==0)//若为真,说明确实有键按下 while(key3==0); temp2--; // if(temp2==0) // temp2=30; }
if(key4==0)//有键按下 { delay(5); if(key4==0)//若为真,说明确实有键按下 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)//若为真,说明确实有键按下 while(key2==0); temp3++; if(temp3==24) temp3=12; } if(key3==0)//有键按下 { delay(5); if(key3==0)//若为真,说明确实有键按下 while(key3==0); temp3--; // if(temp3==0) // temp3=30; }
if(key4==0)//有键按下 { delay(5); if(key4==0)//若为真,说明确实有键按下 while(key4==0); flag=0; TR0=1; } } } if(i==2) i=0; }
/* if(key4==0)//有键按下 { delay(5); if(key4==0)//若为真,说明确实有键按下 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;} } } } }
|