基于51單片機(jī)的電子鐘C語(yǔ)言程序[4頁(yè)]
-
資源ID:253595511
資源大?。?span id="mzebxcnn0" class="font-tahoma">242.50KB
全文頁(yè)數(shù):5頁(yè)
- 資源格式: DOC
下載積分:12積分
快捷下載

會(huì)員登錄下載
微信登錄下載
微信掃一掃登錄
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類(lèi)文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。
|
基于51單片機(jī)的電子鐘C語(yǔ)言程序[4頁(yè)]
基于51單片機(jī)的電子鐘C語(yǔ)言程序
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
/*七段共陰管顯示定義*/
uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};
/*定義并初始化變量*/
uchar seconde=0;
uchar minite=0;
uchar hour=12;
uchar mstcnt=0;
sbit P1_0=P1^0; // second 調(diào)整定義
sbit P1_1=P1^1; //minite調(diào)整定義
sbit P1_2=P1^2; //hour調(diào)整定義
/*函數(shù)聲明*/
void delay(uchar k ); //延時(shí)子程序
void time_pro( ); //時(shí)間處理子程序
void display( ); //顯示子程序
void keyscan( ); //鍵盤(pán)掃描子程序
/*****************************/
/*延時(shí)子程序*/
/****************************/
void delay (uchar k)
{
uchar j;
while((k--)!=0)
{
for(j=0;j<125;j++)
{;}
}
}
/**************************/
/*時(shí)間處理子程序*/
/**************************/
void time_pro( void)
{
if(seconde==60) //秒鐘設(shè)為60進(jìn)制
{ seconde=0;
minite++;
if( minite==60) //分鐘設(shè)為60進(jìn)制
{ minite=0;
hour++;
if(hour==24) //時(shí)鐘設(shè)為24進(jìn)制
{hour=0; }
}
}
}
/*****************************/
/* 顯示子程序*/
/*****************************/
void display(void)
{
P2=0xfe;
P0=dispcode[hour/10]; //顯示小時(shí)的十位
delay(4);
P2=0xfd;
P0=(dispcode[(hour%10)])|0X80; //顯示小時(shí)的個(gè)位
delay(4);
P2=0xfb;
P0=dispcode[minite/10]; //顯示分的十位
delay(4);
P2=0xf7;
P0=(dispcode[minite%10])|0X80; //顯示分的個(gè)位
delay(4);
P2=0xef;
P0=dispcode[seconde/10]; //顯示秒的十位
delay(4);
P2=0xdf;
P0=dispcode[seconde%10]; //顯示秒的個(gè)位
delay(4);
}
/*******************************/
/*鍵盤(pán)掃描子程序*/
/*******************************/
void keyscan (void)
{
if(P1_0==0) //按鍵1秒的調(diào)整
{
delay(30);
if(P1_0==0)
{
seconde++;
if(seconde==60)
{seconde=0; }
}
}
if(P1_1==0) //按鍵2分的調(diào)整
{
delay(30);
if(P1_1==0)
{
minite++;
if(minite==60)
{minite=0;}
}
}
if(P1_2==0) //按鍵3小時(shí)的調(diào)整
{
delay(30);
if(P1_2==0)
{
hour++;
if(hour==24)
{hour=0; }
}
}
}
void timer0(void) interrupt 1 using 0 //定時(shí)器0方式1,50ms中斷一次
{
TH0=0x3c;
TMOD = 0x11;
mstcnt++;
if(mstcnt==20)
{
seconde++;
mstcnt=0; //注意點(diǎn)。對(duì)計(jì)數(shù)單元的清零十分的重要,本次調(diào)試中就是
} //因?yàn)楹雎粤诉@一點(diǎn),給我早成了很大的被動(dòng)。
}
/**************************/
/*主函數(shù)*/
/**************************/
void main(void)
{ P1=0xff; //初始化p1口,全設(shè)為1
TMOD = 0x11; //time0為定時(shí)器,方式1
TH0=0x3c; //預(yù)置計(jì)數(shù)初值
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
while (1)
{
keyscan( ); //按鍵掃描
time_pro( ); //時(shí)間處理
display( ); //顯示時(shí)間
}
}