版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于51單片機和ds12c887時鐘芯片的c語言程序代碼1:#include<reg52.h>#include<define.h>void delay(uint z)/延時函數(shù)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void di() /蜂鳴器報警聲音beep=0;delay(100);beep=1;void write_com(uchar com)/寫液晶命令函數(shù)rs=0;lcden=0;p0=com;delay(3);lcden=1;delay(3);lcden=0;void write_date(uchar
2、date)/寫液晶數(shù)據(jù)函數(shù)rs=1;lcden=0;p0=date;delay(3);lcden=1;delay(3);lcden=0;void init()/初始化函數(shù)uchar num;ea=1;/打開總中斷ex1=1;/開外部中斷1it1=1;/設(shè)置負跳變沿觸發(fā)中斷flag1=0;/變量初始化t0_num=0;s1num=0;week=1;dula=0;/關(guān)閉數(shù)碼管顯示wela=0;lcden=0;rd=0;/*以下幾行在首次設(shè)置ds12c887時使用,以后不必再寫入write_ds(0x0a,0x20);/打開振蕩器write_ds(0x0b,0x26);/設(shè)置24小時模式,數(shù)據(jù)二進制
3、格式/開啟鬧鈴中斷set_time();/設(shè)置上電默認時間-*/write_com(0x38);/1602液晶初始化write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<15;num+)/寫入液晶固定部分顯示write_date(tablenum);delay(1);write_com(0x80+0x40);for(num=0;num<11;num+)write_date(table1num);delay(1);void write_sfm(uchar add,char date)
4、/1602液晶刷新時分秒函數(shù)4為時,7為分,10為秒char shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void write_nyr(uchar add,char date)/1602液晶刷新年月日函數(shù)3為年,6為分,9為秒char shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);void write_week(c
5、har we)/寫液晶星期顯示函數(shù)write_com(0x80+12);switch(we)case 1:write_date('m');delay(5);write_date('o');delay(5);write_date('n');break;case 2:write_date('t');delay(5);write_date('u');delay(5);write_date('e');break;case 3:write_date('w');delay(5);write_da
6、te('e');delay(5);write_date('d');break;case 4:write_date('t');delay(5);write_date('h');delay(5);write_date('u');break;case 5:write_date('f');delay(5);write_date('r');delay(5);write_date('i');break;case 6:write_date('s');delay(5)
7、;write_date('a');delay(5);write_date('t');break;case 7:write_date('s');delay(5);write_date('u');delay(5);write_date('n');break;void keyscan()if(flag_ri=1)/這里用來取消鬧鐘報警,任一鍵取消報警if(s1=0)|(s2=0)|(s3=0)|(s4=0)delay(5);if(s1=0)|(s2=0)|(s3=0)|(s4=0)while(!(s1&&
8、s2&&s3&&s4); di();flag_ri=0;/清除報警標(biāo)志 if(s1=0)/檢測s1delay(5);if(s1=0)s1num+;/記錄按下次數(shù)if(flag1=1)if(s1num=4)s1num=1;flag=1;while(!s1);di();switch(s1num)/光標(biāo)閃爍點定位case 1: write_com(0x80+0x40+10); write_com(0x0f);break;case 2: write_com(0x80+0x40+7);break;case 3: write_com(0x80+0x40+4);break;c
9、ase 4: write_com(0x80+12);break;case 5: write_com(0x80+9);break;case 6: write_com(0x80+6);break;case 7: write_com(0x80+3);break;case 8: s1num=0;write_com(0x0c);flag=0;write_ds(0,miao);write_ds(2,fen);write_ds(4,shi);write_ds(6,week);write_ds(7,day);write_ds(8,month);write_ds(9,year);break;if(s1num!=
10、0)/只有當(dāng)s1按下后,才檢測s2和s3if(s2=0)delay(1);if(s2=0)while(!s2);di();switch(s1num)/根據(jù)功能鍵次數(shù)調(diào)節(jié)相應(yīng)數(shù)值case 1:miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10); break;case 2:fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7); break;case 3:shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0
11、x80+0x40+4); break;case 4:week+;if(week=8)week=1;write_week(week);write_com(0x80+12);break;case 5:day+;if(day=32)day=1;write_nyr(9,day);write_com(0x80+9);break;case 6:month+;if(month=13)month=1;write_nyr(6,month);write_com(0x80+6);break;case 7:year+;if(year=100)year=0;write_nyr(3,year);write_com(0x8
12、0+3);break;if(s3=0)delay(1);if(s3=0)while(!s3);di();switch(s1num)/根據(jù)功能鍵次數(shù)調(diào)節(jié)相應(yīng)數(shù)值case 1:miao-;if(miao=-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);break; case 2:fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);break;case 3:shi-;if(shi=-1)shi=23;write_sfm(4,shi);write_com(0x80+0x4
13、0+4);break;case 4:week-;if(week=0)week=7;write_week(week);write_com(0x80+12);break;case 5:day-;if(day=0)day=31;write_nyr(9,day);write_com(0x80+9);break;case 6:month-;if(month=0)month=12;write_nyr(6,month);write_com(0x80+6);break;case 7:year-;if(year=-1)year=99;write_nyr(3,year);write_com(0x80+3);bre
14、ak;if(s4=0)/檢測s4delay(5);if(s4=0)flag1=flag1;while(!s4);di();if(flag1=0)/退出鬧鐘設(shè)置時保存數(shù)值flag=0;write_com(0x80+0x40);write_date(' ');write_date(' ');write_com(0x0c);write_ds(1,miao);write_ds(3,fen);write_ds(5,shi);else/進入鬧鐘設(shè)置read_alarm();/讀取原始數(shù)據(jù)miao=amiao;/重新賦值用以按鍵調(diào)節(jié)fen=afen;shi=ashi;writ
15、e_com(0x80+0x40);write_date('r');/顯示標(biāo)志write_date('i');write_com(0x80+0x40+3);write_sfm(4,ashi);/送液晶顯示鬧鐘時間write_sfm(7,afen);write_sfm(10,amiao);void write_ds(uchar add,uchar date)/寫12c887函數(shù)dscs=0;dsas=1;dsds=1;dsrw=1;p0=add;/先寫地址dsas=0;dsrw=0;p0=date;/再寫數(shù)據(jù)dsrw=1;dsas=1;dscs=1;uchar re
16、ad_ds(uchar add)/讀12c887函數(shù) uchar ds_date;dsas=1;dsds=1;dsrw=1;dscs=0;p0=add;/先寫地址dsas=0;dsds=0;p0=0xff;ds_date=p0;/再讀數(shù)據(jù)dsds=1;dsas=1;dscs=1;return ds_date;/*-首次操作12c887時給予寄存器初始化-void set_time()/首次上電初始化時間函數(shù)write_ds(0,0);write_ds(1,0);write_ds(2,0);write_ds(3,0);write_ds(4,0);write_ds(5,0);write_ds(6,
17、0);write_ds(7,0);write_ds(8,0);write_ds(9,0);-*/void read_alarm()/讀取12c887鬧鐘值amiao=read_ds(1);afen=read_ds(3);ashi=read_ds(5);void main()/主函數(shù)init();/調(diào)用初始化函數(shù)while(1)keyscan();/按鍵掃描if(flag_ri=1)/當(dāng)鬧鐘中斷時進入這里di();delay(100);di();delay(500);if(flag=0&&flag1=0)/正常工作時進入這里keyscan();/按鍵掃描year=read_ds(
18、9);/讀取12c887數(shù)據(jù)month=read_ds(8);day=read_ds(7);week=read_ds(6);shi=read_ds(4);fen=read_ds(2);miao=read_ds(0);write_sfm(10,miao);/送液晶顯示write_sfm(7,fen);write_sfm(4,shi);write_week(week);write_nyr(3,year);write_nyr(6,month);write_nyr(9,day);void exter() interrupt 2/外部中斷1服務(wù)程序uchar c; /進入中斷表示鬧鐘時間到,flag_r
19、i=1; /設(shè)置標(biāo)志位,用以大程序中報警提示c=read_ds(0x0c);/讀取12c887的c寄存器表示響應(yīng)了中斷代碼2:#include<reg52.h>#include"shijian.h"/*模式選擇*/void keyscan1()if(s4=0); delay(5); if(s4=0) s4num+;while(!s4);switch(s4num)case 1:flag1=flag1;if(flag1=1) /打鈴時間間隔設(shè)置標(biāo)志位(防止在設(shè)置時顯示時間) /把鬧鈴的寄存器作為打鈴的寄存器使用read_alarm(); /先讀取鬧鈴時間miao=a
20、miao; /在把鬧鈴值賦給時間值用以調(diào)節(jié)fen=afen; shi=ashi;write_com(0x80+0x40);write_date('r'); /顯示標(biāo)志write_date('i');write_com(0x80+0x40+3);display(0x40+4,ashi); /顯示間隔時間display(0x40+7,afen);display(0x40+10,amiao);break;/*/case 2: flag1=flag1;if(flag1=0) /清除標(biāo)志位flag=0;write_com(0x80+0x40);write_date(
21、9; ');/清除打鈴時間間隔標(biāo)志位write_date(' ');write_com(0xc0);write_ds(1,miao); /儲存間隔時間write_ds(3,fen);write_ds(5,shi);/*/flag_paobiao=flag_paobiao;miao_pb=0;/先把跑表值都賦為0fen_pb=0;tt=0;while(!s2);if(flag_paobiao=1)init_paobiao();/*/break;case 3:flag_paobiao=flag_paobiao;if(flag_paobiao=0)write_com(0x80
22、+0x40);write_date(' ');write_date(' ');/*/flag2=flag2;if(flag2=1)miao=miaonz1; /把鬧鈴值賦給時間值用來調(diào)整鬧鈴fen=fennz1; shi=shinz1;write_com(0x80+0x40);write_date('n');write_date('z');write_date('1');write_com(0x80+0x40+3);display(0x40+4,shinz1);display(0x40+7,fennz1);disp
23、lay(0x40+10,miaonz1);break;/*/case 4:flag2=flag2;if(flag2=0)miaonz1=miao; /把調(diào)整好的時間值賦回給鬧鈴值(保存鬧鈴值)fennz1=fen;shinz1=shi;flag=0;write_com(0x80+0x40);write_date(' ');write_date(' ');write_date(' ');/*/flag21=flag21;if(flag21=1)miao=miaonz2; fen=fennz2; shi=shinz2;write_com(0x80+0
24、x40);write_date('n');write_date('z');write_date('2');write_com(0x80+0x40+3);display(0x40+4,shinz2);display(0x40+7,fennz2);display(0x40+10,miaonz2); delay(5);break;/*/ case 5:flag21=flag21;if(flag21=0)miaonz2=miao;fennz2=fen;shinz2=shi;flag=0;write_com(0x80+0x40);write_date(
25、39; ');write_date(' ');write_date(' '); /*溫濕度*/ flag22=flag22; if(flag22=1)write_com(0x80);write_date('w');write_date(':');write_date(' ');write_date(' ');write_date('.');write_date(' ');write_date(' ');write_date(' '
26、;);write_date('s');write_date(':');write_date(' ');write_date(' ');write_date('.'); tempval=measure_t(); humival=measure_h(); if(error=0) delayms(500); dis_tempval=c_t(tempval); disply_t(dis_tempval); dis_humival=c_h(dis_tempval,humival); disply_h(dis_humival)
27、; break; /*/ case 6:flag22=flag22;if(flag22=0)write_com(0x80);write_date(' ');write_date('2');write_date('0');write_date(' ');write_date(' ');write_date('-');write_date(' ');write_date(' ');write_date('-');write_date(' '
28、);write_date(' ');write_date(' ');write_date(' ');write_date(' ');write_date(' ');write_date(' ');flag23=flag23;if(flag23=1) write_com(0x80);write_date('u');write_date(':');write_date(' ');write_date('.');write_date('
29、; ');write_date(' ');write_date('v');write_date(' ');write_date('i');write_date(':');write_date(' ');write_date('.');write_date(' ');write_date(' ');write_date('a');write_date(' '); adval=readadc() ; /讀取ad值 d
30、isply_y(adval); /電壓值顯示 delay(30); / ad_val=255-adval; / disply_l(ad_val); /電壓值顯示 delay(30); break;case 7:flag23=flag23;if(flag23=0)write_com(0x80);write_date(' ');write_date('2');write_date('0');write_date(' ');write_date(' ');write_date('-');write_dat
31、e(' ');write_date(' ');write_date('-');write_date(' ');write_date(' ');write_date(' ');write_date(' ');write_date(' ');write_date(' ');write_date(' ');break; case 8:s4num=0;break; /*/if(flag_paobiao=1)if(s2=0)delay(5);if(s2=0)while(!s2);tr0=tr0;display_paobiao();void shijian()uchar miaoy;year=read_ds(9);month=read_ds(8);day=read_ds(7);week=read_ds(6);shi=read_ds(4);fen=read_ds(2);miaoy=miao; /把當(dāng)前秒賦給miaoy用以判斷秒是否變化miao=read_ds(0); if(flag3=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路運輸管理工作總結(jié)
- 手足口知識培訓(xùn)課件
- 腰椎間盤突出的自我治療課件
- 污水處理場隔油池浮選池的一體化改造項目可行性研究報告模板-立項備案
- 保定學(xué)院《航空市場營銷》2023-2024學(xué)年第一學(xué)期期末試卷
- 保定學(xué)院《大學(xué)生心理健康輔導(dǎo)》2021-2022學(xué)年第一學(xué)期期末試卷
- 學(xué)校大型活動安全管理制度61
- 寶雞文理學(xué)院《中華響扇》2021-2022學(xué)年第一學(xué)期期末試卷
- 保定學(xué)院《博物館學(xué)概論》2021-2022學(xué)年第一學(xué)期期末試卷
- 壺蓋塞相關(guān)項目建議書
- 月考綜合測試卷(3-4單元)(單元測試)2024-2025學(xué)年語文六年級上冊統(tǒng)編版
- 2024年汽輪機葉片項目可行性研究報告
- 肺結(jié)節(jié)診治中國專家共識(2024年版)解讀
- GB/T 16311-2024道路交通標(biāo)線質(zhì)量要求和檢測方法
- 醫(yī)師三基測試題庫及答案
- DB37T 5284-2024 建筑施工現(xiàn)場塔式起重機安裝拆卸安全技術(shù)規(guī)程
- 5《老師您好》教學(xué)設(shè)計-2024-2025學(xué)年道德與法治一年級上冊統(tǒng)編版
- 基礎(chǔ)模塊 1 Unit 2 Transportation 單元過關(guān)檢測-【中職適用】2025年高考英語一輪復(fù)習(xí)教材全面梳理(高教版2023修訂版)
- 山東省泰安市寧陽縣青島版(五四制)科學(xué)五年級上冊第一單元測試卷
- (2024)新 公司法知識競賽題庫與答案
- 《在民族復(fù)興的歷史豐碑上》課件
評論
0/150
提交評論