?? timer.c
字號:
/********************************************************************/
/** **/
/** 用單片機控制的簡易定時器報警器 **/
/** 初始值為59-1S,進行倒計時。 **/
/** 一共有s1,s2,s3,s4三個按鍵 **/
/** s1:設定鍵 **/
/** s2:確定鍵 **/
/** s3:遞增鍵 **/
/** s4:遞減鍵 **/
/** **/
/** 當計時到00時,數(shù)碼管閃爍00,以1Hz進行閃爍 **/
/** P1口接彩燈 **/
/**作 者: 竇穎艷 2008年11月1日于冶金學院實訓樓1 **/
/** **/
/********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9段選
uchar code tab1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位選
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit s4=P3^3;
char temp;
uchar aa,num,s1num;
void delay(uint z);
void display(uchar temp);
void flash(uchar cnt);
void init();
void keyscan();
void delay(uint z)
{
uint x,y;
for(x=z;x--;x>0)
for(y=110;y--;y>0)
{;}
}
void display(uchar temp)
{
uchar shi,ge;
shi=temp/10;
ge=temp%10;
P0=tab[shi];
P2=0xff;
P2=tab1[6];
delay(5);
P0=tab[ge];
P2=tab1[7];
delay(5);
}
void flash(uchar cnt)
{
uchar a;
for(a=1;a<=cnt;a++)
{
P2=0xff;
delay(1000);
P2=0xfc;
delay(1000);
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20)
{
aa=0;
temp--;
if(temp==-1)
{
temp=0;
TR0=0;
flash(80);
}
}
}
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
num=0;
temp=59;
}
void keyscan()
{
if(s1==0)
{
delay(20);
if(s1==0)
{
s1num++;
while(!s1);
if(s1num==1)
{
TR0=0;
}
}
}
if(s1num!=0)
{
if(s3==0)
{
delay(20);
{
if(s3==0)
{
while(!s3);
if(s1num==1)
temp++;
}
}
}
if(s4==0)
{
delay(20);
if(s4==0)
{
while(!s4);
if(s1num==1)
temp--;
}
}
}
if(s2==0)
{
delay(20);
if(s2==0)
{
while(!s2);
TR0=1;
}
}
}
void main()
{
init();
while(1)
{
keyscan();
display(temp);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -