基于單片機(jī)的時(shí)間控制器_第1頁
基于單片機(jī)的時(shí)間控制器_第2頁
基于單片機(jī)的時(shí)間控制器_第3頁
基于單片機(jī)的時(shí)間控制器_第4頁
基于單片機(jī)的時(shí)間控制器_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、摘 要本設(shè)計(jì)詳細(xì)介紹了利用AT89C51單片機(jī)設(shè)計(jì)時(shí)間控制器的方法。該時(shí)間控制器是以AT89C51單片機(jī)為核心,擴(kuò)展一片XICOR公司的X5045組成的小系統(tǒng),控制一路繼電器:可以設(shè)定一天中的時(shí)間,設(shè)定繼電器的開啟時(shí)間和關(guān)閉時(shí)間,可以清除不需要的定時(shí),能夠緊急啟動(dòng):所有的設(shè)定均通過鍵盤實(shí)現(xiàn),按鍵具有連擊功能,每個(gè)狀態(tài)都有指示燈提示。我們設(shè)計(jì)的作息時(shí)間控制是用單片機(jī)實(shí)現(xiàn)的,是為了更好的對時(shí)間控制智能化。時(shí)間控制器包括硬件和軟件。硬件部分包括繼電器,存儲(chǔ)器和顯示器接口芯片。軟件部分,主要是主程序設(shè)計(jì)。軟硬件結(jié)合在一起,先調(diào)試子程序,然后逐級疊加調(diào)試,最后系統(tǒng)調(diào)試通過。時(shí)間控制系統(tǒng)可以準(zhǔn)確的顯示時(shí)間

2、,在定時(shí)時(shí)間到時(shí)發(fā)出悅耳的鈴聲提醒同學(xué)們按時(shí)上下課。關(guān)鍵詞:單片機(jī),控制,時(shí)間AbstractThis design USES AT89C51 is introduced time controller design method. The time controller based on AT89C51 single-chip microcomputer as the core, expanding a XICOR X5045 consisting of small systems, control relay all the way: you can set the time of day

3、, set the relay open time and close time, timing, can remove don't need to start the emergency: all set by keyboard and buttons with functions of combo, each state has a light hint. Our design work and rest time control are implemented using single chip microcomputer, is intelligent in order to

4、better control over time. Time controller includes hardware and software. Hardware part includes relay, storage and display interface chip. Software part, mainly is the main program design. Hardware and software together, debugging subroutine first, and then overlay debugging step by step, finally s

5、ystem debugging through. Time control system can accurately display the time in the regular time when a melodious bell remind students adding and dropping classes on time.目錄1 系統(tǒng)設(shè)計(jì)方案與論證321設(shè)計(jì)要求322系統(tǒng)設(shè)計(jì)總體方案.32系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn).4211時(shí)鐘芯片DS12887性能簡介.4212時(shí)鐘芯片讀寫時(shí)序.6213 時(shí)間寄存器地址6214 特殊控制寄存器功能7221 液晶SYB12864介紹8222 液晶與

6、單片機(jī)的接口8223 液晶寫操作時(shí)序9231 紅外發(fā)送與接收10232 遙控碼數(shù)據(jù)分析10233 接收電路11241電源部分電路圖 113程序設(shè)計(jì) 123 主程序流程圖122 按鍵識(shí)別.1333 課表計(jì)算1334 遙控解碼144系統(tǒng)測試與總結(jié) 16附錄1主要元器件清單.17附錄2程序清單.18附錄3原理圖與印制板圖. 35附錄4系統(tǒng)使用說明. 36附錄5系統(tǒng)實(shí)物圖片. 371系統(tǒng)設(shè)計(jì)方案與比較設(shè)計(jì)要求一、時(shí)鐘功能:能顯示年、月、日、星期、時(shí)、分、秒 二、調(diào)整功能:能校正年份、日期、時(shí)間等三、打鈴功能:按指定時(shí)間表播放音樂、現(xiàn)場修改作息時(shí)間表四、設(shè)置的作息時(shí)間表數(shù)據(jù)在單片機(jī)掉電后不會(huì)丟失2系統(tǒng)設(shè)

7、計(jì)總體方案 根據(jù)設(shè)計(jì)要求實(shí)現(xiàn)的功能,可以采用不同的設(shè)計(jì)系統(tǒng)方案如下:方案一:采用單片機(jī)自帶定時(shí)器進(jìn)行計(jì)時(shí),外加存儲(chǔ)器保存課表數(shù)據(jù),普通鍵盤輸入。由于單片機(jī)進(jìn)行軟件計(jì)時(shí),硬件成本比較低,但是誤差比較大,需要校準(zhǔn),日后的維護(hù)工作量比較大。可用廉價(jià)的AT24C04等存儲(chǔ)器保存數(shù)據(jù),讀寫比較容易。對于普通的獨(dú)鍵盤,設(shè)置量比較大,改用矩陣鍵盤又會(huì)占用較大的電路板空間。方案二:采用實(shí)時(shí)時(shí)鐘芯片計(jì)時(shí),紅外數(shù)據(jù)輸入。時(shí)鐘芯片常見的有美信公司的DS1302、DS12887等前者與后者的最大區(qū)別在于有沒有自帶的備份電池。前者需要增加額外的電池以及相關(guān)的充電電路,后者DS12887本身已經(jīng)集成了鋰電池,而且掉電后相

8、當(dāng)長一段時(shí)間還可以正常走時(shí),最重要的是它還剩下114字節(jié)的非易失RAM,由于有備份電池供電,相當(dāng)于一個(gè)存儲(chǔ)器,可以充分利用,而不需要增加另外的存儲(chǔ)器,減少了外圍電路。電視紅外遙控比較常見,只要解碼出來,可以充分利用面板上的多個(gè)數(shù)字鍵,接收電路也相當(dāng)簡單,另外由于是非接觸式按鍵,避免了普通機(jī)械按鍵的磨損弊端。故本設(shè)計(jì)選用第二種方案總體方框圖如下:單片機(jī)89S52時(shí)鐘芯片DS12887紅外接收頭遙控液晶顯示蜂鳴器系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)1時(shí)鐘芯片DS12887性能簡介11 時(shí)鐘芯片特點(diǎn)功能簡介及引腳分布如圖: 12讀寫時(shí)序13時(shí)間寄存器地址值得注意的是上表中最后的寄存器地址0EH-7FH,這里就是剩余

9、的144字節(jié)RAM,在本設(shè)計(jì)中實(shí)際使用的是10H13H四個(gè)字節(jié),用于保存課表上午和下午的起始數(shù)據(jù)。214 特殊控制寄存器功能22液晶顯示塊部分電路221液晶SYB12864功能與技術(shù)參數(shù)簡介 SYB12864是一種圖形點(diǎn)陣液晶顯示器,它主要由行驅(qū)動(dòng)器/ 列驅(qū)動(dòng)器及128×64全點(diǎn)陣液晶顯示器組成.可完成圖形顯示,內(nèi)置漢字庫,可以顯示8×4個(gè)(16×16點(diǎn)陣)漢字.主要技術(shù)參數(shù)和性能:1.電源:VDD:+5V;LCD外接驅(qū)動(dòng)電壓為 3.08.0V 2.顯示內(nèi)容:128(列)×64(行)點(diǎn)3.全屏幕點(diǎn)陣4.七種指令5.與CPU接口采用8位數(shù)據(jù)總線并行輸入輸出

10、和8條控制線.222液晶與單片機(jī)接口 外部接口信號如下表所示:管腳號管腳名稱LEVER管腳功能描述1VSS0V電源地2VDD5.0V電源電壓3V0-液晶顯示器驅(qū)動(dòng)電壓4RSH/LRS=“H”,表示DB7DB0為顯示數(shù)據(jù)RS=“L”,表示DB7DB0為顯示指令數(shù)據(jù)5R/WH/LR/W=“H”,E=“H”,數(shù)據(jù)被讀到DB7DB0R/W=“L”,E=“HL”, DB7DB0的數(shù)據(jù)被寫到IR或DR6EH/L使能信號:R/W=“L”,E信號下降沿鎖存DB7DB0 R/W=“H”,E=“H” DRAM數(shù)據(jù)讀到 DB7DB0 7DB0H/L數(shù)據(jù)線8DB1H/L數(shù)據(jù)線9DB2H/L數(shù)據(jù)線10DB3H/L數(shù)據(jù)線

11、11DB4H/L數(shù)據(jù)線12DB5H/L數(shù)據(jù)線13DB6H/L數(shù)據(jù)線14DB7H/L數(shù)據(jù)線15PSBH/LH:8或4位并口,L串口(本設(shè)計(jì)中硬件置高電平)16NC17RETH/L復(fù)位信號,低電平復(fù)位(如不需要經(jīng)常復(fù)位可以懸空)18VOUT10VLCD驅(qū)動(dòng)電壓19LED+-LED背光板電源20LED-LED背光板電源數(shù)據(jù)線D0D7與單片機(jī)P0口相連,完成數(shù)據(jù)傳送。單片機(jī)P1.0與液晶RS相連,控制顯示數(shù)據(jù)和顯示指令數(shù)據(jù). 單片機(jī)P1.1與液晶RW相連,控制數(shù)據(jù)讀寫. 單片機(jī)P1.2與液晶E相連,液晶REST與電源相連,控制液晶復(fù)位信號。18腳是液晶背光驅(qū)動(dòng)端,通過限流可變電阻調(diào)節(jié)對比度,由于經(jīng)過試

12、驗(yàn)測量可變電阻大概是16K,為了方便電路布局,用15K的固定電阻。液晶與單片機(jī)接口圖223液晶寫操作時(shí)序?qū)懖僮鲿r(shí)序R/W為低電平,CS為低電平寫入指令,R/W為低電平,CS為高電平寫入數(shù)據(jù)23紅外遙控231 發(fā)送與接收通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成。應(yīng)用編/解碼專用集成電路芯片來進(jìn)行控制操作,如圖 所示。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、LED 紅外發(fā)送器;接收部分包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路。232 遙控碼數(shù)據(jù)分析遙控發(fā)射器專用芯片很多,這里我們以運(yùn)用比較廣泛,解碼比較容易的一類來加以說明,以東芝公司的TC9012組成發(fā)射電路為例說明編碼原理。當(dāng)發(fā)射器按鍵按下后,即有遙控碼發(fā)

13、出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:采用脈寬調(diào)制的串行碼,以脈寬為 0.565ms、間隔0.56ms、周期為1.125ms 的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms 的組合表示二進(jìn)制的“1”,其波形如圖 所示。遙控碼的“0”和“1” 上述“0”和“1”組成的32位二進(jìn)制碼經(jīng)38kHz的載頻進(jìn)行二次調(diào)制,然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射。一般電視遙控器的遙控編碼是連續(xù)的32位二進(jìn)制碼組,其中前16位為用戶識(shí)別碼,能區(qū)別不同的紅外遙控設(shè)備,防止不同機(jī)種遙控碼互相干擾。后16位為8位的操作碼和8位的操作反碼,用于核對數(shù)據(jù)

14、是否接收準(zhǔn)確。根據(jù)紅外編碼的格式,發(fā)送數(shù)據(jù)前需要先發(fā)送4.5ms的起始碼和4.5ms的結(jié)果碼作為引導(dǎo)碼。遙控串行數(shù)據(jù)編碼波形如下圖所示:233接收電路接收電路較為簡單,采用一體化接收頭HS0038,濾波電容在這里可以減少電源帶來的干擾。如圖:24電源233接收電路241電源部分電路圖為達(dá)到提供穩(wěn)定5V供電電壓,變壓器采用了玩具車電池充電適配器,由于此電源只包含了全波整流電路,在此加上濾波電路和穩(wěn)壓電路,如圖。3系統(tǒng)的軟件設(shè)計(jì)31主程序流程圖主程序流程圖:讀取課表數(shù)據(jù)并計(jì)算讀取時(shí)間歡迎界面時(shí)鐘與液晶復(fù)位上電顯示時(shí)間比較課表True顯示課次,播放音樂FalseTrue鍵掃退出菜單選擇修改課表選擇查

15、看課表選擇調(diào)整時(shí)間調(diào)整時(shí)間上午課表修改課表保存設(shè)置下午課表保存設(shè)置32按鍵識(shí)別為了輸入簡單,用數(shù)字鍵直接輸入要設(shè)置的數(shù)字,而且沒有另外設(shè)置專門的光標(biāo)移位鍵,即輸入一個(gè)數(shù)字后自動(dòng)換到一個(gè)位置,如果有現(xiàn)成的不需要修改的數(shù)字,可以直接按任意非數(shù)字鍵跳過。由于進(jìn)行年月日等數(shù)據(jù)的保存時(shí)是以兩個(gè)鍵為一個(gè)單位(比如23),由此將產(chǎn)生一個(gè)問題,怎樣保存無效的鍵值,即如果第一個(gè)鍵是無效鍵或者第二個(gè)鍵是無效鍵,這個(gè)數(shù)據(jù)怎么保存。具體解決辦法如下:從遙控按鍵解碼結(jié)果可知,鍵值和數(shù)字鍵的數(shù)字對應(yīng)關(guān)系為:如果鍵值小于9(0x09),按鍵數(shù)字就是鍵值加上1,而鍵值9對應(yīng)按鍵“0”。所以兩個(gè)按鍵的要分九種情況,第一個(gè)按鍵有

16、三種情況,無效鍵,19鍵,0鍵,第二個(gè)鍵也有三種情況,考慮到第二個(gè)鍵有可能是無效鍵,所以按第一個(gè)鍵(十位)時(shí)候要保存?zhèn)€位數(shù)字,具體賦值如下:(以年為例,year0,year1,year2分別是原值、第一次按鍵后賦值、第二次按鍵后賦值)第一個(gè)按鍵后賦值如下表:key > 9(無效鍵)year1 = year0key < 9(19鍵)year1 = 10*( key +1)+year0%10key = 9(0鍵)year1 = year0%10第二個(gè)按鍵后賦值如下表:第一個(gè)鍵第二個(gè)鍵賦值無效鍵0鍵year2= year1/10*1019鍵0鍵year2= year1/10*100鍵0鍵

17、year2= year1/10*10 為方便編程沒有用year2= 0無效鍵19鍵year2= year1/10*10 + key+119鍵19鍵year2= year1/10*10 + key+1 0鍵19鍵year2= key+1無效鍵無效鍵year2= year119鍵無效鍵year2= year10鍵無效鍵year2= year1事實(shí)上第二個(gè)鍵是無效鍵的情況在剛開始已經(jīng)考慮,所以鍵值不變,可以不做處理。33課表計(jì)算以上午為例,當(dāng)設(shè)定好第一節(jié)課上課時(shí)間,以后的時(shí)間在此基礎(chǔ)上往上加。第一節(jié)課下課第二節(jié)課上課第二節(jié)課下課第三節(jié)課上課第三節(jié)課下課第四節(jié)課上課第四節(jié)課下課小時(shí)增量0012223分

18、鐘增量4555400455540實(shí)際編寫程序計(jì)算時(shí),為了對齊,插入了無效的0值,當(dāng)然如果schedule1表同樣采用二維數(shù)組可避免此弊端,這也是當(dāng)時(shí)編程時(shí)候總體設(shè)計(jì)考慮不周造成的,以至于要修改就要改動(dòng)其很多的數(shù)據(jù)。34 遙控解碼具體解碼過程如下:通過定時(shí)器讀出相應(yīng)的高低電平,先讀出低電平,再讀出高電平,如果中間有非正常的值則重新接收。每八個(gè)位為一個(gè)字節(jié)數(shù)據(jù),總共四個(gè)有效數(shù)據(jù),最后在數(shù)碼管上顯示。#include <AT89X51.H>#define c(x) (x*110592/120000)/便于數(shù)據(jù)分析sbit Ir_Pin=P36;/接收管腳unsigned char cod

19、e Led_Tab=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E; /共陽極數(shù)碼顯示碼0-F.unsigned char code Led_Sel=0xfe,0xfd,0xfb,0xf7; /顯示位控unsigned char Led_Buf4; /顯示緩沖區(qū)unsigned char Led; /位選unsigned char Ir_Buf4; /用于保存解碼結(jié)果/=timer0() interrupt 1 using 1     

20、; /防止按鍵時(shí) LED顯示閃爍 TL0=(65536-1000)%256; TH0=(65536-1000)/256; /定時(shí)器0設(shè)定約1000us中斷一次,用于數(shù)碼管掃描 P0=0xff; P2=Led_SelLed; /位選 P0=Led_TabLed_BufLed; /段選 if(+Led >3) Led =0;   /四個(gè)掃描完了,到第一個(gè)數(shù)碼管/=unsigned int Ir_Get_Low()    /獲取低電平時(shí)間 TL1=0; TH1=0; TR1=1; while(!Ir_Pin ); /當(dāng)P3.6為低 等待 TR1

21、=0; return TH1*256+TL1;/=unsigned int Ir_Get_High() /獲取高電平時(shí)間 TL1=0; TH1=0; TR1=1; while(Ir_Pin ); /當(dāng)P3.6為高 等待 TR1=0; return TH1*256+TL1;/=main()unsigned int temp;char i,j;TMOD=0x11;TL0=(65536-1000)%256;TH0=(65536-1000)/256; /定時(shí)器0設(shè)定約1000us中斷一次,用于數(shù)碼管掃描EA=1;ET0=1;TR0=1;while(1) restart: while(Ir_Pin);

22、temp=Ir_Get_Low();/允許有一定的誤差 if(temp<c(4000) | temp>c(5000) continue; /引導(dǎo)脈沖低電平4500 temp=Ir_Get_High(); if(temp<c(4000) | temp>c(5000) continue; /引導(dǎo)脈沖高電平4500 for(i=0;i<4;i+) /4個(gè)字節(jié) for(j=0;j<8;j+) /每個(gè)字節(jié)8位 temp=Ir_Get_Low();/560us 低電平 if(temp<c(200) | temp>c(800) goto restart; te

23、mp=Ir_Get_High();  /560us 或 1680us 高電平 if(temp<c(200) | temp>c(2000) goto restart; Ir_Bufi>>=1; /先寫“0”   if(temp>c(1120) Ir_Bufi|=0x80; /再寫“1” Led_Buf0=Ir_Buf2&0x0f;   /低四位數(shù)據(jù)碼    Led_Buf1=Ir_Buf2>>4;     /高四位數(shù)據(jù)

24、碼 Led_Buf2=Ir_Buf0&0x0f;   /低四位系統(tǒng)碼 Led_Buf3=Ir_Buf0>>4;     /高四位系統(tǒng)碼 解碼結(jié)果如下,系統(tǒng)碼為0x0E(由于設(shè)置鍵和屏顯鍵的鍵值相同,故有同樣的功能)4總結(jié)經(jīng)過各方面的測試,達(dá)到設(shè)計(jì)的要求。一、在系統(tǒng)硬件的設(shè)計(jì)方面,充分考慮了電路元器件的布局,整個(gè)系統(tǒng)板小巧精致。剛開始用萬能板做實(shí)驗(yàn)時(shí),紅外接收頭由于沒有使用濾波電路,抗干擾能力比較弱,單片機(jī)容易進(jìn)入死機(jī)狀態(tài),經(jīng)過改進(jìn)后,恢復(fù)正常,只有極少數(shù)情況下會(huì)出現(xiàn)死機(jī),可能是電源干擾所致,如果加入看門狗電路可以避

25、免死機(jī)。在設(shè)計(jì)的過程中,曾遇到了許多的問題,比如內(nèi)存溢出、液晶的判忙、按鍵識(shí)別、菜單設(shè)置等,經(jīng)過了大量的調(diào)試修改工作,得以解決,在這過程中積累了寶貴的經(jīng)驗(yàn)。二、本設(shè)計(jì)還可以進(jìn)一步改進(jìn)和添加新的功能1、加入溫度測量。采用DS18B20,只占用一根單片機(jī)口線,精度也比較高。2、鬧鐘功能。DS12887上自帶鬧鐘功能。如果只是用來做普通的鬧鐘,實(shí)用性不強(qiáng),其實(shí)在本設(shè)計(jì)中可以用來打鈴,只要把課表計(jì)算好,每次上課或者下課后由單片機(jī)自動(dòng)把下一個(gè)打鈴點(diǎn)設(shè)置為鬧鐘,這樣就不用單片機(jī)來比較打鈴點(diǎn)。3、加入液晶屏保功能。在沒有操作時(shí)把液晶電源關(guān)掉,當(dāng)有按鍵出現(xiàn)時(shí)點(diǎn)亮液晶,可以延長液晶使用壽命,還可以節(jié)省電能。不過

26、具體操作時(shí)候必須把液晶的電源和地線全部斷開。4、添加任意打鈴點(diǎn),并可以刪除。其實(shí)還有一百多字節(jié)的非易失RAM剩余,可以保存數(shù)據(jù)。附錄1:主要元器件清單序號名稱型號,規(guī)格數(shù)量備注1單片機(jī)AT89S521AT89S522電阻色環(huán)電阻10k1k20015k1211誤差10%3電容0.1uF,470uF10 uF33p,0.01 uF1000 uF221211104470 uF /25V10 uF /10v1031000uF /10V4三極管90121PNP5蜂鳴器16時(shí)鐘芯片DS12CR8871DS12CR8877電視遙控器1TC90128液晶128641128649單片機(jī)插座40座1DIP4010

27、插座單排插座1SIP2011排阻10K1103J12發(fā)光二極管紅色發(fā)光二極管13直流插座1三腳直流座14晶振112MHZ16穩(wěn)壓管LM78051LM7805附錄:程序清單#include<reg52.h> #define uchar unsigned char#define uint unsigned intuchar week,key,high;/12864液晶操作口sbit rs = P10; sbit rw = P11;sbit en = P12;/ds12cr887操作口sbit ds = P33; sbit Rw = P32;sbit as = P31;sbit cs =

28、 P30;sbit Ir_Pin=P35; /紅外接收uchar Ir_Buf4; /保存解碼數(shù)據(jù)bit enable = 1;/允許進(jìn)入設(shè)置菜單bit flag;/音樂開關(guān)sbit buzzer = P36;/蜂鳴器uchar code schedule0213= 0, 0, 0 ,0, 1 , 0, 2, 0, 2 , 0, 2 , 0, 3 , /課表小時(shí)增量 45,0, 55,0, 40,0, 0, 0, 45,0, 55,0, 40;/課表分鐘增量uchar table6;/依次為 年月 日 時(shí) 分 秒uchar table14;/依次為設(shè)置課表 上午*時(shí)*分,下午*時(shí)*分uchar

29、 idata schedule116;/上午課表uchar idata schedule216; /下午課表uchar idata displayschedule1413;/上午課表 顯示緩沖區(qū)uchar idata displayschedule2413;/下午課表 顯示緩沖區(qū)uchar code ytable=2,4; /顯示 第二行 第四行坐標(biāo)uchar code xtable=1,2,4,5,7,8;/顯示 列設(shè)置時(shí)間顯示位置uchar code xtable1=2,3,5,6;/顯示 列 設(shè)置課表顯示位置/=延時(shí)=void delay(uint m) while( m-);/=/*

30、液晶 */=判忙= void checkbusy() rs=0; rw=1; P0=0xff; while(1) en = 1;if(P0 < 0x80)break;/P0的最高位為忙標(biāo)志為,H:忙,L:空閑 en = 0; en=0;/=液晶寫指令=void writecommand(uchar command) checkbusy(); rs=0; rw=0; en=1; P0=command; /液晶數(shù)據(jù)線P0 en=0; /=液晶寫數(shù)據(jù)=void writedata(uchar date) checkbusy(); rs=1; rw=0; en=1; P0=date; en=0;

31、 /=液晶設(shè)置= void lcdset(void) writecommand(0x30); /基本指令集 writecommand(0x01); /清屏,DDRAM的地址歸零 writecommand(0x02); /地址歸位 writecommand(0x0c); /顯示開,光標(biāo)關(guān),反白關(guān) writecommand(0x06); /DDRAM地址加1 /=設(shè)置光標(biāo)=void cursor(uchar y,uchar x)uchar command = 0x80;writecommand(0x0f);/開光標(biāo) 閃爍 if( y = 2) y = 3; else if(y = 3) y = 2

32、; command |= (y-1) << 3; command += (x-1); writecommand(command); /=設(shè)置反白=void convert(uchar yy) /反白一行 uchar x,y,i,j; y=0x80; x=0x80; writecommand(0x36); /繪圖開 for (i=0;i<32;i+) writecommand(y+);writecommand(x); for (j=0;j<16;j+) writedata(0x00); y=0x80; x=0x88; for (i=0;i<32;i+) writec

33、ommand(y+); writecommand(x); for (j=0;j<16;j+) writedata(0x00); writecommand(0x30); if(yy>2) x= 0x88; y=( yy-3 )<<4)+0x80; else x=0x80; y=(yy-1)<<4)+0x80; writecommand(0x36); for (i=0;i<16;i+) writecommand(y+);writecommand(x); for (j=0;j<16;j+) /一行寬度是16的點(diǎn) writedata(0xff); wri

34、tecommand(0x30); /=字符顯示=void display(uchar y, uchar x, uchar *p) switch (y) case 1:writecommand(0x7f+x); break; /液晶第一行 case 2:writecommand(0x8f+x); break; /0x90+(x-1) case 3:writecommand(0x87+x);break; case 4:writecommand(0x97+x);break; default:break;while(*p) writedata(*p+); /=顯示數(shù)字=void displayNumb

35、er(uchar y,uchar x,uchar number)switch (number)/引號內(nèi)數(shù)字為中文全角輸入 占據(jù)一個(gè)漢字位置case 0:display(y,x,"");break; case 1:display(y,x,"");break; case 2:display(y,x,"");break;case 3:display(y,x,"");break;case 4:display(y,x,"");break;case 5:display(y,x,"");b

36、reak;case 6:display(y,x,"");break;case 7:display(y,x,"");break;case 8:display(y,x,"");break;case 9:display(y,x,"");break;default:break; /=顯示星期=void displayweek (uchar week)switch (week)case 1: display(3,3,"一");break;case 2:display(3,3,"二");

37、break;case 3:display(3,3,"三");break;case 4:display(3,3,"四");break;case 5:display(3,3,"五");break;case 6:display(3,3,"六");break;case 7:display(3,3,"日");break; default: break;/=顯示課次=void displaylesson (uchar lesson)switch (lesson)case 1: display(3,5,&qu

38、ot;第一節(jié)課");break;case 2:display(3,5,"第二節(jié)課");break;case 3:display(3,5,"第三節(jié)課");break;case 4:display(3,5,"第四節(jié)課");break;case 5:display(3,5,"第五節(jié)課");break;case 6:display(3,5,"第六節(jié)課");break;case 7:display(3,5,"第七節(jié)課");break; case 8:display(3,5,&

39、quot;第八節(jié)課");break; default: break;/=顯示菜單=void menu (void)writecommand(0x01);/清屏 display(1,3,"設(shè)置時(shí)間");display(2,3,"查看課表");display(3,3,"修改課表");display(4,3,"退出菜單" ); /=顯示時(shí)間= void displaytime0(void) /靜態(tài)數(shù)據(jù) display(1, 2, "校園作息系統(tǒng)");display(2, 3, "年

40、");display(2, 6, "月"); display(3, 1, "星期"); display(4, 3, ""); /全角輸入display(4, 6, ""); void displaytime1(void) /動(dòng)態(tài)數(shù)據(jù)displayNumber(2,1,table0/10);displayNumber(2,2,table0%10);displayNumber(2,4,table1/10);displayNumber(2,5,table1%10);displayNumber(2,7,table

41、2/10);displayNumber(2,8,table2%10);displayweek(week);displayNumber(4,1,table3/10);displayNumber(4,2,table3%10);displayNumber(4,4,table4/10);displayNumber(4,5,table4%10);displayNumber(4,7,table5/10);displayNumber(4,8,table5%10); /=/* 紅外 */=取回低電平=uint Ir_Get_Low()TL1=0;TH1=0;TR1=1;while(!Ir_Pin );/等待高

42、電平到來TR1=0;return TH1*256+TL1;/=取回高電平=uint Ir_Get_High()TL1=0;TH1=0;TR1=1;while(Ir_Pin); /等待低電平到來TR1=0;return TH1*256+TL1;/=紅外解碼=uchar IR_decode(void)uint temp; /12M 晶振uchar i,j;restart:temp=Ir_Get_Low();if(temp<4000 | temp>5000)goto restart;/引導(dǎo)碼低電平4500ustemp=Ir_Get_High();if(temp<4000 | tem

43、p>5000) goto restart;/引導(dǎo)碼高電平4500us for(i=0;i<4;i+) /4個(gè)字節(jié)for(j=0;j<8;j+) /每個(gè)字節(jié)8位temp=Ir_Get_Low(); /560us 低電平if(temp<200 | temp>800) goto restart;temp=Ir_Get_High(); /560us 或 1680us 高電平if(temp<200 | temp>2000)goto restart;Ir_Bufi>>=1;/右移一位準(zhǔn)備寫數(shù)據(jù),相當(dāng)于填 0if(temp>1120) Ir_Buf

44、i|=0x80;/若為1再填 1 return(Ir_Buf2); /=/* ds12cr887 */=12887寫數(shù)據(jù)=void write_ds(uchar address,uchar date)cs = 0;as = 1;ds = 1;Rw = 1;P2 = address;as = 0;Rw = 0;P2 = date; /ds12cr887數(shù)據(jù)線Rw = 1;as = 1;cs = 1;/=12887讀數(shù)據(jù)=uchar read_ds(uchar address) uchar date;as = 1;ds = 1;Rw = 1;cs = 0;P2 = address;as = 0;ds = 0;date = P2;ds = 1;as = 1;cs = 1;return date;/=/* 課表處理 */=課表計(jì)算=void schedulecount(void) uchar i; schedule10 = read_ds (0x10); /讀取課表數(shù)據(jù) schedule11 = read_ds (0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論