|
最簡(jiǎn)單的電子鐘全套資料,我就制作了一套,走時(shí)精準(zhǔn)。
/***************************************/
//clock.c
//單片機(jī)電子鐘C語(yǔ)言程序 XSCLK V1.0
//MCU:AT89C2051 晶振頻率:12MHZ
/***************************************/
//最簡(jiǎn)單的單片機(jī)電子鐘程序,學(xué)習(xí)單片機(jī)必經(jīng)之路
//***************************************/
#include <at89x51.h> //頭文件包含
#define uchar unsigned char //宏定義
#define uint unsigned int
#define ON 0 //定義0為打開(kāi)
#define OFF 1 //定義1為關(guān)閉
#define LEDBus P1 //定義p1口為數(shù)碼管段碼口
sbit MIAO =P1^2; //秒點(diǎn)
sbit HOU_S=P3^0; //時(shí)十位位選
sbit HOU_G=P3^1; //時(shí)個(gè)位位選
sbit MIN_S=P3^2; //分十位位選
sbit MIN_G=P3^3; //分個(gè)位位選
sbit H_KEY=P3^4; //時(shí)調(diào)整鍵
sbit M_KEY=P3^5; //分調(diào)整鍵
bit SHAN; //閃爍標(biāo)志位
uchar second,minute,hour; //定義秒、分、時(shí)寄存器
uchar code LEDTab[]={0x14,0xd7,0x4c, //數(shù)碼管段碼表0--9
0x45,0x87,0x25,0x24,0x57,0x04,0x05};
void delay(uchar t); //延時(shí)函數(shù)
void init(); //初始化函數(shù)
void display(); //顯示函數(shù)
void min_tiao(); //分調(diào)整函數(shù)
void hou_tiao(); //時(shí)調(diào)整函數(shù)
/***************************************
函 數(shù) 名:main
功 能:主函數(shù)
說(shuō) 明:
入口參數(shù):無(wú)
返 回 值:無(wú)
****************************************/
void main()
{
init(); //調(diào)用初始化函數(shù)
while(1) //主程序循環(huán)
{
if(!H_KEY) hou_tiao(); //如果時(shí)調(diào)整鍵按下(為0),調(diào)用時(shí)調(diào)整函數(shù)
if(!M_KEY) min_tiao(); //如果分調(diào)整鍵按下(為0),調(diào)用分調(diào)整函數(shù)
display(); //調(diào)用顯示函數(shù)
}
}
/***************************************
函 數(shù) 名:init
功 能:初始化函數(shù)
說(shuō) 明:初始化定時(shí)器及中斷
入口參數(shù):無(wú)
返 回 值:無(wú)
***************************************/
void init()
{
TMOD=1;TH0=0X3C;TL0=0XB0; //定時(shí)器0模式1,50毫秒
ET0=1;TR0=1;EA=1; //開(kāi)定時(shí)器0中斷、啟動(dòng)定時(shí)器0、開(kāi)總中斷
}
/***************************************
函 數(shù) 名:display
功 能:顯示函數(shù)
說(shuō) 明:
入口參數(shù):無(wú)
返 回 值:無(wú)
***************************************/
void display()
{
LEDBus=LEDTab[minute%10]; //分個(gè)位送數(shù)碼管顯示
MIAO=SHAN; //秒點(diǎn)閃爍
MIN_G=ON; //打開(kāi)分個(gè)位位選
delay(1); //顯示1毫秒
MIN_G=OFF; //關(guān)閉分個(gè)位位選
LEDBus=LEDTab[minute/10]; //分十位送數(shù)碼管顯示
MIAO=SHAN; //秒點(diǎn)閃爍
MIN_S=ON; //打開(kāi)分十位位選
delay(1); //顯示1毫秒
MIN_S=OFF; //關(guān)閉分十位位選
LEDBus=LEDTab[hour%10]; //時(shí)個(gè)位送數(shù)碼管顯示
HOU_G=ON; //打開(kāi)時(shí)個(gè)位位選
delay(1); //顯示1毫秒
HOU_G=OFF; //關(guān)閉時(shí)個(gè)位位選
if(hour/10) //如果時(shí)十位為0,不顯示十位數(shù)字
{
LEDBus=LEDTab[hour/10]; //時(shí)十位送數(shù)碼管顯示
HOU_S=ON; //打開(kāi)時(shí)十位位選
delay(1); //顯示1毫秒
HOU_S=OFF; //關(guān)閉時(shí)十位位選
}
}
/***************************************
函 數(shù) 名:min_tiao
功 能:分調(diào)整
說(shuō) 明:
入口參數(shù):無(wú)
返 回 值:無(wú)
***************************************/
void min_tiao()
{
while(!M_KEY) display(); //等待分調(diào)整鍵松開(kāi)
second=0;minute++; //秒清零、分加1
if(minute==60) minute=0; //如果分等于60,分變0
}
/***************************************
函 數(shù) 名:hou_tiao
功 能:時(shí)調(diào)整
說(shuō) 明:
入口參數(shù):無(wú)
返 回 值:無(wú)
***************************************/
void hou_tiao()
{
while(!H_KEY) display(); //等待時(shí)調(diào)整鍵松開(kāi)
second=0;hour++; //秒清零,時(shí)加1
if(hour==24) hour=0; //如果時(shí)等于24,時(shí)變0
}
/***************************************
函 數(shù) 名:delay
功 能:延時(shí)函數(shù)
說(shuō) 明:
入口參數(shù):t:延時(shí)時(shí)間長(zhǎng)短
返 回 值:無(wú)
***************************************/
void delay(uchar t)
{
uchar i; //定義變量
for(;t>0;t--) //如果t大于0,t減1(外層循環(huán))
for(i=124;i>0;i--); //i等于124,如果i大于0,i減1
}
/***************************************
函 數(shù) 名:timer0
功 能:定時(shí)器0中斷函數(shù)
說(shuō) 明:
入口參數(shù):無(wú)
返 回 值:無(wú)
***************************************/
void timer0() interrupt 1 //定時(shí)器0(中斷1)
{
uchar tim1,tim2; //定義臨時(shí)變量
TL0=TL0+0XB0;TH0=0X3C; //重裝定時(shí)器初值
tim1++; //每中斷一次tim1加1
if(tim1==10) //中斷10(0.5秒)
{
SHAN=!SHAN; //閃爍標(biāo)志取反
tim1=0;tim2++; //tim1清零,tim2加1
if(tim2==2) //到了1秒
{
tim2=0;second++; //tim2清零,秒加1
if(second==60) //如果秒到60
{
second=0;minute++; //秒變0,分加1
if(minute==60) //如果分到60
{
minute=0;hour++; /分變0,時(shí)加1
if(hour==24) hour=0; //如果時(shí)到24,時(shí)變0
}
}
}
}
}
/***************************************
program end 程序結(jié)束
***************************************/
|
-
-
-
-
最簡(jiǎn)單的電子鐘全套資料.rar
2022-8-19 15:55 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
769.15 KB, 下載次數(shù): 20, 下載積分: 黑幣 -5
|