時(shí)鐘及溫度用74hc164+74ls145數(shù)碼管顯示單片機(jī)程序
}
void keyshu()//設(shè)定鍵函數(shù)
{
bit b,d,e;
b=MINUS;d=ADD;//變量B,D,E分別讀回P0。4~P0。6的狀態(tài)。分別為加一,減一,確認(rèn)鍵
e=ENTER;
if(b==0)//減一按鍵按下
{
dateshu[seta]--;
if(dateshu[seta]<0)dateshu[seta]=9;//減到零時(shí)自動(dòng)循環(huán)回九
b=MINUS;//再讀回鍵值,做松手查檢測(cè)
while(b==0){b=MINUS;display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);}//松手檢測(cè)
}
else if(d==0)//加一按鍵按下
{
dateshu[seta]++;
if(dateshu[seta]>9)dateshu[seta]=0;//加到九時(shí)自動(dòng)循環(huán)回零
d=ADD;//做松手檢測(cè)
while(d==0){d=ADD;display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);}//松手檢測(cè)
}
else if(e==0)//確認(rèn)鍵按下
{
seta++;
e=ENTER;
while(e==0){e=ENTER;display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);}
if(seta>5)//如果六位數(shù)值已設(shè)定完畢,測(cè)退出設(shè)定狀態(tài)
{
seta=0;sec=0;setflag=0;
sec=dateshu[1]*10+dateshu[0];//分別將設(shè)定好的值,賦給時(shí)秒變量,設(shè)定生效
min=dateshu[3]*10+dateshu[2];//分別將設(shè)定好的值,賦給分變量,設(shè)定生效
hour=dateshu[5]*10+dateshu[4];//分別將設(shè)定好的值,賦給時(shí)變量,設(shè)定生效
}
}
}
void main()本文引用地址:http://m.butianyuan.cn/article/201612/324565.htm
{
init();//各外圍元件及CPU初始化
delay10us(150);//進(jìn)入大循環(huán)時(shí)的延時(shí)
while(1)
{
key();//檢測(cè)功能鍵有無(wú)按下
if(setflag==0)//如果設(shè)定功能未進(jìn)入,則顯示實(shí)時(shí)時(shí)鐘
{
timer();//時(shí)間運(yùn)算函數(shù)
display(dateshu[0],dateshu[1],10,10,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);//顯示實(shí)時(shí)時(shí)鐘
}
else//如果進(jìn)入了功能設(shè)定函數(shù)
{
keyshu();//讀取鍵值
display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);//顯示實(shí)時(shí)設(shè)定
}
if((dateshu[0]==3)&&(dateshu[1]%2==0))//每隔十秒溫度讀取顯示一次
{uchar i;//顯示延時(shí)用
dqrsr();//初始化
if(dqflag==1)//檢測(cè)存在脈沖
{
dqwrite(0xcc);//跳過(guò)ROM操作
dqwrite(0x44);//開(kāi)始溫度轉(zhuǎn)換
while(!DS1820DQ);//延時(shí)等待溫度轉(zhuǎn)換完畢
dqrsr();//初始化
if(dqflag==1)
{
uchar temper;//溫度變量
dqwrite(0xcc);//跳過(guò)ROM操作
dqwrite(0xbe);//讀取數(shù)據(jù)指令
temperl=dqread();//讀取低字節(jié)溫度值
temperh=dqread();//讀取高字節(jié)溫度值
temperl=temperl>>4;//移去低四位的溫度值
temperh=temperh<<4;//移去讀回的符號(hào)號(hào)
temper=temperl+temperh;//將處理后的高字節(jié)溫度和低字節(jié)溫度值相加
for(i=250;i>0;i--)display(temper%10,temper/10,temper/100,10,10,10,10,10);//延時(shí)顯示實(shí)時(shí)溫度
}
}
}
}
}
void time0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//定時(shí)器零重賦初值
tim++;
if(tim==20)
{
tim=0;//tim==20時(shí),為50MS*20=1S
sec++;
}
}
評(píng)論