標(biāo)題:
簡(jiǎn)易聲光報(bào)時(shí)時(shí)鐘 單片機(jī)程序
[打印本頁(yè)]
作者:
趙世海
時(shí)間:
2021-7-3 19:26
標(biāo)題:
簡(jiǎn)易聲光報(bào)時(shí)時(shí)鐘 單片機(jī)程序
/************************************************************
作品名字:簡(jiǎn)易聲光報(bào)時(shí)時(shí)鐘(12小時(shí)和24小時(shí)可轉(zhuǎn)換)
功能:六位數(shù)碼管顯示時(shí)分秒
二十四小時(shí)制和十二小時(shí)制可切換
十二小時(shí)制紅燈亮,二十四小時(shí)制紅燈滅
當(dāng)時(shí)間在凌晨0點(diǎn)~中午12點(diǎn)之間時(shí),黃燈亮,此時(shí)按切換按鍵數(shù)碼管的示數(shù)不會(huì)變化
制作說(shuō)明:P0接數(shù)碼管段選,P2低6位接數(shù)碼管位
**************************************************************/
#include<reg52.h> //包含庫(kù)文件
#define uc unsigned char
#define ui unsigned int //宏定義,就是定義ui代替unsigned int,方便下面程序調(diào)用
sbit LED=P3^2;//定義LED
sbit key0=P3^3;//定義小時(shí)切換按鍵
sbit key1=P3^4;//定義調(diào)小時(shí)按鍵
sbit key2=P3^5;//定義調(diào)分鐘按鍵
sbit key3=P3^6;//定義秒清零按鍵
sbit wan=P3^7;//上下午指示燈
uc min,hour,sec,num;//分鐘,小時(shí),秒,定時(shí)器計(jì)時(shí)變量
bit bdata zhi;//小時(shí)制標(biāo)志位
uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*0,1,2,3,4,5,6,7,8,9,.*///共陰極編碼
void delay(ui x)//延時(shí)函數(shù),大約延時(shí)1ms
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<121;j++); //執(zhí)行121次大約延時(shí)1ms
}
void display()//掃描顯示函數(shù),高位到低位
{
P0=tab[hour/10];//小時(shí)數(shù)據(jù)是一個(gè)兩位數(shù),除以10得到的商是十位數(shù),然后調(diào)用數(shù)組內(nèi)的對(duì)應(yīng)數(shù)字的編碼賦值給P0口,顯示對(duì)應(yīng)數(shù)字
P2=0xdf;//11011111 選擇對(duì)應(yīng)位
delay(1);//延時(shí)
P2=0xff;//關(guān)閉位選
P0=(tab[hour%10])|0x80;//給第二位后加“點(diǎn)(段選接線(xiàn)最高位是小數(shù)點(diǎn),所以就按位或0x80就是在最高位賦值1,就是顯示小數(shù)點(diǎn))
P2=0xef;//11101111
delay(1);
P2=0xff;
P0=tab[min/10];
P2=0xf7;//11110111
delay(1);
P2=0xff;
P0=(tab[min%10])|0x80;//給第四位后加“點(diǎn)”
P2=0xfb;//11111011
delay(1);
P2=0xff;
P0=tab[sec/10];
P2=0xfd;//11111101
delay(1);
P2=0xff;
P0=tab[sec%10]; //秒數(shù)據(jù)是一個(gè)兩位數(shù),%是取余運(yùn)算,就是除以10的余數(shù),得到個(gè)位數(shù)字
P2=0xfe;//11111110
delay(1);
P2=0xff;
}
void keyscan()//鍵盤(pán)掃描,開(kāi)關(guān)接地
{
if(key0==0) //檢測(cè)到按鍵按下
{
delay(5); //延時(shí)去抖
if(key0==0) //再次判斷按鍵是否按下
{
LED=~LED; //LED取反操作
zhi=~zhi; //小時(shí)制取反
if((hour>=12)&&(zhi==0))//小時(shí)大于等于12點(diǎn)時(shí),且小時(shí)制等于0,也就是12小時(shí)制
{
hour=hour-12; //將當(dāng)前小時(shí)數(shù)據(jù)減12賦值給hour
}
if((zhi==1)&&(wan==1))//小時(shí)制為24小時(shí)。是下午時(shí)
{
hour=hour+12;//將小時(shí)數(shù)據(jù)加12賦值給hour
}
}
while(!key0) display();//判斷是否松開(kāi),按鍵不送開(kāi)時(shí),key0是0,取反就是1,一直成立,就一直執(zhí)行后面的顯示函數(shù),按鍵松開(kāi)就跳出
}
if(key1==0) //加小時(shí)按鍵按下
{
delay(5);
if((key1==0)&&(zhi==0)) //12小時(shí)制
{
hour++; //小時(shí)加
if(hour==12) //加到12點(diǎn)
{
hour=0; //小時(shí)清零
wan=~wan; //切換上下午
}
}
if((key1==0)&&(zhi==1)) //24小時(shí)制
{
hour++; //小時(shí)加
if(hour==24) //加到24點(diǎn)
hour=0; //清零
}
while(!key1) display();//判斷是否松開(kāi)
}
if(key2==0) //分加按鍵按下
{
delay(5);
if(key2==0)
{
min++; //分加
if(min==60) //加到60
min=0; //分清零
}
while(!key2) display();//判斷是否松開(kāi)
}
if(key3==0)//秒清零按鍵
{
delay(5);
if(key3==0)
{sec=0;} //秒清零
while(!key3) display();//判斷是否松開(kāi)
}
}
void init() //系統(tǒng)初始化函數(shù)
{
sec=0;//一通電,顯示12:30:00
min=30;
hour=12;
LED=1; //led點(diǎn)亮
zhi=1; //默認(rèn)是24小時(shí)制
wan=1; //下午
TMOD=0x01;//設(shè)置定時(shí)器0工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定時(shí)器初值50ms
EA=1; //打開(kāi)中斷總開(kāi)關(guān)
ET0=1; //打開(kāi)中斷允許開(kāi)關(guān)
TR0=1; //打開(kāi)定時(shí)開(kāi)關(guān)
}
void shizhi() //小時(shí)制函數(shù)
{
if(hour>=12) //小時(shí)能加到大于12點(diǎn),說(shuō)明是24小時(shí)制
wan=1; //卻換到下午
if((hour<12)&&(zhi==1))//小時(shí)小于12并且是24小時(shí)制
wan=0; //切換到上午
}
void main()//主函數(shù)
{
init(); //調(diào)用初始化函數(shù)
while(1) //進(jìn)入循環(huán)
{
display(); //調(diào)用顯示函數(shù)
keyscan();//掃描是否有鍵按下
shizhi(); //小時(shí)制函數(shù)
}
}
void time0() interrupt 1 //定時(shí)器0工作函數(shù)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //進(jìn)入中斷后重新賦初值50ms
num++; //變量加
if(num==20) //加20次就是1s
{
num=0; //變量清零
sec++; //秒變量加
if(sec==60) //秒加到60
{
sec=0; //秒清零
min++; //分加
if(min==60)//分加到60
{
min=0; //分清零
hour++;//小時(shí)加
if((hour==12)&&(zhi==0)) //小時(shí)加到12,小時(shí)制為12
{
wan=~wan; //切換上下午
hour=0; //小時(shí)清零
}
if((hour==24)&&(zhi==1)) //小時(shí)加到24,小時(shí)制為24小時(shí)制
{
hour=0; //小時(shí)清零
}
}
}
}
}
51hei圖片_20191118230643.jpg
(112.23 KB, 下載次數(shù): 82)
下載附件
2021-7-3 19:25 上傳
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1