




免費(fèi)預(yù)覽已結(jié)束,剩余63頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1 畢 業(yè) 論 文 題題 目目 基于基于 AVR 的可調(diào)電子鐘設(shè)計(jì)的可調(diào)電子鐘設(shè)計(jì) 院系名稱 院系名稱 計(jì)算機(jī)科學(xué)與技術(shù)計(jì)算機(jī)科學(xué)與技術(shù) 專業(yè)班級(jí) 專業(yè)班級(jí) 1111 專升本專升本 學(xué)生姓名 學(xué)生姓名 學(xué)學(xué) 號(hào) 號(hào) 指導(dǎo)教師 指導(dǎo)教師 2 目錄目錄 摘摘 要要 4 4 第一章第一章 引言引言 5 5 1 11 1 設(shè)計(jì)任務(wù)設(shè)計(jì)任務(wù) 5 1 21 2 設(shè)計(jì)要求設(shè)計(jì)要求 5 第二章第二章 總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì) 6 6 第三章第三章 系統(tǒng)硬件設(shè)置系統(tǒng)硬件設(shè)置 7 7 3 13 1 ATmega16ATmega16 單片機(jī)簡(jiǎn)介單片機(jī)簡(jiǎn)介 7 3 23 2 ATmega16ATmega16 單片機(jī)的工作原理單片機(jī)的工作原理 7 3 2 13 2 1 I OI O 端口的工作原理端口的工作原理 7 3 2 23 2 2 定時(shí)定時(shí) 計(jì)數(shù)器計(jì)數(shù)器 8 3 2 33 2 3 中斷系統(tǒng)中斷系統(tǒng) 8 3 2 43 2 4 振蕩器振蕩器 9 3 33 3 時(shí)鐘模塊設(shè)計(jì)時(shí)鐘模塊設(shè)計(jì) 10 3 3 13 3 1 DS1302DS1302 特性介紹特性介紹 10 3 3 23 3 2 DS1302DS1302 引腳介紹引腳介紹 11 3 3 33 3 3 DS1302DS1302 有關(guān)日歷 時(shí)間的寄存器有關(guān)日歷 時(shí)間的寄存器 12 3 3 43 3 4 DS1302DS1302 與單片機(jī)接口電路與單片機(jī)接口電路 12 3 43 4 顯示模塊設(shè)計(jì)顯示模塊設(shè)計(jì) 13 3 4 13 4 1 LCD1602LCD1602 的特性介紹的特性介紹 14 3 4 23 4 2 LCD1602LCD1602 引腳介紹引腳介紹 15 3 4 33 4 3 16021602 內(nèi)部功能器件及相關(guān)功能內(nèi)部功能器件及相關(guān)功能 16 3 4 43 4 4 16021602 液晶與單片機(jī)接口電路液晶與單片機(jī)接口電路 18 3 53 5 設(shè)置模塊設(shè)置模塊 20 3 63 6 振蕩電路振蕩電路 21 3 73 7 復(fù)位電路復(fù)位電路 22 第四章第四章 系統(tǒng)軟件設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì) 2323 4 14 1 時(shí)鐘函數(shù)模塊時(shí)鐘函數(shù)模塊 25 4 1 14 1 1 實(shí)現(xiàn)功能實(shí)現(xiàn)功能 25 3 4 1 24 1 2 函數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì) 25 4 24 2 顯示函數(shù)模塊顯示函數(shù)模塊 30 4 2 14 2 1 實(shí)現(xiàn)功能實(shí)現(xiàn)功能 30 4 2 24 2 2 函數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì) 30 4 2 34 2 3 小結(jié)小結(jié) 31 4 34 3 按鍵函數(shù)模塊按鍵函數(shù)模塊 32 4 3 14 3 1 實(shí)現(xiàn)功能實(shí)現(xiàn)功能 32 4 3 24 3 2 函數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì) 32 4 3 34 3 3 小結(jié)小結(jié) 32 4 44 4 主函數(shù)模塊主函數(shù)模塊 32 第五章第五章 心得體會(huì)心得體會(huì) 3333 第六章第六章 致謝致謝 3333 附錄附錄 1 1 元器件表元器件表 3434 附錄附錄 2 2 仿真圖仿真圖 3535 附錄附錄 3 3 源碼源碼 3636 附錄附錄 4 4 參考文獻(xiàn)參考文獻(xiàn) 6868 4 摘摘 要要 單片機(jī)就是微控制器 是面向應(yīng)用對(duì)象設(shè)計(jì) 突出控制功能的芯片 單片機(jī) 接上晶振 復(fù)位電路和相應(yīng)的接口電路 裝載軟件后就可以構(gòu)成單片機(jī)應(yīng)用系統(tǒng) 本設(shè)計(jì)就是應(yīng)用單片機(jī)強(qiáng)大的控制功能制作而成的指針式電子鐘 該指針式電子 鐘實(shí)現(xiàn)如下功能 液晶屏模擬表盤與時(shí)分秒指針顯示當(dāng)前時(shí)鐘 K1 鍵用于選擇 調(diào)節(jié)對(duì)象 K2 鍵用于調(diào)整時(shí)分秒 在按下 K4 鍵時(shí)確定調(diào)節(jié)值 時(shí)鐘繼續(xù)運(yùn)行 本設(shè)計(jì)采用的是 AVR 單片機(jī) AVR 系列的單片機(jī)不僅具有良好的集成性能 而且都具備在線編程接口 其中的 Mega 系列還具備 JTAG 仿真和下載功能 含有 片內(nèi)看門狗電路 片內(nèi)程序 Flash 同步串行接口 SPI 多數(shù) AVR 單片機(jī)還內(nèi)嵌 了 A D 轉(zhuǎn)換器 EEPROM 模擬比較器 PWM 定時(shí)計(jì)數(shù)器等多種功能 AVR 單片機(jī) 的 I O 接口具有很強(qiáng)的驅(qū)動(dòng)能力 灌入電流可直接驅(qū)動(dòng)繼電器 LCD 等元件 芯片采用 DALLAS 公司的涓細(xì)充電時(shí)鐘芯片 DS1302 該芯片通過(guò)簡(jiǎn)單的串行通 信與單片機(jī)進(jìn)行通信 時(shí)鐘 日歷電路能夠?qū)崟r(shí)提供年 月 日 時(shí)分 秒信息 采用雙電源供電 當(dāng)外部電源掉電時(shí)能夠利用后備電池準(zhǔn)確計(jì)時(shí) 顯示器件采用 LCD1602 液晶 通過(guò)相應(yīng)的按鍵調(diào)整相應(yīng)的值 通過(guò)此次設(shè) 計(jì)能夠更加牢固的掌握單片機(jī)的應(yīng)用技術(shù) 增強(qiáng)動(dòng)手能力 硬件設(shè)計(jì)能力以及軟 件設(shè)計(jì)能力 關(guān)鍵詞關(guān)鍵詞 AVR 單片機(jī) 時(shí)鐘芯片 DS1302 LCD1602 液晶 5 第一章第一章 引言引言 本例采用 LCD1602 液晶作為顯示元件 液晶屏顯示當(dāng)前時(shí)鐘 該電子鐘實(shí) 現(xiàn)如下功能 液晶屏模擬表盤與時(shí)分秒指針顯示當(dāng)前時(shí)鐘 K1 鍵用于選擇調(diào)節(jié) 對(duì)象 K2 鍵用于調(diào)整時(shí)分秒 在按下 K3 鍵時(shí)確定調(diào)節(jié)值 時(shí)鐘繼續(xù)運(yùn)行 本例 程序包含控制模塊 顯示模塊 實(shí)時(shí)時(shí)間計(jì)算模塊 設(shè)置模塊 時(shí)間設(shè)置模塊 1 11 1 設(shè)計(jì)任務(wù)設(shè)計(jì)任務(wù) 利用 AVR 單片機(jī)等實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于 AVR 的可調(diào)電子鐘 1 21 2 設(shè)計(jì)要求設(shè)計(jì)要求 a 實(shí)現(xiàn)年月日時(shí)分秒指針式顯示功能 b 用三個(gè)按鍵來(lái)實(shí)現(xiàn)調(diào)整時(shí)分秒的功能 6 第二章第二章 總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì) 組成框圖中包含顯示模塊 控制器 時(shí)間模塊 設(shè)置模塊 顯示模塊有 LCD1602 來(lái)控制顯示 整個(gè)代碼實(shí)現(xiàn)主要由控制器來(lái)實(shí)現(xiàn) 時(shí)間模塊有 DS1302 來(lái)實(shí)現(xiàn) 可以顯示系統(tǒng)時(shí)間 也可自行調(diào)整 設(shè)置模塊為按鍵處理 具體模塊分 析在相關(guān)的軟硬件設(shè)計(jì)中詳細(xì)介紹 本設(shè)計(jì)中的可調(diào)電子鐘擬采用 AVR 系列單片機(jī) ATMEGA16 作為主控制器 以 DS1302 時(shí)鐘芯片和 16M 的外置晶振提供準(zhǔn)確時(shí)間標(biāo)準(zhǔn) 以期實(shí)現(xiàn)對(duì) 時(shí) 分 秒 的數(shù)字顯示和校準(zhǔn)時(shí)間的計(jì)時(shí)裝置 可調(diào)電子鐘不但可以顯示當(dāng)前時(shí)間 而 且可以顯示年 月 日等 給人們的生活帶來(lái)方便 另外可調(diào)電子鐘還具備日期 時(shí)間的調(diào)節(jié)與寫入功能 本設(shè)計(jì)將以 AVR 單片機(jī)為控制核心 通過(guò)與 DS1302 信獲取實(shí)時(shí)時(shí)間 并將得到的數(shù)據(jù)通過(guò) LCD1602 液晶顯示出來(lái) 同時(shí)通過(guò)相應(yīng) 的按鍵調(diào)整相應(yīng)的值 因此本設(shè)計(jì)可分為以下模塊 控制模塊 顯示模塊 實(shí)時(shí) 時(shí)間計(jì)算模塊 設(shè)置模塊 時(shí)間設(shè)置模塊 7 第三章第三章 系統(tǒng)硬件設(shè)置系統(tǒng)硬件設(shè)置 3 13 1 ATmega16 單片機(jī)簡(jiǎn)介單片機(jī)簡(jiǎn)介 ATmega16 單片機(jī)是 ATmega 系列 AVR 單片機(jī)中內(nèi)容接口豐富 功能齊全 性 能價(jià)格比較高的產(chǎn)品 它具有高性能 低功耗的 8 位 AVR 微處理器 先進(jìn)的 RISC 結(jié)構(gòu) 非易失性程序和數(shù)據(jù)存儲(chǔ)器等 ATmega16 單片機(jī)的中央處理器由 32 個(gè) 8 位通用寄存器 1 個(gè)算術(shù)運(yùn)算單元及狀態(tài)和控制邏輯單元組成 AVR 采用了 哈弗結(jié)構(gòu) 具有獨(dú)立的程序總線和數(shù)據(jù)總線 程序存儲(chǔ)器里的指令通過(guò)一級(jí)流水 線運(yùn)行 它的存儲(chǔ)器分為獨(dú)立尋址的 flash 程序存儲(chǔ)器 片內(nèi) SRAM 數(shù)據(jù)存儲(chǔ)器 和 EEPROM 3 部分 均采用線性編址 圖 3 1 3 23 2 ATmega16ATmega16 單片機(jī)的工作原理單片機(jī)的工作原理 3 2 13 2 1 I OI O 端口的工作原理端口的工作原理 8 ATmeage16 單片機(jī)具有 32 個(gè)通用 I O 口 分為 PA PB PC PD 每組都是八位 這些 I O 都是可以通過(guò)各自的端口寄存器設(shè)置為輸入或置成輸出 有些 I O 口還 具有第二功能 所有的端口引腳都具有內(nèi)部上拉電阻 可以通過(guò)寄存器獨(dú)立選擇是否連接 復(fù)位時(shí)所有的引腳都為高阻態(tài) ATmega16 單片機(jī)的每個(gè)端口都有三個(gè) I O 寄存 器地址 數(shù)據(jù)寄存器 PORTx x A B C D 下同 方向寄存器 DDRx 和輸入引腳 PINx 3 2 23 2 2 定時(shí)定時(shí) 計(jì)數(shù)器計(jì)數(shù)器 ATmega16 單片機(jī)有三個(gè)定時(shí) 計(jì)數(shù)器 T C0 T C1 T C2 其中 T C0 T C2 是兩個(gè)八位的定時(shí) 計(jì)數(shù)器 而 T C1 是 16 位的定時(shí) 計(jì)數(shù)器 T Cx 0 1 2 是一個(gè)通用的帶有輸出比較匹配和 PWM 波形發(fā)生器的單通道 8 位定時(shí) 計(jì)數(shù)器模塊 T Cx 可以選擇通過(guò)預(yù)分頻器由系統(tǒng)時(shí)鐘驅(qū)動(dòng) 或通過(guò) T0 引腳的外部時(shí)鐘驅(qū)動(dòng) 時(shí)鐘邏輯模塊控制使用哪個(gè)時(shí)鐘源及哪個(gè)邊沿來(lái)進(jìn)行加或 者減計(jì)數(shù) T Cx 0 1 2 的時(shí)鐘分頻器對(duì)系統(tǒng)分頻后作為 T Cx 0 1 2 的驅(qū)動(dòng)時(shí) 鐘 T Cx 0 1 2 的時(shí)鐘可以是系統(tǒng)時(shí)鐘或者系統(tǒng)時(shí)鐘的 8 分頻 64 分頻 256 分頻及 1024 分頻 通過(guò)控制寄存器 TCCRx 0 1 2 T Cx 雙緩沖結(jié)構(gòu)的八位輸出比較寄存器 OCRx 0 1 2 一直與 T Cx 0 1 2 的計(jì)數(shù)值 TCNTx 0 1 2 進(jìn)行比較 一旦 TCNTx 0 1 2 等于 OCRx 0 1 2 比較器就給出匹配信號(hào) 有 4 種工作模式 普通模式 CTC 模式 快速 PWM 模式 相位修正 PWM 模式 3 2 33 2 3 中斷系統(tǒng)中斷系統(tǒng) ATmega16 單片機(jī)有 21 個(gè)中斷源 每一個(gè)中斷源都有一個(gè)獨(dú)立的中斷向量作 為中斷服務(wù)程序的入口地址 而且所有的中斷源都有自己的獨(dú)立的使能位 如果 全局中斷 I 和相應(yīng)使能位都置位 則在中斷標(biāo)志位置位時(shí)將執(zhí)行中斷服務(wù)程序 9 一個(gè)中斷產(chǎn)生后 全局中斷使能位 I 將被清零 后續(xù)中斷被屏蔽 中斷相關(guān)的寄存器 MCU 控制寄存器 MCUCR MCU 控制和狀態(tài)寄存器 MCUCSR 通用中斷控制寄存器 GICR 通用中斷狀態(tài)寄存器 GIFR 3 2 43 2 4 振蕩器振蕩器 XTAL1 反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入 XTAL2 來(lái)自反向振蕩器的輸出 振蕩器特性 XTAL1 和 XTAL2 分別為反向放大器的輸入和輸出 該反向放大 器可以配置為片內(nèi)振蕩器 石晶振蕩和陶瓷振蕩均可采用 如采用外部時(shí)鐘源驅(qū) 動(dòng)器件 XTAL2 應(yīng)不接 有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過(guò)一個(gè)二分頻觸發(fā)器 因 此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求 但必須保證脈沖的高低電平要求的寬度 10 3 33 3 時(shí)鐘模塊設(shè)計(jì)時(shí)鐘模塊設(shè)計(jì) 實(shí)時(shí)時(shí)間計(jì)算模塊 方案 1 AVR 單片機(jī)內(nèi)部帶有定時(shí) 計(jì)數(shù)功能 此定時(shí)功能是通過(guò)對(duì)外部 晶振的脈沖進(jìn)行計(jì)數(shù) 從而達(dá)到計(jì)時(shí)功能 只要使用 11 0592 的晶振就能實(shí)現(xiàn)零 誤差的計(jì)時(shí) 因此可以利用此功能實(shí)現(xiàn)計(jì)時(shí) 但因?yàn)橹挥袉我坏挠?jì)時(shí)功能要實(shí)現(xiàn) 萬(wàn)年歷 的功能需要較復(fù)雜的程序 而且如果單片機(jī)掉電無(wú)法繼續(xù)進(jìn)行計(jì)時(shí) 所以使用不便 方案 2 DS1302 是美國(guó) DALLAS 公司推出的一種高性能 低功耗的實(shí) 時(shí)時(shí)鐘芯片 附加 31 字節(jié)靜態(tài) RAM 采用 SPI 三線接口與 CPU 進(jìn)行通信 并 可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和 RAM 數(shù)據(jù) 實(shí)時(shí)時(shí)鐘可提供秒 分 時(shí) 日 星期 月和年 一個(gè)月小與 31 天時(shí)可以自動(dòng)調(diào)整 且具有閏年補(bǔ) 償功能 工作電壓寬達(dá) 2 5 5 5V 采用雙電源供電 主電源和備用電源 可設(shè) 置備用電源充電方式 提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力 利用單片機(jī) 強(qiáng)大的控制功能就可實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)的功能 而且消耗的系統(tǒng)資源少 程序簡(jiǎn)單 綜合上述兩種方案 宜采用方案 2 實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)功能 3 3 13 3 1 DS1302DS1302 特性介紹特性介紹 DS1302 是美國(guó) DALLAS 公司推出的一種高性能 低功耗的實(shí)時(shí)時(shí)鐘芯片 附加 31 字節(jié)靜態(tài) RAM 采用 SPI 三線接口與 CPU 進(jìn)行通信 并可采用突發(fā)方 式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和 RAM 數(shù)據(jù) 實(shí)時(shí)時(shí)鐘可提供秒 分 時(shí) 日 星期 月和年 一個(gè)月小與 31 天時(shí)可以自動(dòng)調(diào)整 且具有閏年補(bǔ)償功能 工作 電壓寬達(dá) 2 5 5 5V 采用雙電源供電 主電源和備用電源 可設(shè)置備用電源充 電方式 提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力 利用單片機(jī)強(qiáng)大的控制功 能就可實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)的功能 而且消耗的系統(tǒng)資源少 程序簡(jiǎn)單 11 DS1302 可以對(duì)年 月 日 星期 時(shí) 分 秒進(jìn)行計(jì)時(shí) 且具有閏年補(bǔ)償 等多種功能 DS1302 有 12 個(gè)寄存器 其中有 7 個(gè)寄存器與日歷 時(shí)鐘相關(guān) 存 放的數(shù)據(jù)位為 BCD 碼形式 采用單片機(jī)計(jì)時(shí) 一方面需要采用計(jì)數(shù)器 占用硬 件資源 另一方面需要設(shè)置中斷 查詢等 同樣耗費(fèi)單片機(jī)的資源 而采用時(shí)鐘 芯片 DS1302 3 3 23 3 2 DS1302DS1302 引腳介紹引腳介紹 圖 3 2 8 Vcc1 備用電池端 1 Vcc2 5V 電源 當(dāng) Vcc2 Vcc1 0 2V 時(shí) 由 Vcc2 向 DS1302 供電 當(dāng) Vcc2 Vcc1 時(shí) 由 Vcc1 向 DS1302 供電 7 SCLK 串行時(shí)鐘 輸入 6 I O 數(shù)據(jù)輸入輸出口 5 CE RST 復(fù)位腳 2 3 X1 X2 是外接晶振腳 32 768KHZ 的晶振 4 地 GND 12 3 3 33 3 3 DS1302DS1302 有關(guān)日歷 時(shí)間的寄存器有關(guān)日歷 時(shí)間的寄存器 表 3 1 3 3 43 3 4 DS1302DS1302 與單片機(jī)接口電路與單片機(jī)接口電路 圖 3 3 由于 DS1302 是依靠外部晶振與其內(nèi)部的電容配合來(lái)產(chǎn)生時(shí)鐘脈沖 因?yàn)?DS1302 在芯片本身已經(jīng)集成了 6pF 電容 所以 為了獲得穩(wěn)定的可靠的時(shí)鐘 必須選用具有 6pF 負(fù)載電容的晶振 當(dāng)它工作于所要求的負(fù)載電容時(shí) 所以要選 用 32768HZ 的晶振 石英晶振用 12M 因?yàn)橐粋€(gè)機(jī)器周期為 1 12 時(shí)鐘周期 所以這樣用 12M 的 話 一個(gè)時(shí)鐘周期為 12us 那么定時(shí)器計(jì)一次數(shù)就是 1us 了 電容范圍是在 20 40pf 之間的都行 13 表 3 2 引腳號(hào)DS1302AT89C51 1I OP1 0 2SCLKP1 1 3RSTP1 2 3 43 4 顯示模塊設(shè)計(jì)顯示模塊設(shè)計(jì) 液晶顯示模塊 方案 1 數(shù)碼管是利用發(fā)光二極管的特性組合而成數(shù)字顯示器件 通過(guò) 控制相應(yīng)的二極管的狀態(tài)顯示相應(yīng)的數(shù)字 要使數(shù)碼管正常顯示就得有驅(qū)動(dòng)電路 驅(qū)動(dòng)相應(yīng)的段碼 數(shù)碼管的現(xiàn)實(shí)方式可分為靜態(tài)顯示和動(dòng)態(tài)顯示 靜態(tài)顯示方式 只適合顯示單個(gè)的數(shù)字 因此本設(shè)計(jì)應(yīng)采用動(dòng)態(tài)顯示方式 由于動(dòng)態(tài)顯示方式利 用的是人眼視覺(jué)暫留的特性 掃描的時(shí)間應(yīng)不大于 20 毫秒 占用系統(tǒng)資源大 而且顯示的個(gè)數(shù)和字型有限 在本設(shè)計(jì)中不易采用 方案 2 LCD1602 是一種圖形點(diǎn)陣液晶顯示器 它主要由行驅(qū)動(dòng)器 列驅(qū) 動(dòng)器及點(diǎn)陣液晶顯示器組成 可完成字符顯示 也可以顯示 16 2 字 該類液晶 顯示模塊 即 KS0108B 及其兼容控制驅(qū)動(dòng)器 的指令系統(tǒng)比較簡(jiǎn)單 總共只有 七種 關(guān)于行列和頁(yè)的解釋 從上向下共 2 行 每一行為 16 字 漢字占 32B 分 左右兩半 各占 16B 根據(jù)在 LCD 上開始顯示的行列號(hào)及每行的列數(shù)可以找到 顯示 RAM 對(duì)應(yīng)的地址 設(shè)立光標(biāo) 送上要顯示的漢字的第一個(gè)字節(jié) 光標(biāo)位置 加一 送第二個(gè)字節(jié) 換行按列對(duì)齊 綜合比較上述兩種方案 應(yīng)采用 LCD1602 液晶組成本設(shè)計(jì)的顯示模塊 14 3 4 13 4 1 LCD1602LCD1602 的特性介紹的特性介紹 PG12864LCD 是像素可尋址的圖形液晶顯示屏模塊 芯片特性 1 工作電壓為 4 5 5 5V 可自帶驅(qū)動(dòng) LCD 所需的負(fù)電壓 2 全屏幕點(diǎn)陣 點(diǎn)陣數(shù)為 16 2 的字符的顯示 3 與 CPU 接口采用 5 條位控制總線和 8 位并行數(shù)據(jù)總線輸入輸出 4 內(nèi)部有顯示數(shù)據(jù)鎖存器 自帶 EL 驅(qū)動(dòng) 5 簡(jiǎn)單的操作指令 顯示開關(guān)設(shè)置 顯示起始行設(shè)置 地址指針設(shè)置和數(shù)據(jù) 讀 寫等指令 15 3 4 23 4 2 LCD1602LCD1602 引腳介紹引腳介紹 表 3 3 管腳 號(hào) 管腳名稱 LEVER 管腳功能描述 1VSS0 電源地 2VDD 5 0V 電源電壓 3VL 液晶顯示偏壓 4 RSH L RS H 表示選擇數(shù)據(jù)寄存器 RS L 表示選擇指令寄存器 5R WH L R W H E H 數(shù)據(jù)被讀到 DB7 DB0R W L E H L 數(shù)據(jù)被寫 到 IR 或 DR 6EH L R W L E 信號(hào)下降沿鎖存 DB7 DB0R W H E H DDRAM 數(shù)據(jù)讀 到 DB7 DB0 7D0H L 數(shù)據(jù)線 8D1H L 數(shù)據(jù)線 9D2H L 數(shù)據(jù)線 10D3H L 數(shù)據(jù)線 11D4H L 數(shù)據(jù)線 12D5H L 數(shù)據(jù)線 13D6H L 數(shù)據(jù)線 14D7H L 數(shù)據(jù)線 16 3 4 33 4 3 16021602 內(nèi)部功能器件及相關(guān)功能內(nèi)部功能器件及相關(guān)功能 1 指令寄存器 IR 指令寄存器負(fù)責(zé)存放單片機(jī)寫給 HD144780 的指令 對(duì) IR 的操作如下 當(dāng) RS 0 R W E 引腳由 1 變?yōu)?0 就會(huì)把 D0 到 D7 引腳的數(shù)據(jù)送入指令寄 存器 IR 2 數(shù)據(jù)寄存器 DR DR 負(fù)責(zé)存放單片機(jī)寫給 CGRAM 與 DDRAM 的數(shù)據(jù)或從 CGRAM 與 DDRAM 的數(shù)據(jù) 對(duì) DR 的操作如下 當(dāng) RS 1 R W 1 E 1 HD44780 就會(huì)把數(shù)據(jù)送到 D0 到 D7 引腳上 供單片機(jī)讀 取 當(dāng) RS 1 R W 0 E 引腳信號(hào)由 1 變?yōu)?0 HD44780 就會(huì)把 D0 到 D7 引腳上的 數(shù)據(jù)存入 DR 中 3 忙標(biāo)志 BF BF 標(biāo)志提供內(nèi)部工作情況 BF 1 表示模塊在內(nèi)部操作 此時(shí)模塊不接受外 部指令和數(shù)據(jù) BF 0 時(shí) 模塊為準(zhǔn)備狀態(tài) 隨時(shí)可接受外部指令和數(shù)據(jù) 4 顯示數(shù)據(jù) RAM DDRAM DDRAM 是用來(lái)存放 LCD 要顯示的數(shù)據(jù) 只要將點(diǎn)陣字符圖形的代碼送入 DDRAM 內(nèi)部的控制電路就會(huì)自動(dòng)將數(shù)據(jù)傳送到 LCD 顯示屏上 如果想在第一行 的第一個(gè)位置顯示字符 0 那么只要把字符 0 的代碼送達(dá) DDRAM 的 0X80 地址中 在顯示屏就會(huì)出現(xiàn)一個(gè)字符 0 5 字符發(fā)生器 CGROM HD47780 芯片內(nèi)含一個(gè) CGROM 存儲(chǔ)了 160 個(gè)不同的點(diǎn)陣字符圖形 如數(shù)字 字母 中文等 CGROM 用來(lái)存儲(chǔ)設(shè)計(jì)者自行設(shè)計(jì)個(gè)性化字符造型代碼的 RAM 共有 512bit 一個(gè) 5 7 的字符體占用 8 8bit 因此 CGRAM 最多只能存放 8 個(gè)自定義 字符 17 6 地址寄存器 AC AC 是負(fù)責(zé)計(jì)算送 DDRAM CGRAM 讀出的地址 或者計(jì)算寫到 CGRAM DDRAM 數(shù) 據(jù)的地址 當(dāng)單片機(jī)對(duì) CGRAM DDRAM 進(jìn)行操作時(shí) AC 會(huì)依照單片機(jī)對(duì) HD47780 的操作自動(dòng)修改地址的計(jì)數(shù)值 LCD1602 內(nèi)嵌芯片 HD47780 的控制功能 表 3 4 RSR WED7 D0 說(shuō)明 011 數(shù)據(jù)輸出讀 BF 與 AC 的值 10 下降沿?cái)?shù)據(jù)輸入寫數(shù)據(jù) 00 下降沿?cái)?shù)據(jù)輸入寫指令代碼 111 數(shù)據(jù)輸出讀數(shù)據(jù) 18 3 4 43 4 4 16021602 液晶與單片機(jī)接口電路液晶與單片機(jī)接口電路 圖 3 4 表 3 5 引腳號(hào)1602 引腳ATMEGA16 引腳 1數(shù)據(jù)線 DB0 DB7PB0 PB7 2寄存器選擇 RSPC0 3寫 RWPC1 4使能端 EPC2 19 排阻的計(jì)算公式 上拉電源 硬件額定電流 單片機(jī)輸出電流 一 最大值的計(jì)算原則 要保證上拉電阻明顯小于負(fù)載的阻抗 以使高電平 時(shí)輸出有效 例如 負(fù)載阻抗是 10K 供電電壓是 5V 如果要求高電平不小于 4 5V 那 么 上拉電阻最大值 R 大 5 4 5 10 5 R 大 1K 也就是最大值 1k 如果超過(guò)了 1k 輸出的高電平就小于 4 5V 了 二 最小值的計(jì)算原則 保證不超過(guò)管子的額定電流 如果不是場(chǎng)效應(yīng)管而 是三極管也可依照飽和電流來(lái)計(jì)算 例 管子的額定電流 150mA 放大倍數(shù) 100 基極限流電阻 10k 工作在 5v 的系統(tǒng)中 那么 算法如下 Ib U R 5 0 7 10 0 47 mA Ic 100 0 47 47mA 小于額定的 150 所以可以按飽和法來(lái)算最小值 上拉電阻最小值 R 小 5v 47mA 106 歐姆 如果小于這個(gè)電阻 管子就會(huì)過(guò)飽和而沒(méi)有意 義了 如果大于這個(gè)值 管子的導(dǎo)體電阻就會(huì)變大一些 所以太高也不利于低電 平的輸出 20 3 53 5 設(shè)置模塊設(shè)置模塊 設(shè)置模塊采用四個(gè)按鍵與 PD 連接 按鍵與單片機(jī)的接口電路 圖 3 5 按鍵的斷開與閉合式由機(jī)械觸點(diǎn)的動(dòng)作實(shí)現(xiàn) 由于機(jī)械的彈性作用在按鍵的 斷開與閉合過(guò)程中會(huì)產(chǎn)生抖動(dòng) 此抖動(dòng)的脈沖會(huì)給單片機(jī)帶來(lái)誤判斷 所以必須 消除 消除抖動(dòng)可以從軟件和硬件兩方面入手 本設(shè)計(jì)采用軟件消除抖動(dòng) 從按 鍵斷開到穩(wěn)定閉合 此抖動(dòng)的時(shí)間一般為 5ms 到 10ms 所以當(dāng)單片機(jī)檢測(cè)到有 按鍵被按下時(shí)候 就延時(shí)一段時(shí)間 單片機(jī)與鍵盤的連接方式可分為獨(dú)立式 編碼式 串口擴(kuò)展式和矩陣式 其 中較為常用的有獨(dú)立式和矩陣式 本設(shè)計(jì)采用獨(dú)立式按鍵 也就是每一個(gè)按鍵都 與端口獨(dú)立連接 每一個(gè)按鍵獨(dú)立占一根輸入線 一根輸入線的工作狀態(tài)不會(huì)影 響其他按鍵 獨(dú)立式按鍵通過(guò)檢測(cè)電平的狀態(tài)可以很容易判斷出有沒(méi)有按鍵被按 下 獨(dú)立式的電路配置靈活 軟件算法簡(jiǎn)單 21 3 63 6 振蕩電路振蕩電路 本設(shè)計(jì)芯片選用內(nèi)部振蕩器方式 由于本設(shè)計(jì)的時(shí)間由內(nèi)部定時(shí)器中斷與軟 件計(jì)數(shù)相結(jié)合產(chǎn)生的 所以從計(jì)算方便以及系統(tǒng)的效率上考慮 本設(shè)計(jì)選用 12MHz 頻率的晶振 電路原理圖如下 圖 3 6 atmage16 的振蕩電路 經(jīng)廠家推薦穩(wěn)定電路的電容 C1 C2 22uf C3 為 10uf 22 3 73 7 復(fù)位電路復(fù)位電路 Atmega16 有 5 個(gè)復(fù)位源 上電復(fù)位 外部復(fù)位 看門狗復(fù)位 掉電檢測(cè)復(fù) 位及 JTAG 復(fù)位 復(fù)位時(shí)所有的 I O 寄存器都被設(shè)置為初始值 程序從復(fù)位向量 開始執(zhí)行 本設(shè)計(jì)使用上電復(fù)位電路 單片機(jī)晶振為 12MHz 起振時(shí)間將近 1ms 單片機(jī) 2 個(gè)機(jī)器周期的時(shí)間為 2us 單片機(jī)每次上電復(fù)位所需的最短延時(shí)應(yīng)該不小于 treset 這里 treset 等 于上電延時(shí)與起振延時(shí)之和 從實(shí)際上講 延遲一個(gè) treset 往往還不夠 不能 夠保障單片機(jī)有一個(gè)良好的工作開端 復(fù)位電路把單片機(jī)鎖定在復(fù)位狀態(tài)上并且維持一個(gè)延時(shí) 記作 TRST 以便 給予電源電壓從上升到穩(wěn)定的一個(gè)等待時(shí)間 在電源電壓穩(wěn)定之后 再插入一個(gè) 延時(shí) 給予時(shí)鐘振蕩器從起振到穩(wěn)定的一個(gè)等待時(shí)間 在單片機(jī)開始進(jìn)入運(yùn)行狀 態(tài)之前 還要至少推遲 2 個(gè)機(jī)器周期的延時(shí)間 單片機(jī)是高電平的時(shí)候復(fù)位 一 般是用電阻和電容組成的 電容充電的時(shí) RST 復(fù)位端為高電平 此時(shí)單片機(jī)開始 復(fù)位 電容充電完成 此時(shí)單片機(jī)復(fù)位完成 由此電容值可取 10uf 電阻值取 10K 詳細(xì)見附錄文件 電容充電時(shí)間的 計(jì)算方法 pdf 圖 3 7 Atmage 上電復(fù)位電路 23 第四章第四章 系統(tǒng)軟件設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì) 軟件設(shè)計(jì)是本設(shè)計(jì)的關(guān)鍵 軟件程序編寫的好壞直接影響著系統(tǒng)運(yùn)行情況的 良好 因本程序涉及的模塊較多 所以程序編寫也采用模塊化設(shè)計(jì) C 語(yǔ)言具有 編寫靈活 移植方便 便于模塊化設(shè)計(jì)的特點(diǎn) 所以本系統(tǒng)的軟件采用 Atmage16 編寫 程序框圖如下 初始化初始化 顯示界面顯示界面 從從 DS1302 讀取信讀取信 息息 1602 液晶顯示相關(guān)信息液晶顯示相關(guān)信息 判斷是否有判斷是否有 按鍵按下按鍵按下 時(shí)間 日時(shí)間 日 期設(shè)置模期設(shè)置模 塊塊 初始化初始化 顯示界面顯示界面 從從 DS1302 讀取信讀取信 息息 1602 液晶顯示相關(guān)信息液晶顯示相關(guān)信息 判斷是否有判斷是否有 按鍵按下按鍵按下 沒(méi)有按鍵按下沒(méi)有按鍵按下 24 25 4 14 1 時(shí)鐘函數(shù)模塊時(shí)鐘函數(shù)模塊 具體實(shí)現(xiàn)含有向DS1302串行寫入一字節(jié)即DS1302writeByte 從DS1302讀取 一字節(jié)即DS1302OreadByte 從DS1302指定位置讀數(shù)據(jù)Read1302 向DS1302某地 址寫入數(shù)據(jù)Write1302 設(shè)置時(shí)間set clock 從DS1302獲取時(shí)間 讀取當(dāng)前時(shí)間 get time利用這些函數(shù)來(lái)實(shí)現(xiàn)時(shí)間 最終顯示在液晶屏上 可以自行調(diào)整 你可以顯示系統(tǒng)時(shí)間 也可以顯示調(diào)整時(shí)間 具體實(shí)現(xiàn)是設(shè)置時(shí)間函數(shù) 4 1 14 1 1 實(shí)現(xiàn)功能實(shí)現(xiàn)功能 能夠顯示年月日時(shí)分秒和星期 完成了 24 小時(shí)和 12 小時(shí)之間的切換 并設(shè) 有鬧鐘 鬧鐘存放于 EEPROM 中 時(shí)間和星期以及鬧鐘均可調(diào) 其中鬧鐘掉電數(shù) 據(jù)不會(huì)丟失 4 1 24 1 2 函數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì) 1 void DS1302writeByte uchar data 1 功能 向 DS1302 中寫入一字節(jié)數(shù)據(jù) 2 依據(jù) DS1302 時(shí)序圖 詳見 SD1302 技術(shù)資料 可知 在啟動(dòng) DS1302 時(shí)每產(chǎn)生一 個(gè)下降沿可向 DS1302 中寫入一位數(shù)據(jù) 3 右圖為流程圖 2 uchar DS1302OreadByte void 1 功能 從 DS1302 中讀取一字節(jié)數(shù)據(jù) 2 依據(jù) DS1302 時(shí)序圖 詳見 SD1302 技術(shù)資料 可知 在啟動(dòng) DS1302 時(shí)每產(chǎn)生一 個(gè)上升沿可向 DS1302 中 讀取一位數(shù)據(jù) 3 右圖為流程圖 3 uchar Read1302 uchar ucAddr 1 功能 從指定的地址中讀取一字節(jié)數(shù)據(jù) 2 依據(jù) DS1302 時(shí)序圖 詳見 SD1302 技術(shù)資料 可知 在啟動(dòng) DS1302 時(shí)每產(chǎn)生一 個(gè)下降沿可向 DS1302 中寫入一位數(shù)據(jù) 在啟動(dòng) DS1302 時(shí)每產(chǎn)生一個(gè)上升沿可向 DS1302 中讀取一位數(shù)據(jù) 27 3 下圖為流程圖 4 void Write1302 uchar ucAddr uchar ucDa 1 功能 向 DS1302 指定地址中寫入一字節(jié)數(shù)據(jù) 2 依據(jù) DS1302 時(shí)序圖 詳見 SD1302 技術(shù)資料 可知 在啟動(dòng) DS1302 時(shí)每產(chǎn)生一 個(gè)下降沿可向 DS1302 中寫入一位數(shù)據(jù) 在啟動(dòng) DS1302 時(shí)每產(chǎn)生一個(gè)上升 沿可向 DS1302 中讀取一位數(shù)據(jù) 3 右圖為流程圖 5 void affirm data void 1 功能 輸入數(shù)據(jù)入轉(zhuǎn)換函數(shù) 將十進(jìn)制轉(zhuǎn)換成 BCD 碼 2 依據(jù) 轉(zhuǎn)換公式 3 下圖為流程圖 6 void get time uchar time 1 功能 讀取當(dāng)前時(shí)間 并判斷當(dāng)前是 12 小時(shí)顯示還是 24 小時(shí)顯示 2 依據(jù) 通過(guò)對(duì)標(biāo)志位的判斷來(lái)確定當(dāng)前為 12 小時(shí)制還是 24 小時(shí)制 如果為 12 小 時(shí)時(shí)要將 DS1302 寄存器內(nèi)相應(yīng)位置 1 3 右圖為流程圖 7 void set clock void 功能 向 DS1302 中寫入初始時(shí)間 啟動(dòng) DS1302 振蕩器 判斷上下午 1 依據(jù) DS1302 時(shí)序圖 詳見 SD1302 技術(shù)資料 8 void format datetime uchar d uchar a 1 功能 將數(shù)字轉(zhuǎn)換成字符 2 依據(jù) ASII 碼表 9 void init 1302 void 功能 啟動(dòng) DS1302 振蕩器 1 依據(jù) 由 DS1302 的技術(shù)資料知 DS1302 的秒寄存器的最高位為振蕩器控制位 向 該位置一即可啟動(dòng)振蕩器 30 4 24 2 顯示函數(shù)模塊顯示函數(shù)模塊 檢測(cè) LCD 是否忙 rd bf 向 LCD 發(fā)送命令 wr dictate 向 lcd 發(fā)送數(shù)據(jù) wr data 初始化 1602 顯示 init lcd 初 始化 1602 顯示屏 show function 通用顯示函數(shù) 顯示字符和漢字的字模是用相應(yīng)的軟件導(dǎo)出的 根據(jù)液晶顯 示屏的要求對(duì)時(shí)鐘進(jìn)行調(diào)整 4 2 14 2 1 實(shí)現(xiàn)功能實(shí)現(xiàn)功能 通過(guò) 1602 顯示電子時(shí)鐘 4 2 24 2 2 函數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì) 1 void rd bf void 1 功能 檢測(cè) LCD 是否忙碌 2 依據(jù) 通過(guò)判斷 HD47780 內(nèi)部是否處于空閑狀態(tài)等待單片機(jī)進(jìn)行讀寫操 作 2 void wr dictate uchar dictate 1 功能 寫指令函數(shù) dictate 是要寫入的指令 2 依據(jù) 31 通過(guò)判斷 LCD 是否忙碌 是讀 寫指令 3 void wr data uchar dat 1 功能 寫入數(shù)據(jù) 2 依據(jù) 通過(guò)判斷狀態(tài)位rd bf 是指令還是數(shù)據(jù)寄存器 4 void init lcd void 1 功能 初始化 lcd 2 依據(jù) 通過(guò)寫wr dictate 0 x38 來(lái)完成文本顯示區(qū)首地址 寫單參數(shù)函 數(shù)實(shí)現(xiàn)光標(biāo)形狀 和顯示方式設(shè)置 3 流程圖 4 2 34 2 3 小結(jié)小結(jié) 32 通過(guò) LCD 想顯示 LCD 是很有用的 要牢牢掌握才行 4 34 3 按鍵函數(shù)模塊按鍵函數(shù)模塊 按鍵實(shí)現(xiàn)通過(guò)中斷來(lái)進(jìn)行調(diào)整 鍵盤中斷 INT1 T1 INT 定時(shí)器 1 每秒刷新 LCD 顯示 T0 INT 中斷時(shí) 系統(tǒng)會(huì)調(diào)用一段 特定的函數(shù) 即我們?cè)O(shè)置的中斷函數(shù) 一般稱為中斷服務(wù)函數(shù) 一般的函數(shù)的調(diào)用在程序中是固定的 二中斷服務(wù)函數(shù)的執(zhí)行完 全是隨機(jī)的 4 3 14 3 1 實(shí)現(xiàn)功能實(shí)現(xiàn)功能 通過(guò)按鍵調(diào)整 4 3 24 3 2 函數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì) 鍵盤中斷 INT1 4 3 34 3 3 小結(jié)小結(jié) 通過(guò)對(duì)電子時(shí)鐘調(diào)整函數(shù)的編寫 是我認(rèn)識(shí)到 不管做 什么 都要有明確的思路 對(duì)于本函數(shù)來(lái)說(shuō) 大部分的內(nèi)容都是 相同的不同的只是標(biāo)志位的賦值不同唯一 此時(shí)變成人員就要有 高度清晰的思路 只要有一個(gè)賦值不對(duì) 整個(gè)函數(shù)都會(huì)受到影響 而且這種錯(cuò)誤是非常不易檢查的 同樣在作別的編程的時(shí)候也是 一樣 只有有了高度清晰的思路 我們?cè)谧兂蛇^(guò)程中才不會(huì)被絆 倒 4 44 4 主函數(shù)模塊主函數(shù)模塊 通過(guò)初始化 對(duì)各個(gè)端口進(jìn)行設(shè)置初值 如按鍵輸入端口 PD 數(shù)據(jù)輸入輸出端口 控制端口等 對(duì) 1302 的初始化 lcd 的 初始化等完成主控制器的應(yīng)用 33 第五章第五章 心得體會(huì)心得體會(huì) 單片機(jī)的學(xué)習(xí)已即將結(jié)束 我對(duì)自己的專業(yè)有了更深的體會(huì) 非常感謝老師們的辛勤教導(dǎo) 以企業(yè)的要求對(duì)我們進(jìn)行培訓(xùn) 開拓 我們的思維 改變我們的思維方式 讓我們自主發(fā)揮 讓我們?cè)谝院?工作中少走很多彎路 并在此過(guò)程中讓我們自己找到了自身的種種 缺點(diǎn) 讓我們受益非淺 也許現(xiàn)階段的學(xué)習(xí)還存在諸多不足 在以 后的工作中 會(huì)勤于總結(jié) 認(rèn)真學(xué)好自己的一切課程 第六章第六章 致謝致謝 感謝吳老師的批閱和幫助 希望能達(dá)到你的要求 在你的幫 助下我們的論文會(huì)愈來(lái)愈好的 34 附錄附錄 1 元器件表元器件表 序號(hào)代號(hào)名稱型號(hào) 規(guī)格數(shù)量備注 1U1 單片機(jī) Amega161 2 Kx 1 2 3 4 按鈕 XDJT1102S 4 3C1 C2 電容 0805 30pF2 貼片 4X2 晶振 PTVC 75114 12MHz1 5 液晶顯示器 LCD 016M002L1 6R1 電阻 RJ47 10k 0 5W1 7R2 電位器 WX2 27 15k 1W1 8 RP1 排阻 A09 103J 2 4k 8 1w 1 貼片 9 電源 5V1 35 附錄附錄 2 仿真圖仿真圖 注 代碼暫時(shí)還不能與 protuse 連接 36 附錄附錄 3 3 源碼源碼 dianzizhong c Created 2013 3 15 9 21 25 Author Administrator include 單片機(jī)寄存器的頭文件 include include include a 為要操作的寄存器 b 為要操作的位數(shù) define SET 1 a b a 1 b define CLE 0 a b a i if data else DIO CLE 0 SCLK SET 1 時(shí)鐘信號(hào) delay us 2 SCLK CLE 0 data 1 移位 準(zhǔn)備好下次要寫的數(shù)據(jù) 43 向 DS1302 讀取一個(gè)字節(jié) uchar DS1302OreadByte void uchar i uchar d data 0 CLE 0 DDRD PD5 for i 8 i 0 i d data 1 移位 以便下次存放讀出的數(shù)據(jù) if PIND SCLK SET 1 delay us 2 SCLK CLE 0 SET 1 DDRD PD5 return d data 返回讀到的數(shù)據(jù) 44 寫 ds1302 寄存器 void Write1302 uchar ucAddr uchar ucDa RST CLE 0 SCLK CLE 0 RST SET 1 DS1302writeByte ucAddr 地址 DS1302writeByte ucDa 寫 1byte 數(shù)據(jù) SCLK SET 1 RST CLE 0 讀 ds1302 的寄存器 uchar Read1302 uchar ucAddr uchar ucData RST CLE 0 SCLK CLE 0 RST SET 1 45 DS1302writeByte ucAddr 0X01 地址 命令 ucData DS1302OreadByte SCLK SET 1 RST CLE 0 return ucData void get time uchar time time 5 Read1302 READ SECOND time 4 Read1302 READ MINUTE time 3 Read1302 READ HOUR time 2 Read1302 READ DAY time 1 Read1302 READ MONTH time 0 Read1302 READ YEAR void Initial void Write1302 WRITE PROTECT 0 x00 Write1302 WRITE SECOND 0 x45 46 Write1302 WRITE MINUTE 0 x24 Write1302 WRITE HOUR 0 x09 Write1302 WRITE DAY 0 x13 Write1302 WRITE MONTH 0 x04 Write1302 WRITE PROTECT 0 x80 void adopt data uchar n uchar show data show data n 4 show data 1 n void T1 int void TCCR1B 0 x00 控制寄存器 停止定時(shí) TIMSK 0 x04 中斷屏蔽寄存器 中斷允許 TCNT1 0 xcf2c 100ms 溢出一次 TCCR1B 0 x02 sei 使能全局中斷 47 void init 1302 void Write1302 WRITE PROTECT 0 x00 禁止寫保護(hù) Write1302 WRITE SECOND time 4 秒位初始化 Write1302 WRITE MINUTE time 3 分鐘 Write1302 WRITE HOUR time 2 小時(shí) Write1302 WRITE DAY time 1 日 Write1302 WRITE MONTH time 0 月 Write1302 WRITE PROTECT 0 x80 允許寫保護(hù) 按鍵函數(shù) uchar get key void uchar i 0 PORTD 0 x0f DDRD 0 xf0 設(shè)置為輸出 NOP NOP if PIND 消除抖動(dòng) switch PINDbreak 選擇鍵 case 0 x0d i 3 break 減值鍵 case 0 x0b i 2 break 增值鍵 case 0 x07 i 1 break 確定鍵 while PIND 等待按鍵松開 else i 0 沒(méi)有按鍵被按下 DDRD 0 xff 設(shè)置為輸出 return i 返回按鍵值 轉(zhuǎn)換為 lcd 要顯示的數(shù)據(jù) 49 void adopt data uchar i j 0 for i 0 i 4 lcd show j 1 time i j 2 轉(zhuǎn)換為 ds1302 的時(shí)間 void affirm data void uchar i j 0 for i 0 i 6 i time i lcd show j 4 lcd show j 1 j 2 50 增值函數(shù) n 為要增值的位數(shù) 而 max 是要增值的數(shù)的最大值 限幅 void add d uchar n uchar max if lcd show n max lcd show n else if lcd show n max lcd show n 0 else lcd show n 0 value lcd show n void dec d uchar n uchar max if lcd show n 0 lcd show n else if lcd show n max lcd show n 0 51 else lcd show n max value lcd show n 功能顯示函數(shù) void show function void uchar i uchar function 2 5 0 x43 0 x4c 0 x4f 0 x43 0 x4b 0 x41 0 x4c 0 x41 0 x52 0 x4d wr dictate 0 x01 display lcd 0 x84 0 x7e for i 0 i 6 i display lcd 0 x85 i function 0 i 顯示時(shí)間 display lcd 0 xc5 i function 1 i 設(shè)置時(shí)間 52 void set clock void uchar cursor 0 光標(biāo) uchar i j wr dictate 0 x01 清屏 Write1302 WRITE PROTECT 0 x00 Write1302 WRITE SECOND time 4 0 x80 暫時(shí)停止時(shí)鐘的 運(yùn)行 Write1302 WRITE PROTECT 0 x80 display lcd 0 x82 0 x00 顯示年 display lcd 0 x85 0 x01 月 display lcd 0 x88 0 x02 日 display lcd 0 xc2 0 x03 時(shí) display lcd 0 xc5 0 x03 分 display lcd 0 xc8 0 x03 秒 for i 0 j 0 i 10 i 2 display lcd 0 x80 j number lcd show i display lcd 0 x80 j 1 number lcd show i 1 53 j j 3 wr dictate 0 x02 wr dictate 0 x0e j 0 while 1 NOP switch get key case 1 確認(rèn) cursor j if cursor 2 0 j wr dictate 0 x14 wr dictate 0 x14 54 else wr dictate 0 x14 if cursor 10 j 0 cursor 0 wr dictate 0 x02 光標(biāo)歸位 place 0 x80 j break case 2 加 switch cursor 一下的 case 成功選擇項(xiàng)為光標(biāo)對(duì)應(yīng)的調(diào) 55 整位數(shù) case 0 add d cursor 1 break case 1 if lcd show 0 1 add d cursor 2 else add d cursor 9 break case 2 add d cursor 3 break case 3 if lcd show 2 3 add d cursor 0 else add d cursor 9 break 56 case 4 add d cursor 2 break case 5 if lcd show 4 2 add d cursor 3 else add d cursor 9 break case 6 add d cursor 5 break case 7 add d cursor 9 break case 8 add d cursor 5 break case 9 add d cursor 9 break display lcd place number value 顯示在 液晶屏的相應(yīng)的位置 wr dictate 0 x10 break 57 case 3 減 switch cursor 一下的 case 成功選擇項(xiàng)為光標(biāo)對(duì)應(yīng)的調(diào) 整位數(shù) case 0 dec d cursor 1 break case 1 if lcd show 0 1 dec d cursor 2 else dec d cursor 9 break case 2 dec d cursor 3 break case 3 if lcd show 2 3 58 dec d cursor 0 else dec d cursor 9 break case 4 add d cursor 2 break case 5 if lcd show 4 2 dec d cursor 3 else dec d cursor 9 break case 6 dec d cursor 5 break case 7 dec d cursor 9 break case 8 dec d cursor 5 break case 9 dec d cursor 9 break 59 display lcd place number value 顯示在 液晶屏的相應(yīng)的位置 wr dictate 0 x10 break case 4 退格 affirm data init 1302 T1 OPEN goto OUT default break OUT NOP 補(bǔ)充顯示 void allowance void 60 uchar i j display lcd 0 x82 0 x00 顯示月 display lcd 0 x85 0 x01 日 display lcd 0 x88 0 x02 時(shí) display lcd 0 x8b 0 x03 分 get time time adopt data for i 0 j 0 i 10 i 2 display lcd 0 x80 j number lcd show i display lcd 0 x80 j 1 number lcd show i 1 j j 3 int main void uchar chinese 5 8 61 0 x08 0 x0f 0 x12 0 x0f 0 x0a 0 x1f 0 x02 0 x02 0 x0f 0 x09 0 x0f 0 x0 0 x0f 0 x09 0 x13 0 x00 0 x1f 0 x11 0 x11 0 x1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小型工程器械管理制度
- 華為引入項(xiàng)目管理制度
- 華為公司運(yùn)營(yíng)管理制度
- 公司優(yōu)化財(cái)務(wù)管理制度
- 國(guó)企銷售人員管理制度
- 醫(yī)藥公司辦公管理制度
- 工務(wù)段機(jī)具庫(kù)管理制度
- 品牌公司倉(cāng)庫(kù)管理制度
- 工位器具倉(cāng)庫(kù)管理制度
- 車展規(guī)劃方案(3篇)
- 機(jī)電工程2025年技術(shù)經(jīng)濟(jì)學(xué)試題及答案
- 2025吉林省農(nóng)村信用社員工招聘考試正式筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 電動(dòng)車企業(yè)創(chuàng)業(yè)計(jì)劃書范文
- 2025年法律法規(guī)考試高分攻略試題及答案
- 2024-2025新入員工安全培訓(xùn)考試試題及參考答案(達(dá)標(biāo)題)
- 2025陜西中考:歷史必背知識(shí)點(diǎn)
- 2025屆百師聯(lián)盟高三下學(xué)期二輪復(fù)習(xí)聯(lián)考(三)化學(xué)試題(含答案)
- 2025年內(nèi)蒙古包頭市中考數(shù)學(xué)一模試卷
- 《人工智能應(yīng)用基礎(chǔ)》 完整課件(共十個(gè)模塊-上)
- 國(guó)家開放大學(xué)2025年《創(chuàng)業(yè)基礎(chǔ)》形考任務(wù)1答案
- 《鼻腔止血材料研究》課件
評(píng)論
0/150
提交評(píng)論