【正文】
02 = 0。 RST_1302 = 0。}/******************************************************************//* 1302初始化設定 *//******************************************************************/void init_1302(){ RST_1302 = 0。 //定時器中斷允許 TR0 = 1。 //讀取1302的日期 month = bcd_dec(read_1302(0x89))。 //1602顯示的月份 write_ymd(2,year)。 //寫入光標位置 write_1602_wcmd(0x0f)。 //hour閃爍 case 4: write_1602_wcmd(0x8b)。 //year閃爍 case 8: write_1602_wcmd(0x0c)。 //等待按鍵釋放 switch(settimemode) //功能鍵按鍵次數(shù)不同實現(xiàn)不同操作 { case 1:second++。 write_hms(4,minute)。 //寫入新的小時 write_1602_wcmd(0xc2)。 case 5:day++。 write_ymd(5,month)。//寫入新的年份 write_1602_wcmd(0x83)。//寫入新的秒數(shù) write_1602_wcmd(0xc8)。 case 3:hour。 write_week(week)。//寫入新的日期數(shù) write_1602_wcmd(0x89)。 case 7:year。 } } } } }/*。//寫入新的月份數(shù) write_1602_wcmd(0x86)。 write_ymd(8,day)。 case 4:week。//寫入新的分鐘數(shù) write_1602_wcmd(0xc5)。 write_hms(7,second)。 write_ymd(2,year)。 case 6:month++。 //寫入新的星期 write_1602_wcmd(0x8b)。 write_hms(1,hour)。 case 2:minute++。再按以下鍵才有效 { if(key_add==0) //上調(diào)鍵 { delay(20)。 //month閃爍 case 7: write_1602_wcmd(0x83)。 //minute閃爍 case 3: write_1602_wcmd(0xc2)。 switch(settimemode) //功能鍵按鍵次數(shù)不同實現(xiàn)不同操作 { case 1: //時調(diào)整秒 TR0 = 0。 //1602顯示的小時 write_ymd(8,day)。 //讀取1302的分鐘 hour = bcd_dec(read_1302(0x85))。 //定時器0初值為0 TL0 = 0。 RST_1302 = 0。 RST_1302 = 0。 //下降沿輸出數(shù)據(jù) ACC = ACC1。 ACC = ACC1。 }}/******************************************************************//* 寫一個字節(jié)到1302 *//******************************************************************/void write_1302_byte(uchar dat){ uchar i。 //在第一行對應位置顯示 write_1602_wdat(0x30+sw)。 //分出個位數(shù)據(jù) sw = dat/10。 //置為寫入數(shù)據(jù),高為寫數(shù)據(jù) LCD_RW = 0。}/******************************************************************//* 寫指令到LCD *//******************************************************************/void write_1602_wcmd(uchar ){ LCD_RS = 0。 //清除LCD的顯示內(nèi)容 write_1602_wcmd(0x80)。i) for(j=150。 decimal = bcd/16*10 + bcd%16。/******************************************************************//* 主函數(shù) *//******************************************************************/void main(){ lcd_init()。 //1302字節(jié)讀void write_1302(uchar address,uchar dat)。 //液晶初始化void write_1602_wcmd(uchar )。 //時間和鬧鐘的功能選擇標志uchar alarmflag=0。//與蜂鳴器同一功能,替代蜂鳴器sbit settime = P1^0。這次畢業(yè)設計得到了許多老師和同學的幫助,特別是廖老師耐心的指導,對我提出的疑問悉心一一解答,還有就是幾位給予我建議和提供元器件的同學。首先上電,直接顯示界面如圖22,未調(diào)節(jié)按動鬧鐘設置鍵,無顯示鬧鈴標志。在編程前畫了流程框圖以便順利編程各程序結(jié)合,思路較為清晰,能夠按部就班進行調(diào)試。6系統(tǒng)調(diào)試本次設計調(diào)試過程主要是在普中HC6800開發(fā)實驗板上進行,實驗板上硬件資源較為豐富,包含了STC89C52單片機、按鍵模塊,蜂鳴器,DS1302時鐘芯片,只需另外購置1602液晶顯示屏,紅外傳感模塊,反相器,搖擺器。(3) DS1302讀寫程序 DS1302的讀寫,需要有讀寫操作的開啟和禁止,時間日期星期的讀寫,BCD和十進制的互相轉(zhuǎn)換。(5)工作電壓范圍寬:默認工作電壓DC5V至20V(6)微功耗:靜態(tài)電流65微安,特別適合干電池供電的電器產(chǎn)品。光敏控制為可選功能,出廠時未安裝光敏電阻。由12管腳輸出的信號再經(jīng)由電壓比較器COP1和COP2構(gòu)成的雙向鑒幅器、狀態(tài)控制器處理后,從2端口輸出。,為時間功能鍵;,為上調(diào)按鍵;,為下調(diào)按鍵;,為鬧鈴設置鍵,詳細功能將在軟件設計中提到。:芯片引腳119外接晶振及電容,晶振的頻率決定單片機的工作頻率,STC89C52的工作頻率在2~33MHz之間,一般選取12MHz晶振,兩個電容一般取值3pF。通常接VDD,當接“0”時可使定時器復位9VCI觸發(fā)禁止端。內(nèi)部電路如如圖5(a),使用時D端接電源正極,G端接電源負極,S端為信號輸出。 1602字符液晶使用基本操作時序基本操作時序,如表3:表3 1602液晶屏操作時序操作輸入輸出讀狀態(tài)RS=L,RW=H,E=HD0~D7=狀態(tài)字寫指令RS=L,RW=L,D0~D7=指令碼,E=高脈沖無讀數(shù)據(jù)RS=H,RW=H,E=HD0~D7=數(shù)據(jù)寫數(shù)據(jù)RS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖無 熱釋電紅外傳感器介紹熱釋電紅外傳感器是一種被動式調(diào)制型溫度敏感器,也稱熱探測型傳感器。 圖4 1602字符液晶 1602引腳介紹表2 1602字符液晶引腳說明編號符號引腳說明編號符號引腳說明1GND電源地2VCC電源正極3VO液晶顯示對比度調(diào)節(jié)端4RS數(shù)據(jù)/命令選擇端5R/W讀寫選擇6E使能信號7D0數(shù)據(jù)口8D1數(shù)據(jù)口9D2數(shù)據(jù)口10D3數(shù)據(jù)口11D4數(shù)據(jù)口12D5數(shù)據(jù)口13D6數(shù)據(jù)口14D7數(shù)據(jù)口15BLA背光電源正16BLK背光電源負各個引腳具體功能說明:第1腳:GND為地電源。數(shù)據(jù)在時鐘(SCLK)的上升沿串行輸入,前8位指定訪問地址,命令字裝入移位寄存器后,在之后的時鐘周期,讀操作時輸出數(shù)據(jù),寫操作時輸出數(shù)據(jù)。表1 STC89C52主要功能主要功能特性兼容MCS51指令系統(tǒng)8K可反復擦寫Flash ROM32個雙向I/O口256x8bit內(nèi)部RAM3個16位可編程定時/計數(shù)器中斷時鐘頻率024MHz2個串行中斷可編程UART串行通道2個外部中斷源共6個中斷源2個讀寫中斷口線3級加密位低功耗空閑和掉電模式軟件設置睡眠和喚醒功能 STC89C52引腳介紹① 主電源引腳(2根)VCC(Pin40):電源輸入,接+5V電源GND(Pin20):接地線②外接晶振引腳(2根)XTAL1(Pin19):片內(nèi)振蕩電路的輸入端XTAL2(Pin20):片內(nèi)振蕩電路的輸出端③控制引腳(4根)RST/VPP(Pin9):復位引腳,引腳上出現(xiàn)2個機器周期的高電平將使單片機復位。采用此方案可以減少芯片的使用,節(jié)省成本,但是,考慮到這樣實現(xiàn)的時間誤差較大??紤]到成本因素,決定選用STC89C52。鬧鐘通常用于早晨喚床,以免因為貪睡賴床誤了上班上課的時間,目前大眾使用的鬧鐘,鈴聲響起時,只要伸手隨意按下開關(guān),鬧鈴就會停下來,這種隨意性助長了“再睡一會”的賴床心理,人們往往遲到誤點之后才會后悔不已,但是又很難靠自己改變賴床的不良習慣,為工作學習帶來許多不良影響。兩者的結(jié)合可廣泛運用于生產(chǎn)設備,家用電器,辦公配置,公共設施等領(lǐng)域,以新的理念打造新的應用,實現(xiàn)更多意想不到的功能,在智能儀表中的應用,機電一體化中的應用,在不定時控制中的應用,在人類生活中的應用,在許多的領(lǐng)域應用前景看好。關(guān)鍵詞:STC89C52,1602 液晶顯示屏,熱釋電紅外傳感器,DS1302時鐘芯片 Based on single chip microputer infrared alarm device design and implementationAbstract:With the improvement of life rhythm, the transaction will be a variety of perspectives, people more and more inseparable from electronic products regularly remind function, and the most typical is the alarm clock wake up in the morning and many people depend on the bed and sleep up bad habits, and affected to work or school, this article in view of this part design a crowd has forced intelligent sensing alarm clock wake up function.Microcontroller is applicable to mechanical and electrical integration of intelligent product, control function is strong, the pyroelectric crystal as an ideal detector, infrared laser is widely applied to various kinds of automation control device, this design is based on intelligent forced wake up way, prevent the lazy bed design concept, STC89C52 singlechip control as the core, based on DS1302 clock chip, 1602 LCD screen, button circuit, pyroelectric infrared sensor module, periodic shading device. In addition to the basic ala