新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 時鐘及溫度用74hc164+74ls145數(shù)碼管顯示單片機程序

時鐘及溫度用74hc164+74ls145數(shù)碼管顯示單片機程序

作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏



}
void keyshu()//設(shè)定鍵函數(shù)
{

bit b,d,e;
b=MINUS;d=ADD;//變量B,D,E分別讀回P0。4~P0。6的狀態(tài)。分別為加一,減一,確認鍵
e=ENTER;
if(b==0)//減一按鍵按下
{
dateshu[seta]--;
if(dateshu[seta]<0)dateshu[seta]=9;//減到零時自動循環(huán)回九
b=MINUS;//再讀回鍵值,做松手查檢測
while(b==0){b=MINUS;display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);}//松手檢測

}
else if(d==0)//加一按鍵按下
{
dateshu[seta]++;
if(dateshu[seta]>9)dateshu[seta]=0;//加到九時自動循環(huán)回零
d=ADD;//做松手檢測
while(d==0){d=ADD;display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);}//松手檢測

}
else if(e==0)//確認鍵按下
{
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è)定完畢,測退出設(shè)定狀態(tài)
{
seta=0;sec=0;setflag=0;
sec=dateshu[1]*10+dateshu[0];//分別將設(shè)定好的值,賦給時秒變量,設(shè)定生效
min=dateshu[3]*10+dateshu[2];//分別將設(shè)定好的值,賦給分變量,設(shè)定生效
hour=dateshu[5]*10+dateshu[4];//分別將設(shè)定好的值,賦給時變量,設(shè)定生效

}
}

}
void main()

本文引用地址:http://butianyuan.cn/article/201612/324565.htm

{
init();//各外圍元件及CPU初始化
delay10us(150);//進入大循環(huán)時的延時
while(1)

{

key();//檢測功能鍵有無按下
if(setflag==0)//如果設(shè)定功能未進入,則顯示實時時鐘
{
timer();//時間運算函數(shù)
display(dateshu[0],dateshu[1],10,10,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);//顯示實時時鐘
}
else//如果進入了功能設(shè)定函數(shù)
{
keyshu();//讀取鍵值
display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);//顯示實時設(shè)定
}
if((dateshu[0]==3)&&(dateshu[1]%2==0))//每隔十秒溫度讀取顯示一次
{uchar i;//顯示延時用
dqrsr();//初始化
if(dqflag==1)//檢測存在脈沖
{

dqwrite(0xcc);//跳過ROM操作

dqwrite(0x44);//開始溫度轉(zhuǎn)換
while(!DS1820DQ);//延時等待溫度轉(zhuǎn)換完畢
dqrsr();//初始化
if(dqflag==1)
{
uchar temper;//溫度變量
dqwrite(0xcc);//跳過ROM操作
dqwrite(0xbe);//讀取數(shù)據(jù)指令

temperl=dqread();//讀取低字節(jié)溫度值
temperh=dqread();//讀取高字節(jié)溫度值
temperl=temperl>>4;//移去低四位的溫度值
temperh=temperh<<4;//移去讀回的符號號
temper=temperl+temperh;//將處理后的高字節(jié)溫度和低字節(jié)溫度值相加
for(i=250;i>0;i--)display(temper%10,temper/10,temper/100,10,10,10,10,10);//延時顯示實時溫度

}
}


}
}








}
void time0(void) interrupt 1
{

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//定時器零重賦初值
tim++;
if(tim==20)
{
tim=0;//tim==20時,為50MS*20=1S
sec++;
}

}





上一頁 1 2 下一頁

評論


技術(shù)專區(qū)

關(guān)閉