版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、#include<reg52.h> /52單片機頭文件,聲明各寄存器等#include <intrins.h>#define uint unsigned int /宏定義符號,類似于替換#define uchar unsigned char sbit key1=P34; /宏定義位,也即IO口定義sbit key2=P35; sbit key3=P36; sbit key4=P37; sbit fm=P23;sbit dula=P26;sbit wela=P27;sbit bear=P23;uint i; /定義各符號uchar aa,bb,numdu,numwe;uc
2、har sec1,min1,hour1,year1,mon1,day1,temp1,temp2,sec2,min2,hour2; /主功能符號定義uchar code tablew=0x71,0x6d,0x5b,0x3f,0x6d,0x5b,0x06, ;uchar code tablewe=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;uchar code table=0x3f,0x06,0x5b,0x4f, /主功能數組定義0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void w1(); /子函數聲明
3、void w2();void w3();void w4();void delayms(uint xms); void timer0();void delay(uint z); /主功能子函數聲明 void init();void display(uchar hour,uchar min,uchar sec);void keyscan(); void alarm();void time1();/*- 主函數-*/void main() key1=1;key2=1;key3=1;key4=1;while(1) while(!key1)w1();while(!key2)w2();while(!key
4、3)w3();while(!key4)w4(); /*- 按鍵控制蜂鳴器過程 -*/void w1()if(!key1)delayms(300); /延時防抖,松手檢測if(key1) fm=!fm; /*- 按鍵控制流水燈過程 -*/void w2()loop1:P1=0xff;if(!key2) delayms(300);if(key2)aa=0xfe;/賦初值11111110 while(1) /大循環(huán)P1=aa;delayms(100); /延時500毫秒aa=_crol_(aa,1); /將aa循環(huán)左移1位后再賦給aa /相應的cror是循環(huán)右移一位 if(!key2)delayms
5、(300);if(key2)goto loop1; /*- 按鍵控制數碼管過程 -*/void w3() loop2:wela=1; P0=0xff; if(!key3) delayms(300);if(key3)numdu=0;numwe=0;while(1)numdu+;if(numdu=7)numdu=1;dula=1; /開段鎖存器P0=tablewnumdu; /送段碼dula=0; /鎖存段碼wela=1; /開位鎖存器P0=tablewenumwe; /送位碼wela=0; /鎖存位碼numwe+;if(numwe=6)numwe=0;delayms(5); if(!key3)d
6、elayms(300);if(key3)goto loop2; /*- 按鍵控制作息時間過程 -*/void w4()if(!key4) delayms(300);if(key4)init(); /主功能主程序while(1) keyscan();alarm(); /*-延時函數(用于按鍵,蜂鳴器,流水燈等的延時)-*/void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時約xms毫秒for(j=110;j>0;j-);/*- 主功能相關所有子程序-*/void delay(uint z) /延時程序/uint x,y;
7、for(x=0;x<z;x+)for(y=0;y<110;y+);void init() /賦初值程序/TMOD=0X02; /選擇模式2,可自動重裝載的八位計數器TH0=6; /給TH0賦初值 最大256-250=6 ;250與后面的3886相乘約為1sTL0=6; /給TH0賦初值 自動裝入初值TL=TH6EA=1; /開總中斷ET0=1; /開T0中斷TR0=1;hour1=15;min1=20; sec1=57;year1=11;mon1=12;day1=24;void display(uchar hour,uchar min,uchar sec) /顯示程序/uchar
8、s1,s2,m1,m2,h1,h2; /該段用于數碼管顯示要賦的值s2=sec/10; /顯示秒的第二位,即個位s1=sec%10; /顯示秒的第一位,即十位 ; “%” 兩邊為整型,表示取余; m2=min/10; /下四句同m1=min%10;h2=hour/10;h1=hour%10;dula=1; /顯示小時的十位數P0=tableh2; dula=0;P0=0XFF; /P0初始化wela=1;P0=0XFE; /打開第一位數碼管delay(1);dula=1; /顯示小時的個位數P0=tableh1+0x80; /0x80顯示小數點dula=0;P0=0XFF; /P0初始化wel
9、a=1; P0=0XFd; /打開第二位數碼管delay(1);dula=1; /顯示分鐘的十位數P0=tablem2;dula=0;P0=0XFF;wela=1;P0=0XFb;delay(1);dula=1; /顯示分鐘的個位數P0=tablem1+0x80;dula=0;P0=0XFF;wela=1;P0=0XF7;delay(1);dula=1; /顯示秒的十位數P0=tables2;dula=0;P0=0XFf;wela=1;P0=0Xef;delay(1);dula=1; /顯示秒的個位數P0=tables1;dula=0;P0=0XFF;wela=1;P0=0Xdf;delay(
10、1);void keyscan() /鍵盤掃描程序/if(key1=0)delay(10);if(key1=0)/TR0=0;temp1+;if(temp1=4) /temp1用于記小時,分鐘,秒的數碼管temp1=0; TR0=1;while(!key1)switch(temp2) /temp2用于記日歷,鬧鐘,時鐘三種模式case 0:display(hour1,min1,sec1);break;case 1:display(year1,mon1,day1);break;case 2:display(hour2,min2,sec2);break;if(key2=0)delay(10);if
11、(key2=0)if(temp2=0)TR0=0;switch(temp1)case 1:sec1+;if(sec1=60)sec1=0;break;case 2:min1+;if(min1=60)min1=0;break;case 3:hour1+;if(hour1=24)hour1=0;break;while(!key2)display(hour1,min1,sec1);if(temp2=1)TR0=1;switch(temp1)case 1:day1+;if(day1=31)day1=1;break;case 2:mon1+;if(mon1=13)mon1=1;break;case 3:
12、year1+;if(year1=100)year1=0;break;while(!key2)display(year1,mon1,day1);if(temp2=2)TR0=1;switch(temp1)case 1:sec2+;if(sec2=60)sec2=0;break;case 2:min2+;if(min2=60)min2=0;break;case 3:hour2+;if(hour2=24)hour2=0;break;while(!key2)display(hour2,min2,sec2);if(key3=0)delay(10);if(key3=0)if(temp2=0)TR0=0;s
13、witch(temp1)case 1:if(sec1=0)sec1=60;sec1-;break;case 2:if(min1=0)min1=60;min1-;break;case 3:if(hour1=0)hour1=24;hour1-;break;while(!key3)display(hour1,min1,sec1);if(temp2=1)TR0=1;switch(temp1)case 1:if(day1=1)day1=31;day1-;break;case 2:if(mon1=1)mon1=13;mon1-;break;case 3:if(year1=0)year1=100;year1
14、-;break;while(!key3)display(year1,mon1,day1);if(temp2=2)TR0=1;switch(temp1)case 1:if(sec2=0)sec2=60;sec2-;break;case 2:if(min2=0)min2=60;min2-;break;case 3:if(hour2=0)hour2=24;hour2-;break;while(!key3)display(hour2,min2,sec2);if(key4=0)delay(10);if(key4=0)temp1=0;temp2+;if(temp2=3)temp2=0;while(!key
15、4)switch(temp2)case 0:display(hour1,min1,sec1);break;case 1:display(year1,mon1,day1);break;case 2:display(hour2,min2,sec2);break;switch(temp2)case 0:display(hour1,min1,sec1);break;case 1:display(year1,mon1,day1);break;case 2:display(hour2,min2,sec2);break;void alarm() /蜂鳴器,流水燈程序/uint i; if(hour1=hou
16、r2&&min1=min2&&(sec1>=sec2&&sec1<sec2+30)|(min1=0&&sec1<20) /鬧鐘響30秒,正點報時20秒功能for(i=0;i<20;i+)bear=bear;P1=P1;switch(temp2)case 0:display(hour1,min1,sec1);break;case 1:display(year1,mon1,day1);break;case 2:display(hour2,min2,sec2);break;delay(30);bear=1;P1=0xff;/*void mainw() /主功能主程序/init();while(1) keyscan
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度光伏發(fā)電項目建筑工程承包施工合同4篇
- 2025版民間借款擔保人責任險合同范本4篇
- 2025年度影視制作民間借貸與融資合同4篇
- 2025年度個人住房按揭貸款合同4篇
- 二零二五年度電子商務創(chuàng)業(yè)孵化器運營與管理合同4篇
- 二零二五年度幼兒園教室窗簾采購合同范本3篇
- 2025版智慧城市建設與數據服務合同范本4篇
- 二零二五版門窗安裝與智能化安防系統(tǒng)合同4篇
- 二零二五年度商業(yè)地產租賃合同5篇
- 2025年度特色民宿租賃經營合同規(guī)范4篇
- GB/T 37238-2018篡改(污損)文件鑒定技術規(guī)范
- 普通高中地理課程標準簡介(湘教版)
- 河道治理工程監(jiān)理通知單、回復單范本
- 超分子化學簡介課件
- 高二下學期英語閱讀提升練習(一)
- 易制爆化學品合法用途說明
- 【PPT】壓力性損傷預防敷料選擇和剪裁技巧
- 大氣喜慶迎新元旦晚會PPT背景
- DB13(J)∕T 242-2019 鋼絲網架復合保溫板應用技術規(guī)程
- 心電圖中的pan-tompkins算法介紹
- 羊絨性能對織物起球的影響
評論
0/150
提交評論