51單片機(jī)學(xué)習(xí)筆記:可對(duì)時(shí)電子鐘
本篇是對(duì)上一篇的改進(jìn),昨天學(xué)習(xí)了第4章中的獨(dú)立鍵盤的使用
獨(dú)立鍵盤擁有自己獨(dú)有的IO口,所以比較簡(jiǎn)單,我上一篇寫的電子鐘程序只能燒程序?qū)r(shí),
不能手動(dòng)按鍵對(duì)時(shí),這肯定是最差勁的做法,所以學(xué)習(xí)了按鍵之后,就立馬動(dòng)手改進(jìn)我的電子鐘了
同時(shí)改進(jìn)了數(shù)碼管小數(shù)點(diǎn)的顯示,消除了疊影
使用芯片STC89C52RC, 2個(gè)鎖存器
6個(gè)帶小數(shù)點(diǎn)共陰極數(shù)碼管顯示一個(gè)24時(shí)制時(shí)鐘
沒(méi)有時(shí)鐘芯片,所以掉電后時(shí)間會(huì)復(fù)位
原理圖為TX-1C開(kāi)發(fā)板
==============================
最終顯示的<時(shí).分.秒>是 16.31.37 形式
使用3個(gè)按鍵, S2 S3 S5
其中S2和S3是加減數(shù)值,S5是切換對(duì)時(shí)狀態(tài),
C代碼
#include
#include"MY51.H"
voidshow();
int8shi=22;//初識(shí)時(shí)間22:45:00按S5鍵進(jìn)入對(duì)時(shí)模式
int8fen=45;
int8miao=0;
uint8timeFlag=0;//0計(jì)時(shí)模式,1校對(duì)時(shí)鐘,2校對(duì)分鐘,3校對(duì)秒鐘
voidmain()
{
startT0(1000);//開(kāi)始定時(shí)器
while(1)
{
show();//送入數(shù)碼管顯示
if(keyS5==keyDown)//按下S5鍵
{
delayms(5);//消抖處理
if(keyS5==keyDown)
{
while(1)
{
show();
if(keyS5==keyUp)//放開(kāi)按鈕
{
delayms(5);//消抖處理
if(keyS5==keyUp)
{
break;
}
}
}
timeFlag=(++timeFlag)%4;//按S5鍵進(jìn)行狀態(tài)切換
while(timeFlag)
{
if(timeFlag==1)
{
led=0xff;
led7=0;//進(jìn)入對(duì)時(shí)鐘模式,且打開(kāi)7號(hào)指示燈
}
elseif(timeFlag==2)
{
led=0xff;
led5=0;//進(jìn)入校對(duì)分鐘模式,且打開(kāi)5號(hào)指示燈
}
elseif(timeFlag==3)
{
led=0xff;
led3=0;//進(jìn)入校對(duì)秒鐘模式,且打開(kāi)3號(hào)指示燈
}
show();//刷新數(shù)碼管
if(keyS2==keyDown)//S2和S3用于調(diào)整數(shù)值,加減運(yùn)算
{
delayms(5);//消抖處理
if(keyS2==keyDown)
{
if(timeFlag==1)
{
shi--;
if(shi<0)
{
shi=23;
}
}
elseif(timeFlag==2)
{