|
基于51單片機(jī)的升級(jí)時(shí)鐘程序
單片機(jī)源程序如下:
- #include "reg52.h" //單片機(jī)頭文件
- #define uchar unsigned char //定義uchar 代替 unsigned char
- #define uint unsigned int
- sbit duan=P2^6; //位定義
- sbit wei=P2^7;
- sbit k1=P3^4;
- sbit k2=P3^5;
- sbit k3=P3^6;
- sbit k4=P3^7;
- void display(uchar a0,uchar a1,uchar a2,uchar a3,uchar a4,uchar a5); //函數(shù)聲明
- void delay(uchar mss);
- uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //共陰數(shù)碼管顯示數(shù)字
- uchar ms=0,mg=0,fs=0,fg=0,ss=0,sg=0,m=0,f=0,s=0; //定義變量
- //主函數(shù)
- main()
- { P0=0x00;
- duan=1;
- duan=0;
- P0=0xc0;
- wei=1;
- wei=0;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TMOD=0x01; //設(shè)置定時(shí)器工作方式---定時(shí)器0在工作模式1下工作,即一個(gè)16位的計(jì)時(shí)器
- TR0=1; //開定時(shí)器0
- ET0=1; //開中斷1即定時(shí)器中斷0
- EA=1; //開總中斷
- while(1)
- {
- if(k1==0) //按鍵k1為低電頻
- {
- delay(40); //延時(shí)去抖
- if(k1==0) //判斷k1是否按下
- { //等待按鍵釋放
- while(k1!=1);
- f++; //分鐘自加
- m=0; //秒置0
- if(f==60) //分鐘為60,自動(dòng)置0,小時(shí)自加1
- {
- f=0;
- s++;
- if(s==24)
- {s=0;}
- }
- }
-
- }
- if(k2==0)
- {
- delay(40);
- if(k2==0)
- {
- while(k2!=1);
- f--;
- m=0;
- if(f==-1)
- {
- f=59;
- s--;
- if(s==-1)
- {s=0;}
- }
- }
-
- }
- if(k3==0)
- {
- delay(40);
- if(k3==0)
- {
- while(k3!=1);
- s++;
- m=0;
- if(s==24)
- {
- {
- s=0;
- }
- }
- }
- }
- if(k4==0)
- {
- delay(40);
- if(k4==0)
- {
- while(k4!=1);
- s--;
- m=0;
- if(s==-1)
- {
- {s=23;}
- }
- }
-
- }
- mg=m%10; //秒個(gè)位是秒數(shù)除以10的余數(shù)
- ms=m/10; //秒十位是秒數(shù)除以十的商
- fg=f%10;
- fs=f/10;
- sg=s%10;
- ss=s/10;
-
- display(mg,ms,fg,fs,sg,ss); //調(diào)用顯示函數(shù),實(shí)參為秒的十位個(gè)位...
- }
-
- }
- void timer0() interrupt 1 //中斷函數(shù)
- {
- int num; //num是個(gè)標(biāo)志
- TH0=(65536-50000)/256; //計(jì)時(shí)器賦初值
- TL0=(65536-50000)%256;
- num++; //當(dāng)num==20即1s 進(jìn)入秒自加,num清0
- if(num==20)
- {
- m++;
- num=0;
- if(m==60) //秒自加到60自動(dòng)清0,分自加
- {
- m=0;
- f++;
- if(f==60)
- {
- f=0;
- s++;
- if(s==24)
- {
- s=0;
- }
- }
- }
- }
- }
- void display(uchar a0,uchar a1,uchar a2,uchar a3,uchar a4,uchar a5) //顯示函數(shù)
- {
-
- P0=tab[a0]; //P0口賦值tab[a0]即對(duì)應(yīng)實(shí)參tab[mg]秒個(gè)位顯示
- duan=1; //開段選即讀到tab[mg]到數(shù)碼管上
- duan=0; //關(guān)段選
- P0=0xdf; //P0賦0xdf即1101 1111
- wei=1; //開位選,即第六個(gè)數(shù)碼管被選通
- wei=0; //關(guān)位選
- // delay(10);
- delay(5); //延時(shí)
- P0=tab[a1];
- duan=1;
- duan=0;
- P0=0xef;
- wei=1;
- wei=0;
- delay(5);
- P0=0xf7;
- wei=1;
- wei=0;
- P0=tab[a2];
- duan=1;
- duan=0;
- delay(5);
- P0=0xfb;
- wei=1;
- wei=0;
- P0=tab[a3];
- duan=1;
- duan=0;
- delay(15);
- P0=0xfd;
- wei=1;
- wei=0;
- P0=tab[a4];
- duan=1;
- duan=0;
- delay(5);
- P0=0xfe;
- wei=1;
- wei=0;
- P0=tab[a5];
- duan=1;
- duan=0;
- delay(5);
-
- }
- void delay(uchar mss) //延時(shí)函數(shù)
- {
- int i,j;
- for(i=mss;i>0;i--)
- {
- for(j=30;j>0;j--);
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
時(shí)鐘.zip
(28.81 KB, 下載次數(shù): 20)
2018-7-18 09:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|