標題:
基于51單片機的升級時鐘程序
[打印本頁]
作者:
lv181981
時間:
2018-7-18 09:25
標題:
基于51單片機的升級時鐘程序
基于51單片機的升級時鐘程序
單片機源程序如下:
#include "reg52.h" //單片機頭文件
#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; //設置定時器工作方式---定時器0在工作模式1下工作,即一個16位的計時器
TR0=1; //開定時器0
ET0=1; //開中斷1即定時器中斷0
EA=1; //開總中斷
while(1)
{
if(k1==0) //按鍵k1為低電頻
{
delay(40); //延時去抖
if(k1==0) //判斷k1是否按下
{ //等待按鍵釋放
while(k1!=1);
f++; //分鐘自加
m=0; //秒置0
if(f==60) //分鐘為60,自動置0,小時自加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; //秒個位是秒數(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); //調用顯示函數(shù),實參為秒的十位個位...
}
}
void timer0() interrupt 1 //中斷函數(shù)
{
int num; //num是個標志
TH0=(65536-50000)/256; //計時器賦初值
TL0=(65536-50000)%256;
num++; //當num==20即1s 進入秒自加,num清0
if(num==20)
{
m++;
num=0;
if(m==60) //秒自加到60自動清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]即對應實參tab[mg]秒個位顯示
duan=1; //開段選即讀到tab[mg]到數(shù)碼管上
duan=0; //關段選
P0=0xdf; //P0賦0xdf即1101 1111
wei=1; //開位選,即第六個數(shù)碼管被選通
wei=0; //關位選
// delay(10);
delay(5); //延時
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ù)
{
int i,j;
for(i=mss;i>0;i--)
{
for(j=30;j>0;j--);
}
}
復制代碼
所有資料51hei提供下載:
時鐘.zip
(28.81 KB, 下載次數(shù): 20)
2018-7-18 09:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1