測控系統(tǒng)、設備與儀器應用綜合能力訓練_第1頁
測控系統(tǒng)、設備與儀器應用綜合能力訓練_第2頁
測控系統(tǒng)、設備與儀器應用綜合能力訓練_第3頁
測控系統(tǒng)、設備與儀器應用綜合能力訓練_第4頁
測控系統(tǒng)、設備與儀器應用綜合能力訓練_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、測控系統(tǒng)、設備與儀器應用綜合能力訓練-紅外遙控電子時鐘設計說明書目錄1 緒論12 硬件設計22.1 DS1302時鐘芯片22.1.1 管腳介紹22.1.2讀寫指令32.1.3 電路連接42.2紅外遙控器42.3 1602顯示屏53 程序設計83.1程序流程圖83.2時間顯示83.2.1 讀取時間83.2.2顯示時間93.3按鍵識別113.4時間設置123.4.1 光標位置控制123.4.2 設置時間14參考文獻16附錄 程序清單171 緒論電子時鐘在我們生活中隨處可見,已經(jīng)不是一個稀奇的東西了。然而現(xiàn)在的各種電子時鐘雖然可能有著各種先進的功能,但普遍存在一個缺點時鐘的控制按鍵都設置在時鐘上,要

2、想完成時間設置這一基本功能,必須拿到時鐘才能實現(xiàn)。尤其是對于那些壁掛式的電子時鐘,若每次設置的時候都要將其取下來必然帶來很大的不便。針對這一缺點,本文闡述了一個普通電子時鐘的改進方案。本次課程設計設計的電子時鐘,要求能夠計時年、月、日、時、分、秒和星期,并可以通過紅外遙控器設置時間,非常方便。計時部分采用DS1302時鐘芯片實現(xiàn)。該芯片有兩個電源引腳,在主電源掉電的情況下可由電池供電而繼續(xù)工作,從而避免了每次開機都需要重新設置時間的麻煩。顯示部分采用的是1602顯示屏,可以在一屏上顯示出所有時間信息,比數(shù)碼管顯示更加清晰。2 硬件設計本文設計的是一個電子時鐘。系統(tǒng)的時間從DS1302讀取。用戶

3、可以通過紅外遙控器設置系統(tǒng)時間。為了提高遙控器所發(fā)射信號的抗干擾能力,遙控器發(fā)射的紅外信號是經(jīng)過調制的,所以首先要經(jīng)過解碼器將原始信號從載波信號中分離出來。然后再由單片機對原始信號進行處理,識別出當前按下的按鍵并執(zhí)行相應的命令,實現(xiàn)時間設置。最終由LCD1602顯示屏將時間顯示出來。系統(tǒng)工作原理如圖2.1所示。圖2.1 電子時鐘電路工作原理2.1 DS1302時鐘芯片2.1.1 管腳介紹DS1302時鐘芯片是本次設計的電子時鐘的時間來源。他和我們?nèi)粘=佑|的電子表差不多,可以對年月日、時分秒和星期計時??梢杂脝纹瑱C從DS1302中讀取時間放在液晶屏上顯示,也可以用單片機往DS1302里面寫入時間

4、進行時間設置。這樣就可以實現(xiàn)一塊電子表的功能了。DS1302的工作電壓為2.0-5.5V,工作電流小于320 nA,所以在主電源斷開的情況下,僅需一塊電池任然能夠維持長時間的工作。芯片能夠自動完成大月小月以及閏年的計算,計時時間可到2100年。DS1302共有8個管腳,管腳圖如圖2.2所示。圖2.2 DS1302管腳圖其中X1,X2腳為32.768KHz晶振管腳,為芯片提供工作頻率,該晶振的精度直接影響到芯片的計時精度。2.1.2讀寫指令DS1302的一條指令一個字節(jié)8位,其中第七位(即最高位)是固定1,這一位如果是0的話,那寫進去是無效的。第六位是選擇RAM還是CLOCK的,我前邊說過,我們

5、這里主要講CLOCK時鐘的使用,它的RAM功能我們不用,所以如果選擇CLOCK功能,第六位是0,如果要用RAM,那第六位就是1。從第五到第一位,決定了寄存器的5位地址,而第零位是讀寫位,如果要寫,這一位就是0,如果要讀,這一位就是1。DS1302有8個和時鐘有關的寄存器,5位地址分別是00000一直到00111這8個地址,還有一個寄存器的地址是01000,這是涓流充電所用的寄存器,程序中沒有用到。在DS1302的數(shù)據(jù)手冊里的地址,直接把第七位、第六位和第零位值給出來了,所以指令就成了80H、81H那些了,最低位是1,那么表示讀,最低位是0表示寫,如圖2.3所示。圖2.3 DS1302時鐘寄存器

6、從圖中可以看出,年月日、時分秒和星期都有各自的地址,且讀寫地址不同,所以只要先向芯片中寫入目標地址,就可以從芯片中讀取時間或向芯片中寫入時間1。2.1.3 電路連接圖2.4 DS1302外部電路DS1302外部電路如圖2.4所示。SCLK腳、I/O腳和RST腳分別接單片機的P10、P11和P12腳,時鐘脈沖由單片機發(fā)出,根據(jù)三線之間的電平變化關系,可以實現(xiàn)從芯片中讀取時間或向芯片中寫入時間2。具體時序關系參見程序設計部分。2.2紅外遙控器紅外遙控器主要作用是設置時間,這里選用的遙控器采用的是TC9012芯片,該芯片可應用于電視機、組合音響設備、錄音卡座、VCD、DVD播放機等設備的控制。由于我

7、們用到的的只是遙控器發(fā)出的紅外信號,所以這里對芯片的工作原理不做詳細介紹。按下遙控器的不同按鍵可發(fā)出不同的紅外編碼,通過程序解碼后可判斷是哪一按鍵被按下,然后做相應的處理。解碼原理將在程序設計部分介紹。紅外遙控器的接收器與單片機的連接關系如圖2.5所示3。圖2.5 紅外接收器電路圖接收器的1腳為信號輸出端,連接到單片機的3.2腳做外部中斷0的中斷源,同時連接到了LED1,通過LED指示接收器是否接收到了信號。2腳為電源負極,3腳為電源正極,這里接了一個0.1uF的電容,濾除電源中的雜波。接收器的作用是將接收到的紅外信號中的原信號與載波信號分離,得到原始信號。2.3 1602顯示屏LCD1602

8、是一種常用的簡易顯示屏,可以顯示阿拉伯數(shù)字、英文大小寫字母以及一些簡單的日文和符號等,但是不能顯示漢字。LCD1602模塊上固化了字模存儲器(CGROM和CGRAM),內(nèi)置了192個常用字符的字模,存于字符產(chǎn)生器CGROM(Character Generator ROM)中,還有8個允許用戶自定義的字符產(chǎn)生RAM,稱為CGRAM(Character Generator RAM)。DDRAM(Display Data RAM)是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼。DDRAM相當于計算機的顯存,我們?yōu)榱嗽谄聊簧巷@示字符,就把字符代碼送入顯存,這樣該字符就可以顯示在屏幕上了。同理,為了在液晶屏

9、幕上顯示字符,把字符代碼送入DDRAM即可。1602的字符代碼與字符的ASCII碼一致。字符的顯示位置由字符寫入的顯存地址控制。1602共有80個字節(jié)的顯存,但顯示屏只有十六位,所以只用到了其中的16個字節(jié),第一行的八個字節(jié)的地址為0x800x87,第二行的八個位置對應的地址是0xC00xC7。寫在這些地址外的內(nèi)容除非移動屏幕否則不會被顯示。1602有16個引腳,如圖2.6所示(圖中從左往右依次是16腳到1腳)。圖2.6 1602引腳圖各個引腳的功能說明見表2-1。表2-1 1602引腳說明引腳號符號引腳說明引腳號符號引腳說明1VSS電源地9D2數(shù)據(jù)端口2VDD電源正極(+5V)10D3數(shù)據(jù)端

10、口3VO偏壓信號11D4數(shù)據(jù)端口4RS命令/數(shù)據(jù)12D5數(shù)據(jù)端口5RW讀/寫13D6數(shù)據(jù)端口6E使能14D7數(shù)據(jù)端口7D0數(shù)據(jù)端口15A背光正極8D1數(shù)據(jù)端口16K背光負極注:1. VO是液晶顯示的偏壓信號,可接10K的3296精密電位器?;蛲瑯幼柚档腞M065/RM063藍白可調電阻。2. RS是命令/數(shù)據(jù)選擇引腳,接單片機的一個I/O,當RS為低電平時,選擇命令;當RS為高電平時,選擇數(shù)據(jù)。3. RW是讀/寫選擇引腳,接單片機的一個I/O,當RW為低電平時,向LCD1602寫入命令或數(shù)據(jù);當RW為高電平時,從LCD1602讀取狀態(tài)或數(shù)據(jù)。如果不需要進行讀取操作,可以直接將其接VSS。4.

11、E為執(zhí)行命令的使能引腳,接單片機的一個I/O。5. D0D7,并行數(shù)據(jù)輸入/輸出引腳,可接單片機的P0P3任意的8個I/O口。如果接P0口,P0口應該接4.7K10K的上拉電阻。如果是4線并行驅動,只須接4個I/O口。6. A背光正極,可接一個1047歐的限流電阻到VDD。7. K背光負極,接VSS。1602的電路連接圖如圖2.7所示。圖2.7 LCD1602電路連接圖數(shù)據(jù)位DB0DB7連接的是單片機的P0口,VO接10K的電位器用來調節(jié)顯示屏的對比度。3 程序設計3.1程序流程圖圖3.1 數(shù)字時鐘流程圖3.2時間顯示3.2.1 讀取時間DS1302的讀取時序如圖3.2所示。圖3.2 DS13

12、02讀時序RST引腳(復位引腳)標號上面的一個橫杠表示此引腳低電平有效,也即給它低電平后芯片復位,不能正常工作4。所以欲使芯片正常工作,此引腳應該給高電平,從時序圖中也可以看出,我們進行寫操作的時候RST引腳應該置為高電平。再看SCLK時鐘引腳和IO引腳。圖中的前八位的黑色箭頭表示寫入的數(shù)據(jù)在上升沿鎖存,后八位的黑色箭頭表示下降沿讀取數(shù)據(jù)。也就是說如果我們要從DS1302里面讀出一位二進制數(shù)據(jù),首先應該把SCLk引腳拉高,然后把SCLK拉低(在SCLK拉低的一瞬間DS1302的數(shù)據(jù)送到了IO端口上),再把IO口上的數(shù)據(jù)存入變量,此時就讀到了一位二進制數(shù)據(jù)。還有一點需要注意,讀數(shù)據(jù)的時候先讀低位

13、,后讀高位,且要先寫地址,后讀數(shù)據(jù)。從R/的符號中可以看出,寫地址時,如果最低位寫入的是0這說明是要往芯片里寫數(shù)據(jù),在輸入完第一個字節(jié)后,芯片會等待輸入數(shù)據(jù);如果最低位寫入的是1,則是從芯片讀取數(shù)據(jù),在寫完地址后芯片會在串行時鐘的控制下輸出時間數(shù)據(jù)。要注意的是,芯片在寫完一個字節(jié)后的第一個下降沿就開始輸出時間,中間沒有間隔。從DS1302直接讀取的是時間的8421BCD碼,前四位儲存的是十位數(shù)的二進制值,后四位是給位數(shù)的二進制值。經(jīng)time = time/16*10+time%16;這步運算后將其轉化為十進制數(shù)并作為函數(shù)的返回值。3.2.2顯示時間1602顯示屏的寫操作分為寫命令和寫數(shù)據(jù)兩種。

14、寫命令包括清屏、光標歸位、顯示屏開關以及是否顯示光標等。詳細指令集可查閱1602元件手冊。寫入數(shù)據(jù)前先寫入命令將光標移動到要顯示該數(shù)據(jù)的位置。寫入數(shù)據(jù)后,根據(jù)設置光標自動向左或向右移動一位。所以如果是寫連續(xù)顯示的幾位的話可以不必每次都寫入光標移動命令。執(zhí)行寫操作時RW腳要清零,此時若RS腳也清零則為寫命令,否則為寫數(shù)據(jù),寫時序圖如圖3.3所示。圖3.3 1602寫時序圖先將使能端E電平拉低,然后將R/W腳電平拉低,根據(jù)寫命令還是寫數(shù)據(jù)設置好RS腳的電平,把要寫入的數(shù)據(jù)放到P0口,這樣便做好了寫的準備工作。這時再將E腳電平置1即可將P0的數(shù)據(jù)寫入1602。1602執(zhí)行某些指令需要花費較長的時間,

15、當上條指令沒有執(zhí)行完時是無法接收下一條指令的。所以在寫指令之前要進行判忙,以免指令丟失。利用以上兩個函數(shù)便可實現(xiàn)顯示功能,如以下兩個函數(shù)分別可以實現(xiàn)在指定位置顯示一個字符和字符串。void WriteChar(int x,int y,char charData)/在(x,y)處顯示字符charDataif(y = = 0)WriteCommand(0x80+x);/寫入要顯示的位置elseWriteCommand(0xC0+x);WriteData(charData);/寫入顯示的內(nèi)容void WriteString(int x,int y,char* string)/從(x,y)處顯示字符串

16、string/addx = x;/addy = y;if(y = = 0)WriteCommand(0x80+x);elseWriteCommand(0xC0+x);while(*string) /循環(huán)發(fā)送所有字符,每寫完一個字符光標自動右移一位WriteData(*string);string+;3.3按鍵識別遙控器按鍵按下后會發(fā)射不同編碼,這些編碼的結構為:起始碼,兩位客戶碼,數(shù)據(jù)碼和數(shù)據(jù)碼的反碼。如圖3.4所示。圖3.4 紅外遙控器編碼結構對于同一款遙控器,每個按鍵的起始碼和客戶碼是相同的,數(shù)據(jù)碼不同用以區(qū)分不同按鍵。該芯片以一個持續(xù)4.5ms的高電平和4.5ms的低電平作為起始碼,只有

17、收到起始碼后才認為有按鍵按下,這樣可以有效的避免外界干擾。除起始碼外,剩下的每一位都以一個0.56ms的高電平開始,根據(jù)該高電平與接下來的低電平持續(xù)的總時間來區(qū)別0和1:若總時間為1.125ms則為0,若總時間為2.25ms則為1。如圖3.5所示。圖3.5 0與1的電平持續(xù)時間圖因為每個按鍵的碼值都是可以檢測出來的,這樣在解讀到碼值時通過對比的方法就可以確定是哪一個按鍵按下了。為了增強抗干擾能力,發(fā)送的紅外信號是經(jīng)過調制的,在接收端由硬件將原是新號從載波信號中分離出來。但分離出來的信號的電平高低與原始信號正好相反,這樣原始信號中的上升沿在接收后就變成了下降沿,所以信號的每一位開始時都會有一個下

18、降沿。這里采用了中斷處理的方式,保證響應的及時性。從圖3.5中可以看出,起始碼的判斷沒有區(qū)分高電平4.5ms和低電平4.5ms,但在程序中可以只確保了起始碼的總時間,只要這個總時間在8ms11ms區(qū)間內(nèi),只都認為收到了起始碼。這樣做放寬了接收條件,可以更好的接收按鍵信號。因為客戶碼加數(shù)據(jù)碼總共32位,而unsigned long 型在單片機中占4個字節(jié),也是32位,正好可以儲存下遙控編碼。所以可以定義一個unsigned long 型的變量儲存碼值。3.4時間設置3.4.1 光標位置控制程序啟動后默認不顯示光標,當檢測到設置鍵按下后才會顯示閃爍的光標。光標有兩個作用,一是提示用戶當前是在哪一位

19、輸入,二是可以幫助用戶更快速的完成設置。如當前的時間年月日、星期以及小時都是對的,只需要對分鐘做一下調整,沒有光標用戶需要把所有的信息輸入一次,而有了光標只需要把光標移動到分鐘的位置輸入分鐘的值就可以了。另外,時間在屏幕上的顯示如圖3.6所示,在設置時間的時候光標的移動應該跳過“/”“:”的位置和無字符的位置,所以必須對光標的位置進行控制。圖3.6 LCD1602顯示時間光標位置調整用到了讀取1602屏幕上顯示的內(nèi)容,所以先對如何獲取顯示內(nèi)容做一個介紹。要用到讀取操作首先要將R/W置1,若讀取指令,RS置1,若讀取數(shù)據(jù),RS清零。1602的讀取時序圖如圖3.7所示。圖3.7 1602讀操作時序

20、圖讀操作與寫操作的區(qū)別是R/W腳置1,P0口的值是有1602控制的而不是有單片機設置。在E由0變1的t0時間后P0口得到所需的數(shù)據(jù)。因為要讀P0口,所以在對之前要把P0口置1。1602中雖然有讀數(shù)據(jù)和讀命令的操作,但無法直接讀取光標當前位置,所以只能定義兩個變量addx、addy來儲存當前光標位置(x,y),變量的值隨光標位置的改變而改變,這樣通過查詢addx和addy的值就可以知道光標當前位置了5。因為需要用戶設置的內(nèi)容都是數(shù)字,所以光標需要停留的位置必然是數(shù)字。光標每一移動一次都讀取一次當前位置顯示的內(nèi)容,若是數(shù)字則停留,否則繼續(xù)向下移動一位,直到找到數(shù)字為止。程序如下:void Move

21、Cursor(char dir)/光標移動函數(shù),dir為移動方向,若為0則不動if(!IsSettingTime)/如果不在設置時間則不移動return;if(dir = = LEFT)/左方向鍵按下,光標左移一位 addx-;while(!(ReadData(addx,addy)>='0' && ReadData(addx,addy)<='9')/當前位置處不是數(shù)字addx-;/繼續(xù)左移,直到找到數(shù)字 else if(dir = = RIGHT)/右方向鍵按下,光標右移一位 addx+;while(!(ReadData(addx,a

22、ddy)>='0' && ReadData(addx,addy)<='9')addx+; else if(dir = = UP | dir = = DOWN)/上或下鍵按下,換行 addy = addy;while(!(ReadData(addx,addy)>='0' && ReadData(addx,addy)<='9')addx+;/當前位置處不是數(shù)字,右移一位 if(addx >15)/坐標超過屏幕顯示范圍,歸零,循環(huán)移動addx = 0;else if(addx

23、 < 0)addx = 15;if(addy)/執(zhí)行移動光標命令,真正將光標移動到(addx,addy)處WriteCommand(0xC0+addx);/第二行elseWriteCommand(0x80+addx);/第一行程序先是對坐標位置標識變量進行運算,此時并沒有真正改變光標位置,待找到合適的光標位置后再通過光標移動指令一次性移動到該位置。因為屏幕只有兩行,所以上下方向鍵的行為是一樣的,都是換行,沒有必要分別處理。光標每移動一次都調用這個函數(shù)進行判斷,這樣看上去光標就只是在我們想要的位置移動了。3.4.2 設置時間本次設計中遙控器上共定義了設置鍵、確認鍵、退出鍵、上下左右方向鍵和

24、09十個數(shù)字鍵等幾個按鍵。在設置鍵按下之前,系統(tǒng)忽略所有的輸入。用戶要想設置時間,首先要按下設置鍵。按下設置鍵后系統(tǒng)進入設置模式,出現(xiàn)閃爍的光標,表示用戶當前正在設置哪一位。用戶可以直接鍵入所有時間位的數(shù)值,也可以通過方向鍵將光標移動到需要修改的地方,然后按下相應的數(shù)字鍵設置該位的值。用戶在輸入完時間后若確認想修改時間,可按下遙控器上的確認鍵,這時程序讀取屏幕上當前顯示的時間,并將這一新的時間數(shù)據(jù)寫入到DS1302芯片;若想放棄修改,則可按下退出鍵,這時不會對1302的時間產(chǎn)生任何影響,屏幕上繼續(xù)顯示當前時間。無論用戶按下確認鍵還是退出鍵系統(tǒng)都會退出設置模式,隱藏光標,繼續(xù)顯示1302中的時間

25、。至此,一個可用遙控設置時間的時鐘程序已全部完成。參考文獻1 陳權昌,李興富.單片機原理及應用.廣州:華南理工大學出版社,2007.8.2 楊志忠.數(shù)字電子技術.北京:高等教育出版社,2003.12.3 及力.Protel 99 SE原理圖與PCB設計教程.北京:電子工業(yè)出版社,2007.8.4 徐江海.單片機實用教程.北京:機械工業(yè)出版社,2006.12. 5 李慶亮.C語言程序設計實用教程.北京:機械工業(yè)出版社,2005.3. 附錄 程序清單1.DS1302讀取時間的程序。sbit timeClk = P10;sbit timeData = P11;sbit timeRst = P12;U

26、CHAR ReadTimeByte(UCHAR addr)UCHAR i, time = 0;timeRst = timeClk = 0;timeRst = 1; addr |= 0x01;/最低位置1,進入讀狀態(tài)(先寫地址后讀數(shù)據(jù))for(i=0;i<8;i+) /寫要讀取的地址timeData = addr & 0x01;timeClk = 1;/產(chǎn)生上升沿,寫入地址timeClk = 0;/為下一次上升沿做準備addr >>= 1;if(timeData & 0x01)/讀取第一位time |= 0x80;elsetime &= 0x7f;for

27、(i=0;i<8-1;i+)timeClk = 1;timeClk = 0;/產(chǎn)生下跳沿,讀取數(shù)據(jù)time >>= 1;if(timeData & 0x01)time |= 0x80;elsetime &= 0x7f;timeRst = 0;time = time/16*10+time%16;/8421BCD轉常規(guī)數(shù)字return time;2.1602寫命令程序:id WriteCommand(unsigned char com)/寫命令函數(shù),com為寫入的命令while(CheckBusy();/CheckBusy( )為判忙函數(shù)WC;/#define W

28、C RS = 0; RW = 0 寫入命令EN = 1;/使能端置1Data = com;/數(shù)據(jù)發(fā)到P0口_nop_();/空指令,延時EN = 0; /下降沿寫入指令3. 1602寫數(shù)據(jù)程序:void WriteData(unsigned char charData)/寫指令函數(shù),com為寫入的指令while(CheckBusy();/addx+;WD;/#define WD RS = 1;RW = 0 寫入數(shù)據(jù)EN = 1;Data = charData;_nop_();EN = 0; /下降沿寫入數(shù)據(jù)4. 紅外遙控器按鍵識別的程序:void infrafedSignal( ) inter

29、rupt 0/判斷起始碼if(counter>30 && counter<60)/30=8000us/256us,60=11000us/256usflag = 1;num = 0;counter = 0;else if(num = = 0)ET1 = 1;TR1 = 1;counter = 0;if(flag)num+;signal <<= 1;/左移一位if(counter>7) signal |= 1;if(num>32)num = 0;flag = 0;ET1 = 0;TR1 = 0;keyFlag = 1;counter = 0;5. 1602讀一個字節(jié)的程序:UCHAR ReadData(cha

溫馨提示

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

評論

0/150

提交評論