标题:
基于51单片机的计时器的设计
[打印本页]
作者:
网23123
时间:
2017-6-19 13:13
标题:
基于51单片机的计时器的设计
计时器573.rar
(39.5 KB, 下载次数: 12)
2017-6-19 13:12 上传
点击文件名下载附件
计时器
下载积分: 黑币 -5
单片机代码:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ucint unsigned long int
uchar A1,A2,A3,A4,A5,A6;
uchar B1,B2,B3,B4,B5,B6;
uchar C1,C2,C3,C4,C5,C6;
uchar D1,D2,D3,D4,D5,D6;
uint DZ,num,choice,time1,time2,time3,time4,time5,time6,m,beepten,pause;
uchar roll;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
sbit dian=P1^5;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit key5=P3^2;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x0f};//数字编码
uchar code led[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位编码
void delay(unsigned char x)//延时子程序
{
unsigned char i,j;
for(i=0;i<x;i++)
for(j=0;j<x;j++);
}
void InitTimer0()
{
TMOD = 0x01;
TH0 = 0x3C;
TL0 = 0x0B0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void display(uchar swan_c,uchar wan_c,uchar qian_c,uchar bai_c,uchar sh_c,uchar g_c) //显示函数
{
wela=1;
P0=led[0];
wela=0;
P0=0xff;//数码管消隐1
dula=1;
P0=table[g_c];
dula=0;
delay(10);
P0=0xff;//数码管消隐2
wela=1;
P0=led[1];
wela=0;
P0=0xff;//数码管消隐3
dula=1;
P0=table[sh_c];
dula=0;
delay(20);
P0=0xff;//数码管消隐4
wela=1;
P0=led[2];
wela=0;
P0=0xff;//数码管消隐5
dula=1;
P0=table[bai_c];
dula=0;
delay(10);
P0=0xff;//数码管消隐6
if(roll==0) //点位显示
{
wela=1;
P0=led[2];
wela=0;
P0=0xff;//数码管消隐
dula=1;
P0=0x80;
dula=0;
delay(10);
P0=0xff;//数码管消隐
}
wela=1;
P0=led[3];
wela=0;
P0=0xff;//数码管消隐7
dula=1;
P0=table[qian_c];
dula=0;
delay(10);
P0=0xff;//数码管消隐8
wela=1;
P0=led[4];
wela=0;
P0=0xff;//数码管消隐9
dula=1;
P0=table[wan_c];
dula=0;
delay(10);
P0=0xff;//数码管消隐10
if(roll==0)//点位显示
{
wela=1;
P0=led[4];
wela=0;
P0=0xff;//数码管消隐
dula=1;
P0=0x80;
dula=0;
delay(10);
P0=0xff;//数码管消隐
}
wela=1;
P0=led[5];
wela=0;
P0=0xff;//数码管消隐11
dula=1;
P0=table[swan_c];
dula=0;
delay(10);
P0=0xff;//数码管消隐12
}
void adjustjstime() //计时时间调整
{
if((m==0)&&(pause==0))
{
if(key2==0)
{
delay(50);
EA=0;
ET0=0;
TR0=0;
choice++;
while(!key2)display(A1,A2,A3,A4,A5,A6);
}
EA=1;
ET0=1;
TR0=1;
if(choice>3)choice=1;
if(choice==1)
{
led1=0;
led2=1;
led3=1;
if(key3==0)
{
delay(50);
EA=0;
ET0=0;
TR0=0;
A6++;
if(A6>9)
{
A5++;
A6=0;
}
if(A5>=6)A5=0;
while(!key3)display(A1,A2,A3,A4,A5,A6);
}
EA=1;
ET0=1;
TR0=1;
}
if(choice==2)
{
led1=1;
led2=0;
led3=1;
if(key3==0)
{
delay(50);
EA=0;
ET0=0;
TR0=0;
A4++;
if(A4>9)
{
A3++;
A4=0;
}
if(A3>=6)A3=0;
while(!key3)display(A1,A2,A3,A4,A5,A6);
}
EA=1;
ET0=1;
TR0=1;
}
if(choice==3)
{
led1=1;
led2=1;
led3=0;
if(key3==0)
{
delay(50);
EA=0;
ET0=0;
TR0=0;
A2++;
if(A2>9)
{
A1++;
A2=0;
}
if(A1>9)A1=0;
while(!key3)display(A1,A2,A3,A4,A5,A6);
}
EA=1;
ET0=1;
TR0=1;
}
display(A1,A2,A3,A4,A5,A6);
if(DZ==1)
{
led4=0;
led5=1;
}
if(DZ==2)
{
led4=1;
led5=0;
}
time1=A6+(A5*10);
time2=A4+(A3*10);
time3=A2+(A1*10);
beep=1;
time4=0;
time5=0;
time6=0;
}
if((m==0)&&(pause==1))
{
if(DZ==0)
{
choice=0;
led1=0;
led2=0;
led3=0;
led4=0;
led5=0;
display(A1,A2,A3,A4,A5,A6);
}
if(DZ==1)
{
choice=0;
led1=1;
led2=1;
led3=1;
led4=0;
led5=1;
B5=time4/10;
B6=time4%10;
B3=time5/10;
B4=time5%10;
B1=time6/10;
B2=time6%10;
display(B1,B2,B3,B4,B5,B6);
}
if(DZ==2)
{
choice=0;
led1=1;
led2=1;
led3=1;
led4=1;
led5=0;
C5=time1/10;
C6=time1%10;
C3=time2/10;
C4=time2%10;
C1=time3/10;
C2=time3%10;
display(C1,C2,C3,C4,C5,C6);
}
}
}
void Zstimedisplay()//正计时函数显示函数
{
if(m==1)
{
if(DZ==1)
{
choice=0;
led1=1;
led2=1;
led3=1;
pause=1;
B5=time4/10;
B6=time4%10;
B3=time5/10;
B4=time5%10;
B1=time6/10;
B2=time6%10;
display(B1,B2,B3,B4,B5,B6);
}
}
}
void Zstime() //正计时函数
{
if(m==1)
{
if(DZ==1)
{
++time4;
if(time4==60)
{
time4=0;
time5++;
if(time5==60)
{
time5=0;
time6++;
}
}
if((time1==time4)&&(time2==time5)&&(time3==time6))m=2;
led4=!led4;
}
}
}
void Dstimedisplay() //倒计时显示函数
{
if(m==1)
{
if(DZ==2)
{
choice=0;
led1=1;
led2=1;
led3=1;
pause=1;
C5=time1/10;
C6=time1%10;
C3=time2/10;
C4=time2%10;
C1=time3/10;
C2=time3%10;
display(C1,C2,C3,C4,C5,C6);
}
}
}
void Dstime()//倒计时函数
{
if(m==1)
{
if(DZ==2)
{
if(time1==0)
{
time1=60;
if(time2==0)
{
time2=60;
time3--;
}
time2--;
}
--time1;
if((time1||time2||time3)==0)m=2;
led5=!led5;
}
}
}
void ZDdisplay()//函数计时结束显示
{
if(m==2)
{
pause=0;
if(DZ==1)
{
if(beepten==20)
{
m=0;
beepten=0;
}
choice=0;
B5=time4/10;
B6=time4%10;
B3=time5/10;
B4=time5%10;
B1=time6/10;
B2=time6%10;
display(B1,B2,B3,B4,B5,B6);
}
if(DZ==2)
{
if(beepten==20)
{
m=0;
beepten=0;
}
choice=0;
C5=time1/10;
C6=time1%10;
C3=time2/10;
C4=time2%10;
C1=time3/10;
C2=time3%10;
display(C1,C2,C3,C4,C5,C6);
}
}
}
void startpause()//开始暂停函数
{
if(DZ!=0)
{
if(key4==0)
{
delay(50);
EA=0;
ET0=0;
TR0=0;
m++;
if(m>=2)
{
m=0;
led1=1;
led2=1;
led3=1;
}
while(!key4)
{
if((m==0)&&(pause==0))display(A1,A2,A3,A4,A5,A6);
if(DZ==1)display(B1,B2,B3,B4,B5,B6);
if(DZ==2)display(C1,C2,C3,C4,C5,C6);
}
}
EA=1;
ET0=1;
TR0=1;
}
}
void ZDJ()//正倒计调整函数
{
if(m==0)
{
if(key1==0)
{
delay(50);
EA=0;
ET0=0;
TR0=0;
DZ++;
if(DZ>=3)
{
DZ=0;
led4=1;
led5=1;
}
if(DZ==1)
{
led4=0;
led5=1;
}
if(DZ==2)
{
led4=1;
led5=0;
}
while(!key1)
{
if(DZ==0)display(A1,A2,A3,A4,A5,A6);
if(DZ==1)display(B1,B2,B3,B4,B5,B6);
if(DZ==2)display(C1,C2,C3,C4,C5,C6);
}
}
EA=1;
ET0=1;
TR0=1;
}
}
void adjustjd()//精度调整函数
{
if(num==20)
{
num=0;
Zstime();
Dstime();
if(m==2)
{
beepten++;
beep=!beep;
led1=!led1;
led2=!led2;
led3=!led3;
}
roll=!roll;
dian=!dian;
}
}
void main() //主函数
{
InitTimer0();
key5=0;
while(1)
{
adjustjstime();
Zstimedisplay();
Dstimedisplay();
startpause();
adjustjd();
ZDJ();
ZDdisplay();
}
}
void Timer0Interrupt() interrupt 1
{
TH0 = 0x3C;
TL0 = 0x0B0;
num++;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1