温度计和秒表不知道该怎么弄写 ,求帮忙 !
#include <REGX51.H>
#define uchar unsigned char
#define uint unsigned int
//可位寻址单元的位定义
sbit LE1= P2^0;
sbit LE2= P2^1;
sbit KEY1= P2^2;
sbit KEY2= P2^3;
sbit KEY3= P2^4;
sbit KEY4=P2^5;
sbit SPEAK= P2^6;
sbit KEY5= P2^7;
//共阳LED显示代码
uchar LED_Duanxuan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
//共阴LED显示代码
uchar LED_Duanxuan1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
//LED位选
uchar LED_weixuan[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//显示缓冲区
uchar LED_DIS[8]={0,0,0,0,0,0,0,0};
uchar LED_Saomiao =0;
uchar time_50ms,i=0;
uchar second,minute,hour,minute1,day,mon,year,alhour,almin,alsecond;
uchar number_key;
void delay(void); //延时程序
void display(void);
void key_process(void); //按键处理程序
void Initialize(void);
int Leepyear(unsigned int year);
void Initialize(void)
{
second = 0; //秒
minute = 0; //分
hour = 0;
day = 1;
mon = 1;
year = 0;
number_key = 0; //按键次数
TH0=(65536-50000)/256; //定时50ms
TL0=(65536-50000)%256;
EA = 1; //开中断总开关;
ET0 = 1; //允许定时器0中断开关;
TR0 = 1; //启动定时器T0;
LED_DIS[0] = LED_Duanxuan[0]; //显示缓冲区初始化
LED_DIS[1] = LED_Duanxuan[1];
LED_DIS[2] = LED_Duanxuan[2];
LED_DIS[3] = LED_Duanxuan[3];
LED_DIS[4] = LED_Duanxuan[4];
LED_DIS[5] = LED_Duanxuan[5];
LED_DIS[6] = LED_Duanxuan[6];
LED_DIS[7] = LED_Duanxuan[7];
}
void key_process(void)
{
KEY1 = 1;
KEY2 = 1;
KEY3 = 1;
if(KEY4==1&&KEY5==1)
{if(KEY1 == 0)
{
(minute ==59)?(minute = 0):(minute++);
while(KEY1 == 0) display(); //等待按键释放;
}
if(KEY2 == 0)
{
(hour ==23)?(hour = 0):(hour++);
while(KEY2 == 0) display(); //等待按键释放;
}
if(KEY3==0)
{(second==59)?(second=0):(second++) ;
while(KEY3==0)display();
}
}
if(KEY4==0&&KEY5==1)
{if(KEY1==0)
{ (day ==31)?(day = 1):(day++);
while(KEY1 == 0) display();
}
if(KEY2 == 0)
{(mon ==12)?(mon= 1):(mon++);
while(KEY2 == 0) display();
}
if(KEY3==0)
{
(year==99)?(year=0):(year++);
while(KEY3==0) display();
}
}
if(KEY4==1&&KEY5==0)
{if(KEY1 == 0) //闹钟时分修改
{
(almin ==59)?(almin = 0):(almin++);
while(KEY1 == 0) display();
}
if(KEY2 == 0)
{
(alhour ==23)?(alhour = 0):(alhour++);
while(KEY2 == 0) display();
}
}
}
void alarm()
{if((hour==alhour)&&(minute==almin))
SPEAK=1;
if (KEY4==0&&KEY5==0)
while(KEY4==0&&KEY5==0) display();
SPEAK=0;
}
void main(void)
{
Initialize();
while(1)
{
display(); //调用显示程序
key_process(); //调用按键处理程序
alarm() ;
}
}
void display(void) //动态扫描显示
{
uint temp=100;
LED_Saomiao++;
if(LED_Saomiao == 8) LED_Saomiao=0;
P0 = LED_weixuan[LED_Saomiao]; //位选
LE2 = 1;
LE2 = 0;
P0 = LED_DIS[LED_Saomiao]; //段选
LE1 = 1;
LE1 = 0;
while(temp--);
}
void timing(void) interrupt 1 //定时器T0中断,50ms中断一次
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time_50ms++;
if(time_50ms==200)
{
time_50ms = 0;
second++; //秒加1;
if(second==60)
{
second = 0;
minute++; //分钟加1;
if(minute==60)
{
minute = 0;
hour++;
if(hour == 24)
{
hour = 0;
day++ ;
}
if(mon==2&&day==29&&!Leepyear(year))
{day=1;
mon++;}
if(mon==2&&day==30&&Leepyear(year))
{day=1;
mon++;}
if((mon==4|mon==6|mon==9|mon==11)&&day==31)
{day=1;
mon++;}
if((mon==1|mon==3|mon==5|mon==7|mon==8|mon==10|mon==12)&&day==32)
{day=1;
if(mon==12)
{mon=1;
year++;}
else
mon++; }
}
}
}
if(KEY4==1&&KEY5==1)
{LED_DIS[0] = LED_Duanxuan[hour/10]; //时
LED_DIS[1] = LED_Duanxuan[hour%10];
LED_DIS[2] = 0xBF; //-
LED_DIS[3] = LED_Duanxuan[minute/10]; //分
LED_DIS[4] = LED_Duanxuan[minute%10];
LED_DIS[5] = 0xBF; //-
LED_DIS[6] = LED_Duanxuan[second/10]; //秒
LED_DIS[7] = LED_Duanxuan[second%10];
}
if(KEY4==0&&KEY5==1)
{LED_DIS[0] = LED_Duanxuan[year/10];
LED_DIS[1] = LED_Duanxuan[year%10];
LED_DIS[2] = 0xBF;
LED_DIS[3] = LED_Duanxuan[mon/10];
LED_DIS[4] = LED_Duanxuan[mon%10];
LED_DIS[5] = 0xBF;
LED_DIS[6] = LED_Duanxuan[day/10];
LED_DIS[7] = LED_Duanxuan[day%10];
}
if(KEY4==1&&KEY5==0)
{LED_DIS[0] = LED_Duanxuan[alhour/10];
LED_DIS[1] = LED_Duanxuan[alhour%10];
LED_DIS[2] = 0xBF;
LED_DIS[3] = LED_Duanxuan[almin/10];
LED_DIS[4] = LED_Duanxuan[almin%10];
LED_DIS[5] = 0xBF;
LED_DIS[6] = LED_Duanxuan[alsecond/10];
LED_DIS[7] = LED_Duanxuan[alsecond%10];
}
}
int Leepyear(unsigned int year)
{
if (year%4==0)
return 1;
else
return 0;
}
爱莫能助,不过帮你顶一下~~~
