資源簡介
基于單片機(89S52)的多功能時鐘
用單片機定時器做的時鐘
第一個單片機作品
具有測溫 時鐘 鬧鐘 整點報時 功能
有源碼 開發板原理圖 程序流程圖(在總結報告中)
總結報告部分抄襲別人的 只有實物圖和程序流程圖是自己做的 總之 報告很爛
由于時間倉促 規范化程度不高 功能在不斷完善過程中
出現了很多冗余 暑期回家 沒有做進一步處理
現在心情很糟 以后有時間會完善的!
僅供參考!

代碼片段和文件信息
/***********************************************************************************
學校:東北石油大學
院系:電子科學學院
專業:電子科學與技術
班級:電子**班
學號:***********
姓名:小菜
*************************************************************************************/
#include??????????????????????????//52?單品機頭文件
#include?
#define?uchar?unsigned?char?????????????????//宏定義
#define?uint?unsigned?int
void?delay(uint?z);
sbit?key1=P3^4;?????????????????????????????//設置按鍵
sbit?key2=P3^5;
sbit?key3=P3^0;
sbit?key4=P3^1;
sbit?key5=P3^2;
sbit?key6=P3^3;
sbit?BEEP=P2^1;
sbit?led=P2^7;
sbit?DQ?=?P2^0;
void?beepopen(uchar?times);?????????????????????//聲明函數
void?onit();
void?clockset();
void?display(hms);
void?alarmset();
void?distribute();
void?zd_clock();
void?clock();
void?delay1(unsigned?char?t);
void?song();
void?alarmbeep();
unsigned?char?Init_DS18B20(void);
unsigned?int?ReadTemperature(void);
uchar?code?disp_code[]?=
{
??0xC0?0xF9?0xA4?0xB0?0x99?0x92?0x82?0xF8?0x80?0x90
??//?0-9??????0?1?2?3?4?5?6?7?8?9
??0x88?0x83?0xc6?0xa1?0x86?0x8e?
??//?10-15????a?b?c?d?e?f
??0x7F?0xBF?0x9C?0xFF
??//?16-19????.?-?。null
};????//數碼管顯示值列表
uchar?code?disp_code1[]=
{
0x400x790x240x300x190x120x020x780x000x10??//帶小數點的0-9
};
//設置變量
uint?numtempalarmljtemp1ttemp;
uchar?chcmcsxsh1h2m1m2s1s2tfhhmmsshmsahamastimer0h?timer0lktimeshiftflagtemp0z;
void?proc_18b20(uint?t)??//18b20溫度顯示函數--由于一開始沒想加測溫功能,另外時間倉促,函數利用率不高
{
????uint?t_temp1?t_temp2t_temp3t_temp4;
t_temp1?=?(int)(t?/?100);
????t_temp2?=?(int)(t?%?100);
t_temp3=(int)(t_temp2%10);
t_temp4=(int)(t_temp2/10);
P1=0xfe;
P0=0xf6;
delay(2);
P1=0xfd;
P0=disp_code[12];
delay(2);
P1=0xfb;
P0=disp_code[18];
delay(2);
P1=0xf7;
P0=disp_code[0];
delay(2);
P1=0xef;
P0=disp_code[t_temp3];
delay(2);
P1=0xdf;
P0=disp_code1[t_temp4];
delay(2);
P1=0xbf;
P0=disp_code[t_temp1];
delay(2);
P1=0x7f;
P0=0xf6;
delay(2);
}
void?main()
{
onit();?
while(1)
{
zd_clock();?//整點報時
if(key5==0&&key6!=0&&key1!=0&&key2!=0)
{
???? Init_DS18B20();
ttemp?=?ReadTemperature();
if(ttemp>30)
beepopen(1);
ttemp?=?(unsigned?int)(ttemp?*?10?+?0.5);?//放大10倍輸出并四舍五入
proc_18b20(ttemp);
}
else
{
if(key6==0)???????????????//當k2按下時??設置鬧鐘時間
alarmset();
else
{
if(key1==0||key2==0)??????????//當k4或k3按下時?進行時鐘設置
clockset();?????????????//調用時鐘設置程序
else
{
clock();?????????????//調用時鐘程序
if(ah==h&&am==m&&as==s)
{
? ET1=?1;????????????//打開定時器1中斷
alarmbeep();
}
}
}
}
}
}
void?timer0()?interrupt?1????????//定時器0的中斷處理程序
{
TH0=(65536-9216)/256;????//?每10ms產生一次中斷???因為晶振頻率為11.0592MHz,所以定時器裝入初值應為,65536-10000/12*11.0592
TL0=(65536-9216)%256;
num++;?????????????????????//定時器0每產生一次中斷?num++
}
void?delay(uint?z)???????//延時子函數
{
uint?xy;
for(x=z;x>0;x--)
for(y=11
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????95744??2010-07-14?08:42??多功能時鐘\開發板原理圖.doc
?????文件??????22207??2010-08-29?19:31??多功能時鐘\時鐘--成品\finalclock
?????文件??????10676??2010-08-29?19:48??多功能時鐘\時鐘--成品\finalclock.c
?????文件???????7728??2010-08-29?19:31??多功能時鐘\時鐘--成品\finalclock.hex
?????文件?????????52??2010-08-29?19:31??多功能時鐘\時鐘--成品\finalclock.lnp
?????文件??????19390??2010-08-29?19:31??多功能時鐘\時鐘--成品\finalclock.LST
?????文件??????32238??2010-08-29?19:31??多功能時鐘\時鐘--成品\finalclock.M51
?????文件??????25625??2010-08-29?19:31??多功能時鐘\時鐘--成品\finalclock.OBJ
?????文件????????957??2010-08-29?19:48??多功能時鐘\時鐘--成品\finalclock.Opt
?????文件???????1226??2010-08-29?19:31??多功能時鐘\時鐘--成品\finalclock.plg
?????文件???????1661??2010-08-29?14:40??多功能時鐘\時鐘--成品\finalclock.Uv2
?????文件????????828??2010-08-29?14:40??多功能時鐘\時鐘--成品\finalclock_Opt.Bak
?????文件???????1657??2010-07-26?17:12??多功能時鐘\時鐘--成品\finalclock_Uv2.Bak
?????文件????8269312??2010-08-29?19:55??多功能時鐘\電子??小菜作品.doc
?????目錄??????????0??2010-08-29?19:49??多功能時鐘\時鐘--成品
?????目錄??????????0??2010-08-29?19:57??多功能時鐘
-----------?---------??----------?-----??----
??????????????8489301????????????????????16
- 上一篇:數學物理方法.學習指導_姚端正 科學版
- 下一篇:程序員表白程序,帶音樂
評論
共有 條評論