欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于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.raoushi.com/bbs/)
Powered by Discuz! X3.1