




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、單片機技術課程設計說明書設計課題: 電子萬年歷 專業(系) 電氣工程系 班 級 車輛電子091 學生姓名 文卓 學號 12 指導老師 吳海波 完成日期 2011.4.26 電子萬年歷 摘 要 : 隨著科技的快速發展,時間的流逝,至從觀太陽、擺鐘到現在電子鐘,人類不斷研究,不斷創新紀錄。美國dallas公司推出的具有涓細電流充電能的低功耗實時時鐘電路ds130。它可以對年、月、日、周日、時、分、秒進行計時,還具有閏年補償等多種功能,而且ds1302的使用壽命長,誤差小。對于數字電子萬年歷采用直觀的數字顯示,可以同時顯示年、月、日、周日、時、分、秒和溫度等信息,還具有時間校準等功能。該電路采用at
2、89s51單片機作為核心,功耗小,能在3v的低壓工作,電壓可選用35v電壓供電。綜上所述此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優點,符合電子儀器儀表的發展趨勢,具有廣闊的市場前景。關鍵詞:時鐘電鐘;ds1302;ds18b20;at24c02;lcd1602;單片機 目 錄1.方案要求與設計21.1方案設計與論證21.1.1 單片機芯片的選擇方案和論證2 1. 1. 2儲存芯片選擇.21.1.3時鐘芯片的選擇方案和論證31.1.4顯示模塊選擇方案和論證31.1.5溫度傳感器的選擇方案與論證32.單元模塊設計32.1各單元模塊功能介紹及電路設計42.1.1儲存電路42
3、.1.2ds1302時鐘模塊設計42.1.3lcd1602顯示模塊設計52.1.4ds18b20溫度傳感器模塊的設計53.軟件設計73.1主程序73.2時間模塊設計83.3顯示模塊設計83.4溫度模塊設計93.5時間調整程序設計83.6測試結論104.總結與體會10附錄10附錄一 系統原理圖:10附錄二 源程序12一、設計要求與方案論證1.1設計要求: ()基本要求 具有年、月、日、星期、時、分、秒等功能; 時間與陰、陽歷能夠自動關聯; 具有溫度計功能; 具備年、月、日、星期、時、分、秒校準功能;( 2 ) 創新要求(1)具備定時定鬧;(2)具備紀念日的設定,提醒。1.方案設計1.1方案設計與
4、論證按照系統的設計功能要求,本時鐘溫度系統的設計必須采用單片機軟件系統實現,用單片機的自動控制能力配合按鍵控制,來控制時鐘的存儲和查詢及顯示。初步確定設計系統由單片機主控模塊、時鐘模塊(at89s51定時器)、存儲模塊、顯示模塊、鍵盤接口模塊、鬧鐘模塊共6個模塊組成,電路系統框圖如圖1所示 主 控 器 件 at89s51 存儲器 24c02led顯示器ds1302時鐘模塊 鍵盤 溫度采集模塊報警器 1.1.1 單片機芯片的選擇方案和論證方案一: 采用89c51芯片作為硬件核心,采用flash rom,內部具有4kb rom 存儲空間,能于3v的超低壓工作,而且與mcs-51系列單片機完全兼容,
5、但是運用于電路設計中時由于不具備isp在線編程技術, 當在對電路進行調試時,由于程序的錯誤修改或對程序的新增功能需要燒入程序時,對芯片的多次拔插會對芯片造成一定的損壞。方案二:采用at89s51芯片,at89s51是一個低功耗,高性能cmos 8位單片機,片內含4k bytes isp(in-system programmable)的可反復擦寫1000次的flash只讀程序存儲器,器件采用atmel公司的高密度、非易失性存儲技術制造,兼容標準mcs-51指令系統及80c51引腳結構,芯片內集成了通用8位中央處理器和isp flash存儲單元,at89s51在眾多嵌入式控制應用系統中得到廣泛應用
6、。1.1.2儲存芯片at24c02是一個2k位串行cmos e2prom, 內部含有256個8位字節,catalyst公司的先進cmos技術實質上減少了器件的功耗。at24c02有一個16字節頁寫緩沖器。該器件通過ic總線接口進行操作,有一個專門的寫保護功能。at24c02支持ic,總線數據傳送協議ic,總線協議規定任何將數據傳送到總線的器件作為發送器。任何從總線接收數據的器件為接收器。數據傳送是由產生串行時鐘和所有起始停止信號的主器件控制的。主器件和從器件都可以作為發送器或接收器,但由主器件控制傳送數據(發送或接收)的模式,通過器件地址輸入端a0、a1和a2可以實現將最多8個at24c02器
7、件連接到總線上。1.1.3時鐘芯片的選擇方案和論證方案一:直接采用單片機定時計數器提供秒信號,使用程序實現年、月、日、星期、時、分、秒計數。采用此種方案雖然減少芯片的使用,節約成本,但是,實現的時間誤差較大,所以不采用此方案。方案二:采用ds1302時鐘芯片實現時鐘,ds1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年進行計數,而且精度高,位的ram做為數據暫存區,工作電壓2.5v5.5v范圍內,2.5v時耗電小于300na。所以本設計采用ds1302時鐘芯片。1.1.4 lcd1602顯示模塊選擇和論證方案一:采用led數碼管動態掃描,led數碼管價格適中,對于顯示數字
8、合適,采用動態掃描法與單片機連接時,雖然占用的單片機口線少,但連線還需要花費一點時間,所以也不用此種作為顯示。方案二:采用點陣式數碼管顯示,點陣式數碼管是由八行八列的發光二極管組成,對于顯示文字比較適合,若采用在顯示數字顯得太浪費,且價格也相對較高,所以在此也不用此種作為顯示。方案三:采用1602液晶顯示屏,該液晶顯示屏的顯示功能強大,內置192種字符,可顯示大量符號、數字,清晰可見,而且功率消耗小壽命長抗干擾能力強。所以在此設計中采用1602液晶顯示屏。.1.5溫度傳感器的選擇方案與論證:方案一:使用熱敏電阻作為傳感器,用熱敏電阻與一個相應阻值電阻相串聯分壓,利用熱敏電阻阻值隨溫度變化而變化
9、的特性,采集這兩個電阻變化的分壓值,并進行a/d轉換。此設計方案需用a/d轉換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴格線性的,會產生較大的測量誤差。方案二:采用數字式溫度傳感器ds18b20,此類傳感器為數字式傳感器而且僅需要一條數據線進行數據傳輸,易于與單片機連接,可以去除a/d模塊,降低硬件成本,簡化系統電路。另外,數字式溫度傳感器還具有測量精度高、測量范圍廣等優點。因此本設計選用ds18b20溫度傳感器。電路設計最終方案決定綜上各方案所述,對此次作品的方案選定: 采用stc89c52作為主控制芯片,ds1302時鐘芯片計時,ds18b20采集溫度,lcd1602作為顯示模塊
10、。2.單元模塊設計2.1.1存儲電路模塊存儲電路采用atmel公司生產的at24c02(圖5所示),具有2kb的存儲空間。其管腳接法是1、2、3、4接地,5、6分別接單片機的端口,7、8接5v電源。 圖5 at24c02 引腳圖 圖6 時鐘模塊圖2.1.2時鐘模塊的設計(1)ds1302是dallas公司推出的涓流充電時鐘芯片,內含有一個實時時鐘/日歷和31字節靜態ram,通過簡單的串行接口與單片機進行通信。圖4.5所示為ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。ds1302由vcc1或vcc2兩者中的較大者供電。所以在主電源關閉的情況下,也能保持時鐘的連續運行。x1和
11、x2是振蕩源,外接32.768khz晶振用來為芯片提供計時脈沖。rst是復位/片選線,通過把rst輸入驅動置高電平來啟動所有的數據傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節或多字節數據的傳送手段。當rst為高電平時,所有的數據傳送被初始化,允許對ds1302進行操作。如果在傳送過程中rst置為低電平,則會終止此次數據傳送,i/o引腳變為高阻態。上電行動時,在vcc大于等于2.5v之前,rst必須保持低電平。在sclk為低電平時,才能將rst置為高電平,i/o為串行數據輸入端(雙向)。sclk始終是輸入端。圖4.5 ds13
12、02的硬件接線圖(2)時鐘芯片ds1302的工作原理: (1) ds1302在每次進行讀、寫程序前都必須初始化,先把sclk端置 “0”,接著把rst端置“1”,最后才給予sclk脈沖;讀/寫時序如下圖4所示。圖5為ds1302的控制字,此控制字的位7必須置1,若為0則不能把對ds1302進行讀寫數據。對于位6,若對程序進行讀/寫時ram=1,對時間進行讀/寫時,ck=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進行讀操作時,該位為1;該位為0則表示進行的是寫操作??刂谱止澘偸菑淖畹臀婚_始輸入/輸出的。表6為ds1302的日歷、時間寄存器內容:“ch”是時鐘暫停標志位,當該位為1時,時
13、鐘振蕩器停止,ds1302處于低功耗狀態;當該位為0時,時鐘開始運行?!皐p”是寫保護位,在任何的對時鐘和ram的寫操作之前,wp必須為0。當“wp”為1時,寫保護位防止對任一寄存器的寫操作。 (2) ds1302的控制字節ds1302的控制字如表-1所示??刂谱止澋母哂行唬ㄎ?)必須是邏輯1,如果它為0,則不能把數據寫入ds1302中,位6如果0,則表示存取日歷時鐘數據,為1表示存取ram數據;位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀操作,控制字節總是從最低位開始輸出 ram rd 1 a4 a3 a2 a1 a0 / ck /wr 表-1 d
14、s1302的控制字格式(3) 數據輸入輸出(i/o)在控制指令字輸入后的下一個sclk時鐘的上升沿時,數據被寫入ds1302,數據輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個sclk脈沖的下降沿讀出ds1302的數據,讀出數據時從低位0位到高位7。如下圖-4所示 圖-4 ds1302讀/寫時序圖 (4) ds1302的寄存器ds1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數據位為bcd碼形式。“ch”是時鐘暫停標志位,當該位為1時,時鐘振蕩器停止,ds1302處于低功耗狀態;當該位為0時,時鐘開始運行?!皐p”是寫保護位,在任何的對時鐘和ram的寫操作之前,
15、“wp”必須為0。當“wp”為1時,寫保護位防止對任一寄存器的寫操作。此外,ds1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發寄存器及與ram相關的寄存器等。時鐘突發寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內容。ds1302與ram相關的寄存器分為兩類:一類是單個ram單元,共31個,每個單元組態為一個8位的字節,其命令控制字為c0hfdh,其中奇數為讀操作,偶數為寫操作;另一類為突發方式下的ram寄存器,此方式下可一次性讀寫所有的ram的31個字節,命令控制字為feh(寫)、ffh(讀)。2.1.3 lcd1602顯示電路設計 (1)液晶顯示原理液晶顯示的原理是利用液晶的
16、物理特性,通過電壓對其顯示區域進行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規模集成電路直接驅動、易于實現全彩色顯示的特點,目前已經被廣泛應用在便攜式電腦、數字攝像機、pda移動通信工具等眾多領域。液晶顯示的分類方法有很多種,通??砂雌滹@示方式分為段式、字符式、點陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據驅動方式來分,可以分為靜態驅動(static)、單純矩陣驅動(simple matrix)和主動矩。陣驅動(active matrix)三種1(2)1602字符型lcd簡介:字符型液晶顯示模塊是一種專門用于顯示字母、數字、符號等點陣式lcd
17、,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長沙太陽人電子有限公司的1602字符型液晶顯示器為例,介紹其用法。一般1602字符型液晶顯示器實物如圖10-53:(3)1602lcd主要技術參數: 顯示容量:162個字符 芯片工作電壓:4.55.5v 工作電流:2.0ma(5.0v) 模塊最佳工作電壓:5.0v 字符尺寸:2.954.35(wh)mm引腳功能說明:1602lcd采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表10-13所示:編號符號引腳說明編號符號引腳說明1vss電源地9d2數據2vdd電源正極10d3數據3vl液晶顯示偏壓11d4數據4r
18、s數據/命令選擇12d5數據5r/w讀/寫選擇13d6數據6e使能信號14d7數據7d0數據15bla背光源正極8d1數據16blk背光源負極第1腳:vss為地電源。第2腳:vdd接5v正電源。第3腳:vl為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10k的電位器調整對比度。第4腳:rs為寄存器選擇高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:r/w為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當rs和r/w共同為低電平時可以寫入指令或者顯示地址,當rs為低電平r/w為高電平時可以讀忙信號,當rs為高電平r/
19、w為低電平時可以寫入數據。第6腳:e端為使能端,當e端由高電平跳變成低電平時,液晶模塊執行命令。第714腳:d0d7為8位雙向數據線。第15腳:背光源正極。第16腳:背光源負極。 (4) 1602lcd的指令說明及時序1602液晶模塊內部的控制器共有11條控制指令,如表所示:序號指令rsr/wd7d6d5d4d3d2d1d01清顯示00000000012光標返回000000001*3置輸入模式00000001i/ds4顯示開/關控制0000001dcb5光標或字符移位000001s/cr/l*6置功能00001dlnf*7置字符發生存貯器地址0001字符發生存貯器地址8置數據存貯器地址001顯
20、示數據存貯器地址9讀忙標志或地址01bf計數器地址10寫數到cgram或ddram)10要寫的數據內容11從cgram或ddram讀數11讀出的數據內容1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01h,光標復位到地址00h位置。指令2:光標復位,光標返回到地址00h。指令3:光標和顯示模式設置 i/d:光標移動方向,高電平右移,低電平左移 s:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關控制。 d:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示 c:控制光標的開與關,高
21、電平表示有光標,低電平表示無光標 b:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位 s/c:高電平時移動顯示的文字,低電平時移動光標。指令6:功能設置命令 dl:高電平時為4位總線,低電平時為8位總線 n:低電平時為單行顯示,高電平時雙行顯示 f: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。指令7:字符發生器ram地址設置。指令8:ddram地址設置。指令9:讀忙信號和光標地址 bf:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙。指令10:寫數據。指令11:讀數據。與hd44780相兼容的芯片時序表如下:讀狀態輸入rs=
22、l,r/w=h,e=h輸出d0d7=狀態字寫指令輸入rs=l,r/w=l,d0d7=指令碼,e=高脈沖輸出無讀數據輸入rs=h,r/w=h,e=h輸出d0d7=數據寫數據輸入rs=h,r/w=l,d0d7=數據,e=高脈沖輸出無2.1.4 ds18b20 溫度傳感器電路設計:1、溫度傳感器的種類眾多,在應用與高精度、高可靠性的場合時dallas(達拉斯)公司生產的ds18b20溫度傳感器當仁不讓。超小的體積,超低的硬件開消,抗干擾能力強,精度高,附加功能強,使得ds18b20更受歡迎。對于我們普通的電子愛好者來說,ds18b20的優勢更是我們學習單片機技術和開發溫度相關的小產品的不二選擇。了解
23、其工作原理和應用可以拓寬您對單片機開發的思路。 ds18b20的主要特征: u 全數字溫度轉換及輸出。 u 先進的單總線數據通信。 u 最高12位分辨率,精度可達土0.5攝氏度。 u 12位分辨率時的最大工作周期為750毫秒。 u 可選擇寄生工作方式。 u 檢測溫度范圍為55c +125c (67f +257f) u 內置eeprom,限溫報警功能。 u 64位光刻rom,內置產品序列號,方便多機掛接。 u 多樣封裝形式,適應不同硬件系統。 2.ds18b20外形與引腳特性3.ds18b20工作原理及應用:ds18b20的溫度檢測與數字數據輸出全集成于一個芯片之上,從而抗干擾力更強。其一個工作
24、周期可分為兩個部分,即溫度檢測和數據處理。在講解其工作流程之前我們有必要了解18b20的內部存儲器資源。18b20共有三種形態的存儲器資源,它們分別是: rom 只讀存儲器:用于存放ds18b20id編碼,其前8位是單線系列編碼(ds18b20的編碼是19h),后面48位是芯片唯一的序列號,最后8位是以上56的位的crc碼(冗余校驗)。數據在出產時設置不由用戶更改。ds18b20共64位rom。 ram 數據暫存器:用于內部計算和數據存取,數據在掉電后丟失,ds18b20共9個字節ram,每個字節為8位。第1、2個字節是溫度轉換后的數據值信息,第3、4個字節是用戶eeprom(常用于溫度報警值
25、儲存)的鏡像。在上電復位時其值將被刷新。第5個字節則是用戶第3個eeprom的鏡像。第6、7、8個字節為計數寄存器,是為了讓用戶得到更高的溫度分辨率而設計的,同樣也是內部溫度轉換、計算的暫存單元。第9個字節為前8個字節的crc碼。eeprom 非易失性記憶體,用于存放長期需要保存的數據,上下限溫度報警值和校驗數據,ds18b20共3位eeprom,并在ram都存在鏡像,以方便用戶操作。ds18b20芯片與單片機的接口: 如圖所示,ds18b20只需要接到控制器(單片機)的一個i/o口上,由于單總線為開漏所以需要外接一個4.7k的上拉電阻。如要采用寄生工作方式,只要將vdd電源引腳與單總線并聯即
26、可。但在程序設計中,寄生工作方式將會對總線的狀態有一些特殊的要求。 3.軟件設計3.1主程序系統主程序首先對系統進行初始化,包括設置定時器、中斷和端口;然后顯示開機畫面。由于單片機沒有停止指令,所以可以設計系統程序不斷地循環執行上述顯示效果。見圖9。開始 初始引腳,設置相關寄存器判斷鍵值按鍵 讀取相關寄存器按鍵處理程序送顯圖9系統流程圖3.2時間模塊設計時鐘流程圖如圖5.3所示。流程圖分析:ds1302開始計時時,首先進行初始化,當有中斷信號時,讀取時鐘芯片的數據送入液晶屏顯示。這時若有設置鍵按下時,進行時間修改,完成后將數據送入時鐘芯片;若沒有按鍵按下,則直接存入eprom,送入液晶屏顯示。
27、圖5.3 時鐘流程圖3.3顯示模塊設計顯示程序流程圖如圖5.4。流程圖分析:首先對1602顯示屏進行初始化(初始化大約持續10ms左右),然后檢查忙信號,若bf=0,則獲得顯示ram的地址,寫入相應的數據顯示;若bf=1,則代表模塊正在進行內部操作,不接受任何外部指令和數據,直到bf=0為止。圖5.4 lcd顯示程序流程圖3.4溫度模塊設計溫度讀取流程圖如圖5.2所示。流程圖分析:開始進入初始化ds18b20,就是通過主機拉低單線產生復位脈沖然后釋放該線,如果有應答脈沖,即發起rom命令當成功的執行操作命令后,就使用convert t命令即開始溫度轉換,當轉換完后,又初始化ds18b20是否有
28、應答脈沖,若有,就發起read scratchpad(讀取暫存器和crc字節)命令,既同時讀出第1,2個字節,即為溫度的數據。圖5.2 溫度顯示流程圖3.5時間調整程序設計調整時間用3個調整按鈕,1個做為移位控制用,另外兩個做為加減用,分別定義控制按鈕、加按鈕、減按鈕。在調整時間過程中,要調整的那位與別的位應該有區別,所以增加了閃爍功能,即調整的那位一直在閃爍直到調整下一位。閃爍原理就是讓要調整的那一位,每隔一定時間熄滅一次,比如說50ms。利用定時器計時,當達到50ms溢出時, 就送給該位熄滅符,在下一次溢出時,再送正常顯示的值,不斷交替,直到調整該位結束,此時送正常顯示值給該位,再進入下一
29、位調整閃爍程序,時間調整程序程序流程圖如圖11。圖11時間調整程序程序流程圖3.6測試結論經過多次的反復測試與分析,可以對電路的原理及功能更加熟悉,同時提高了設計能力與及對電路的分析能力.同時在軟件的編程方面得到更到的提高,對編程能力得到加強.同時對所學的知識得到很大的提高與鞏固,對自己的動手能力有了極大的幫助。4.總結與體會這次的課程設計對從我們來說很興慶,我們是自己選擇設計課題,這樣我們設計的范圍很寬,也可以根據自己喜歡以及趕感興趣的項目進行設計。從這次的課程設計中,讓我們更加了解和掌握單片機結構以及液晶內部的結構,提高我們編程的能力,理解軟件對硬件的控制以及硬件對軟件的制約。本次設計的重
30、點在于各模塊的合理使用,各相互獨立的程序通過有機的組合,來完成所需功能則是本次設計的精妙之所在,也正是因為此,深刻領悟到“實踐出真知”這句俗語。其實有好多的知識需要在一步一步的實際動手當中慢慢地體會,慢慢地學習。不能只是想當然怎樣就會怎樣,還要靠自己親手去驗證它才行在設計的過程中還是會學到不少東西,但是經過這次實驗使我對它們有了一定的了解。經過這一次實驗我們認識到實驗是一門能夠提高個人動手能力的一門課程,同時也幫助了我們,怎么樣把書本上理論的知識應用到實踐中去。通過這次的鍛煉,我們不僅動手能力得到了加強,更重要的是學到了很多新的專業技能知識,經驗也更加豐富了。我覺得我還有很多不足的地方,如:基
31、本知識掌握不牢固、動手能力不強、知識面不夠寬。我爭取在以后的學習當中彌補它,不斷的完善自己。雖然期間我們遇到了不少的難題,但是經過努力,再大的困難也被我們給一一的解決了。本設計還有很多做的不夠好的地方,還望老師批評指正。附錄附錄一 系統原理圖:單片機at89s51是本系統的核心部分,它控制著數據顯示、溫度檢測存儲數據等功能。根據以上各功能模塊得到應用電路總原理圖。附錄二源程序#include/extern unsigned char readtemperature(void);/18b20頭文件#define uint unsigned int#define uchar unsigned ch
32、aruchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp,aa,readtemperature();/flag用于讀取頭文件中的溫度值,和顯示溫度值#define yh 0x80 /lcd第一行的初始位置,因為lcd1602字符地址首位d7恒定為1(100000000=80)#define er 0x80+0x40 /lcd第二行初始位置(因為第二行第一個字符位置地址是0x40)/液晶屏的與c51之間的引腳連接定義(顯示數據線接c51的p0口)sbit rs=p27;sbit rw=p26;/如果硬件上rw接地,就不用寫這句和后面的rw=0
33、了sbit en=p25; sbit led=p30; /lcd背光開關/ds1302時鐘芯片與c51之間的引腳連接定義sbit io=p11;sbit sclk=p10;sbit rst=p12;sbit dq=p36;sbit acc0=acc0;sbit acc7=acc7;/*acc累加器=aacc.0=e0h acc.0就是acc的第0位。acc可以位尋址。累加器acc是一個8位的存儲單元,是用來放數據的。但是,這個存儲單元有其特殊的地位,是單片機中一個非常關鍵的單元,很多運算都要通過acc來進行。以后在學習指令時,常用a來表示累加器。但有一些地方例外,比如在push指令中,就必須用
34、acc這樣的名字。一般的說法,a代表了累加器中的內容、而acc代表的是累加器的地址。 */校時按鍵與c51的引腳連接定義sbit key1=p31; /設置鍵sbit key2=p32; /加鍵sbit key3=p33; /減鍵sbit buzzer=p35;/蜂鳴器,通過三極管9012驅動,端口低電平響/*/uchar code tab1=20 - - ; /年顯示的固定字符uchar code tab2= : : ;/時間顯示的固定字符/延時函數,后面經常調用void delay(uint xms)/延時函數,有參函數uint x,y;for(x=xms;x0;x-) for(y=110
35、;y0;y-);/*液晶寫入指令函數與寫入數據函數,以后可調用*/*在這個程序中,液晶寫入有關函數會在ds1302的函數中調用,所以液晶程序要放在前面*/write_1602com(uchar com)/*液晶寫入指令函數*rs=0;/數據/指令選擇置為指令rw=0; /讀寫選擇置為寫p0=com;/送入數據delay(1);en=1;/拉高使能端,為制造有效的下降沿做準備delay(1);en=0;/en由高變低,產生下降沿,液晶執行命令write_1602dat(uchar dat)/*液晶寫入數據函數*rs=1;/數據/指令選擇置為數據rw=0; /讀寫選擇置為寫p0=dat;/送入數據
36、delay(1);en=1; /en置高電平,為制造下降沿做準備delay(1);en=0; /en由高變低,產生下降沿,液晶執行命令lcd_init()/*液晶初始化函數*write_1602com(0x38);/設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數據write_1602com(0x0c);/開顯示不顯示光標write_1602com(0x06);/整屏不移動,光標自動右移write_1602com(0x01);/清顯示write_1602com(yh+1);/日歷顯示固定符號從第一行第1個位置之后開始顯示for(a=0;a14;a+)write_1602dat(tab
37、1a);/向液晶屏寫日歷顯示的固定符號部分/delay(3);write_1602com(er+2);/時間顯示固定符號寫入位置,從第2個位置后開始顯示for(a=0;a0;a-)io=acc0;sclk=0;sclk=1;acc=acc1;uchar read_byte()/讀一個字節rst=1;for(a=8;a0;a-)acc7=io;sclk=1;sclk=0;acc=acc1;return (acc);/-void write_1302(uchar add,uchar dat)/向1302芯片寫函數,指定寫入地址,數據rst=0;sclk=0;rst=1;write_byte(add
38、);write_byte(dat);sclk=1;rst=0;uchar read_1302(uchar add)/從1302讀數據函數,指定讀取數據來源地址uchar temp;rst=0;sclk=0;rst=1;write_byte(add);temp=read_byte();sclk=1;rst=0;return(temp);uchar bcd_decimal(uchar bcd)/bcd碼轉十進制函數,輸入bcd,返回十進制 uchar decimal; decimal=bcd4; return(decimal=decimal*10+(bcd&=0x0f);/-void ds1302
39、_init() /1302芯片初始化子函數(2010-01-07,12:00:00,week4)rst=0;sclk=0;write_1302(0x8e,0x00); /允許寫,禁止寫保護 write_1302(0x8e,0x80); /打開寫保護/-/溫度顯示子函數void write_temp(uchar add,uchar dat)/向lcd寫溫度數據,并指定顯示位置uchar gw,sw;gw=dat%10;/取得個位數字sw=dat/10;/取得十位數字write_1602com(er+add);/er是頭文件規定的值0x80+0x40write_1602dat(0x30+sw);/
40、數字+30得到該數字的lcd1602顯示碼write_1602dat(0x30+gw);/數字+30得到該數字的lcd1602顯示碼 write_1602dat(0xdf);/顯示溫度的小圓圈符號,0xdf是液晶屏字符庫的該符號地址碼 write_1602dat(0x43);/顯示c符號,0x43是液晶屏字符庫里大寫c的地址碼/-/時分秒顯示子函數void write_sfm(uchar add,uchar dat)/向lcd寫時分秒,有顯示位置加、現示數據,兩個參數uchar gw,sw;gw=dat%10;/取得個位數字sw=dat/10;/取得十位數字write_1602com(er+a
41、dd);/er是頭文件規定的值0x80+0x40write_1602dat(0x30+sw);/數字+30得到該數字的lcd1602顯示碼write_1602dat(0x30+gw);/數字+30得到該數字的lcd1602顯示碼/-/年月日顯示子函數void write_nyr(uchar add,uchar dat)/向lcd寫年月日,有顯示位置加數、顯示數據,兩個參數uchar gw,sw;gw=dat%10;/取得個位數字sw=dat/10;/取得十位數字write_1602com(yh+add);/設定顯示位置為第一個位置+addwrite_1602dat(0x30+sw);/數字+3
42、0得到該數字的lcd1602顯示碼write_1602dat(0x30+gw);/數字+30得到該數字的lcd1602顯示碼/-void write_week(uchar week)/寫星期函數write_1602com(yh+0x0c);/星期字符的顯示位置switch(week)case 1:write_1602dat(m);/星期數為1時,顯示 write_1602dat(o); write_1602dat(n); break; case 2:write_1602dat(t);/星期數據為2時顯示 write_1602dat(u); write_1602dat(e); break;cas
43、e 3:write_1602dat(w);/星期數據為3時顯示 write_1602dat(e); write_1602dat(d); break;case 4:write_1602dat(t);/星期數據為4是顯示 write_1602dat(h); write_1602dat(u); break;case 5:write_1602dat(f);/星期數據為5時顯示 write_1602dat(r); write_1602dat(i); break;case 6:write_1602dat(s);/星期數據為6時顯示 write_1602dat(t); write_1602dat(a); b
44、reak;case 7:write_1602dat(s);/星期數據為7時顯示 write_1602dat(u); write_1602dat(n); break;/*鍵盤掃描有關函數*void keyscan()if(key1=0)/-key1為功能鍵(設置鍵)-delay(9);/延時,用于消抖動if(key1=0)/延時后再次確認按鍵按下 buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key1);key1n+;if(key1n=9)key1n=1;/設置按鍵共有秒、分、時、星期、日、月、年、返回,8個功能循環switch(key1n)case
45、1: tr0=0;/關閉定時器/tr1=0;write_1602com(er+0x09);/設置按鍵按動一次,秒位置顯示光標 write_1602com(0x0f);/設置光標為閃爍 temp=(miao)/10*16+(miao)%10;/秒數據寫入ds1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);/miao write_1302(0x8e,0x80); break;case 2: write_1602com(er+6);/按2次fen位置顯示光標 /write_1602com(0x0f);break;case 3: write
46、_1602com(er+3);/按動3次,shi /write_1602com(0x0f);break;case 4: write_1602com(yh+0x0e);/按動4次,week /write_1602com(0x0f);break;case 5: write_1602com(yh+0x0a);/按動5次,ri /write_1602com(0x0f);break;case 6: write_1602com(yh+0x07);/按動6次,yue /write_1602com(0x0f);break;case 7: write_1602com(yh+0x04);/按動7次,nian /write_1602com(0x0f);break;case 8:write_1602com(0x0c);/按動到第8次,設置光標不閃爍tr0=1;/打開定時器 temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);/miao數據寫入ds1302 write_1302(0x8e,0x80); break;/-加鍵key2-if(key1n!=0)/當key1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數學深度教學的理論與實踐
- 有關心理健康的征文800字
- pos機庫存管理制度
- 產品退貨召回管理制度
- 企業目標績效管理制度
- 上汽集團商標管理制度
- 鄉鎮發熱患者管理制度
- 企業項目創新管理制度
- 中介公司福利管理制度
- 項目型公司加班管理制度
- 2018-2022北京高中合格考生物匯編:基因的表達
- 新生兒病區??评碚摽荚囶}庫
- 福建省南平市2023-2024學年八年級下學期期末考試數學試卷(含答案)
- 集控運行崗面試題及答案
- 河道疏浚對漁業發展的影響與對策
- 2024年11月傳播學教程試題庫(附答案解析)
- 2025年中考數學:初中八年級下冊第X單元:代數綜合測試試卷
- 白酒酒店合作合同協議書
- T/CIE 209-2024兒童實物編程教育評價指南
- 《智能交通信號控制系統》課件
- 《冰川地貌》課件
評論
0/150
提交評論