?? text1.c
字號:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit s1=P2^0; //數碼管位選控制端
sbit s2=P2^1;
sbit s3=P2^2;
sbit s4=P2^3;
sbit s5=P2^4;
sbit s6=P2^5;
sbit s7=P2^6;
/*k1設置時間,k2定時。k1,k2使用不自動彈起按鍵。
k3時分秒選擇,k4加數字,k5減數字。*/
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
uchar count=0,sec,min,hour,ss=0;s=60,m=60,h=24;
uchar code mum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽數碼管0-9編碼
void delayms(uint k) //延時函數
{
uint i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
/*通過count獲得hour,min,sec變量值 */
void timecontrol()
{
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
hour=0;
}
}
}
void display(uchar zs,uchar zm, uchar zh) //數碼管顯示函數
{
s1=1;
P0=mum[zh/10];
delayms(5);
s1=0;
s2=1;
P0=mum[zh%10]&0x7f; // 時的個位加上小數點
delayms(5);
s2=0;
s3=1;
P0=mum[zm/10];
delayms(5);
s3=0;
s4=1;
P0=mum[zm%10]&0x7f; //分的個位加上小數點
delayms(5);
s4=0;
s5=1;
P0=mum[zs/10];
delayms(5);
s5=0;
s6=1;
P0=mum[zs%10];
delayms(5);
s6=0;
}
void keyscan_settime() //時間設置模塊
{
uchar st,mt,ht;
if(k1==0)
{
delayms(10);
if(k1==0)
{
st=sec,mt=min,ht=hour;
TR0=0; //關閉定時器
while(k1==0) //等待用戶按鍵
{
display(st,mt,ht);
if(k3==0)
{
delayms(10);
if(k3==0)
{
while(!k3);
ss++;
if(ss==3) ss=0;
}
}
/*通過ss選擇時分秒設置*/
if(k4==0) //加數
{
delayms(10);
if(k4==0)
{
while(!k4);
switch(ss)
{
case 0:st++;if(st==60)st=0;break;
case 1:mt++;if(mt==60)mt=0;break;
case 2:ht++;if(ht==24)ht=0;break;
default :;
}
}
}
if(k5==0) //減數
{
delayms(10);
if(k5==0)
{
while(!k5);
switch(ss)
{
case 0:if(st>0)st--;
else st=0;break;
case 1:if(mt>0)mt--;
else mt=0;break;
case 2:if(ht>0)ht--;
else ht=0;break;
default : ;
}
}
}
}
TR0=1;
sec=st,min=mt,hour=ht;
}
}
display(sec,min,hour);
}
void keyscan_time() //用戶定時模塊
{
if(k2==0)
{
delayms(10);
if(k2==0)
{
s=sec;m=min;h=hour;
while(k2==0) //開始定時設置
{
display(s,m,h);
if(k3==0)
{
delayms(10);
if(k3==0)
{
while(!k3);
ss++;
if(ss==3) ss=0;
}
}
/*通過ss選擇時分秒設置*/
if(k4==0) //加數
{
delayms(10);
if(k4==0)
{
while(!k4);
switch(ss)
{
case 0:s++;if(s==60)s=0;break;
case 1:m++;if(m==60)m=0;break;
case 2:h++;if(h==24)h=0;break;
default :;
}
}
}
if(k5==0) //減數
{
delayms(10);
if(k5==0)
{
while(!k5);
switch(ss)
{
case 0:if(s>0)s--;
else s=0;break;
case 1:if(m>0)m--;
else m=0;break;
case 2:if(h>0)h--;
else h=0;break;
default : ;
} }
}
}
}
}
}
void buz()
{
if((hour==h)&&(min==m)&&(sec==s))
{
s7=0;
delayms(20);
s7=1;
}
}
void main()
{
TMOD=0x01; //定時器0工作在方式1
TH0=(65536-45872)/256; //裝初值,50ms
TL0=(65536-45872)%256;
EA=1; //總中斷允許
ET0=1; //T0中斷允許
TR0=1; //開定時器0
while(1)
{
keyscan_settime();
keyscan_time();
buz();
}
}
void T0_ms() interrupt 1 //中斷入口程序
{
TH0=(65536-45872)/256; //重新裝初值
TL0=(65536-45872)%256;
count++;
if(count==20) //判定1s時間是否已到
{
count=0;
timecontrol();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -