freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機的萬年歷的設(shè)計(編輯修改稿)

2025-01-11 01:17 本頁面
 

【文章內(nèi)容簡介】 端產(chǎn)生一個高電平 寫 DS1302 地址 延時一段時間 向該地址寫數(shù)據(jù) 地址增加 數(shù)據(jù)寫完 否 復(fù)位端產(chǎn)生一個高電平 寫 DS1302 地址 延時一段時間 將該地址數(shù)據(jù)讀出 地址增加 數(shù)據(jù)讀完否 顯示數(shù)據(jù) 16 表 讀寫寄存器地址 由表可以看出存放秒到年的 7 個寄存器的地址是固定且有規(guī)律的。寫寄存器都是偶數(shù)( 80H~8Ch) ,讀寄存器都是奇數(shù)( 81H~8Ch),存放的數(shù)據(jù)格式為 BCD 碼形式。 秒寄存器(寫 80H、讀 81H)的 bit7 位定義為時鐘暫停標(biāo)志( CH)當(dāng)該位置為 1 時,時鐘振蕩器停止, DS1302 時鐘芯片處于低功耗狀態(tài),為 0時,時鐘開始運行。 時寄存器(寫 84H、讀 85H)的 bit7 位為 1 時, DS1302 時鐘芯片運行于 12 小時模式, bit7 位為 0 時, DS1302 時鐘芯片運行于 24 小時模式(本設(shè)計是 24 小時模式)。當(dāng)運行于 12 小時模式時, bit5 位為 0 時,表示 AM,bit5 位為 1 時,表示 PM。當(dāng)運行于 24 小時模式時, bit5 位和 bit4 位一起表示 24 小時的 10 位。 控制寄存器(寫 8EH、讀 8FH)的 bit7 位是寫保護位( WP),其它 7 位讀寄存器 寫寄存器 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 范圍 81H 80H CH 10 秒 秒 00~59 83H 82H 10 分 分 00~59 85H 84H 1/0 0 10 時 時 1~12/ 0~23 AM/PM 87H 86H 0 0 10 日 日 1~31 89H 88H 0 0 0 10月 月 1~12 8BH 8AH 0 0 0 0 0 星期 1~7 8DH 8CH 10 年 年 0~99 8FH 8EH WP 0 0 0 0 0 0 0 — 17 均置 0,在任何的對時鐘和 RAM 的寫操作之前, WP 位必須為 0。當(dāng) WP 位為 1 時,寫保護位防止對任一寄存器的寫操作。也就是說在電路上電的初始態(tài) WP 為 1,這時不能改寫表中任何一個時間寄存器,只有將 WP 改寫為 0,才能進行寄存器的寫操作。 下面舉例整體說明: void InitDS1302() { WriteDs1302(0x8e,0x00)。 //控制命令, bit7 位 WP 為 0,寫入不保護指令 delay(5)。 //延時給 DS1302 準(zhǔn)備時間,以下相同 WriteDs1302(0x80,0x30)。 //寫入秒 30 秒 delay(5)。 WriteDs1302(0x82,0x30)。 //寫入分鐘 30 分 delay(5)。 WriteDs1302(0x84,0x12)。 //寫入小時 12 點 delay(5)。 WriteDs1302(0x86,0x15)。 //寫入日期 15 日 delay(5)。 WriteDs1302(0x88,0x05)。 //定入月分 5 月 delay(5)。 WriteDs1302(0x8a,0x07)。 //寫入星期日 delay(5)。 WriteDs1302(0x8c,0x11)。 //寫入年份 11 年 delay(5)。 18 WriteDs1302(0x8e,0x80)。 //控制命令, bit7 位 WP 為 1,禁止寫操作 } DS1302 寫操作時序: 只要有數(shù)據(jù)操作, RST 就要拉高,否則不能操作。 SCLK 是一個命令字節(jié)和一個寫數(shù)據(jù)字節(jié)的時鐘脈沖(上升沿), 前 8 個是負(fù)責(zé)命令字節(jié)的,后 8 個負(fù)責(zé)數(shù)據(jù)字節(jié)。在命令字節(jié)第 8 個時鐘之后緊接著的這個上升沿( D0),數(shù)據(jù)就會寫入。 I/O 就是要傳輸?shù)囊粋€命令字節(jié)(數(shù)據(jù)要存入的地址,如:秒的寫寄存器地址 80H)和一個數(shù)據(jù)字節(jié),數(shù)據(jù)由低位( D0)開始寫入。 程序?qū)崿F(xiàn)說明: (1) 此程序為寫字節(jié)程序: void WriteDs1302Byte(unsigned char temp) { unsigned char i。 for (i=8。i0。i) { DS1302_IO=tempamp。0x01。 //取出 temp 的第 0 位數(shù)據(jù)寫入 1302 DS1302_CLK=0。 將 SCLK 置于低電平,為上升沿寫入做準(zhǔn)備 DS1302_CLK=1。 //上升沿寫入數(shù)據(jù) temp=1。 19 } } (2) 此程序為寫數(shù)據(jù)程序: void WriteDs1302( unsigned char address,unsigned char dat ) { DS1302_RST=0。 //禁止數(shù)據(jù)傳遞 DS1302_CLK=0。 //確保寫 數(shù)據(jù)前 SCLK 被拉低 DS1302_RST=1。 //啟動數(shù)據(jù)傳輸 delay(1)。 WriteDs1302Byte(address)。 //寫地址 WriteDs1302Byte(dat)。 //寫數(shù)據(jù) DS1302_RST=0。 //禁止數(shù)據(jù)傳遞 } DS1302 讀操作時序: SCLK 在讀操作時,在寫命令字節(jié)第 8 個時鐘之后緊接著的變成了下降沿,開始讀數(shù)據(jù)。 程序?qū)崿F(xiàn)說明: (1) 讀字節(jié)程序: unsigned char read_byte() { 20 unsigned char i。 for(i=8。i0。i) { if(DS1302_IO) temp0=temp0|0x80。 //將數(shù)據(jù)取出,寫在 temp0 的最高位 DS1302_CLK=1。 //將 SCLK 置于高電平,為下降沿讀出做準(zhǔn)備 DS1302_CLK=0。 //拉低 SCLK,形成脈沖下降沿 temp0=temp01。 } return temp0。 } (2) 讀取數(shù)據(jù)程序: unsigned char ReadDs1302(unsigned char address) { unsigned char temp。 DS1302_RST=0。 DS1302_CLK=0。 DS1302_RST=1。 WriteDs1302Byte(address)。 //寫入命令字 temp=read_byte()。 //讀出數(shù)據(jù) DS1302_RST=0。 //禁止數(shù)據(jù)傳遞 DS1302_CLK=1。 //將時鐘電平置于已知狀態(tài) return temp。 21 } DS18B20程序設(shè)計 DS18B20 溫度傳感器在本設(shè)計中負(fù)責(zé)實時傳輸當(dāng)前溫度,在液晶上顯示出來。 DS18B20 溫度傳感器操作簡單,一個引腳就可以進行雙向傳輸。這里就簡單說一下,它是如何工作的,先看看 DS18B20 工作流程圖,再看看在程序上的實現(xiàn)。 DS18B20 工作流程圖如圖 所示。 圖 DS18B20 工作流程圖 程序上的實現(xiàn): int GetTemp() { float tt。 unsigned char a,b。 開始 DS18B20 初始化 跳過 ROM 匹配 發(fā)出溫度轉(zhuǎn)換命令 發(fā)出讀溫度命令 延時 數(shù)據(jù)讀出 溫度轉(zhuǎn)換常數(shù) 顯示數(shù)據(jù) 延時 22 DS18B20Init()。 //DS18B20 初始化 TempWriteByte(0xcc)。 // 跳過 ROM 匹配 TempWriteByte(0x44)。 //發(fā)出溫度轉(zhuǎn)換命令 delayb(100)。 DS18B20Init()。 //DS18B20 初始化 TempWriteByte(0xcc)。 //跳過 ROM 匹配 TempWriteByte(0xbe)。 //發(fā)出讀溫度命令 delayb(200)。 a=TempRead()。 //數(shù)據(jù)讀出 b=TempRead()。 temp=b。 temp=8。 temp=temp|a。 tt=temp*。 //溫度轉(zhuǎn)換常數(shù) temp=tt*10+。 return temp。 } DS18B20 溫度傳感器 就介紹到這里了,具體的讀寫操作就不 介紹 了,原理和 DS1302 時鐘芯片的讀寫操作差不多,可以參考,當(dāng)然 DS18B20 的資料介紹得更清楚一些。 12864液晶顯示程序設(shè)計 下面先看一下 12864 液晶并行連接的讀寫時序: 23 LCD 的寫時序: RS 引腳有 H(高) L(低)兩種狀態(tài), RS=H 時,單片機將進行寫數(shù)據(jù)操作; RS=L 時,單片機將進行寫指令操作。 R/W 引腳要與 RS 的狀態(tài)結(jié)合,具體操作看表 , R/W 在這里不管 RS 是高低都是進行寫操作。 E 引腳為使能信號, E=H→L 時,配合 R/W 進行寫數(shù)據(jù)或指令; E=H 時,配合 R/W 進行讀數(shù)據(jù)或讀指令。程序操作時注意延時,延時的大小很重要。 LCD 的讀時序: 讀時序與寫時序差不多,區(qū)別是 R/W 在讀操作時是拉高的,與寫操作相反,其它都一樣。同樣要注意延時。 12864 液晶與單片機通信時,可以采用串行數(shù)據(jù)通信和并行數(shù)據(jù)通信,我這里將液晶的 DB0~DB7 引腳對應(yīng)的接上單片機的 ~ 引腳,因此 24 采用的是并行數(shù)據(jù)通信。 部分基本指令介紹見表 。 表 部分基本指令介紹 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 清除顯示 L L L L L L L L L H 顯示狀態(tài) L L L L L L H D C B 寫 RAM H L D7 D6 D5 D4 D3 D2 D1 D0 讀 RAM H H D7 D6 D5 D4 D3 D2 D1 D0 讀忙狀態(tài) L H BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 表中的 RS=H 表示 DB0DB7 為顯示數(shù)據(jù), RS=L 表示 DB0DB7 為顯示指令數(shù)據(jù)。 R/W=H 且 E(使能信號) =H 表示數(shù)據(jù)被讀到 DB0DB7, RW=L且 E=H→L 表示 DB0DB7 的數(shù)據(jù)被寫到 RAM。 DB0DB7 表示數(shù)據(jù)口。 H表示高電平, L 表示低電平。 (1) 清除顯示功能:清除顯示屏幕,把 DDRAM 位地址計數(shù)器調(diào)整為“00H”。 (2) 顯示狀態(tài)功能: D=1 表示整體顯示開( ON), C=1 表示游標(biāo)開, B=1表示游標(biāo)位置開。 (3) 寫 RAM(寫資料到 RAM)功能:寫資料到內(nèi)部的 RAM。( DDRAM/CGRAM/TRAM/GDRAM)。 (4) 讀 RAM(讀出 RAM 的值)功能:從內(nèi)部 RAM 讀取資料( DDRAM/CGRAM/TRAM/GDRAM)。 (5) 讀忙狀態(tài)(讀取忙碌狀態(tài)和位址)功能:讀取忙碌狀態(tài)( BF)可以確認(rèn)內(nèi)部動作是否完成,同時可以讀出位址計數(shù)器( AC)的值。 字符顯示 RAM 在液晶模塊中的地址為 80H~9FH,字符顯示的 RAM 的地址與 32個字符顯示區(qū)域有著一一對應(yīng)的關(guān)系,其對應(yīng)關(guān)系如下表 。 25 表 RAM 地址與顯示區(qū)域?qū)?yīng)關(guān)系 80H 81H 82H 83H 84H 85H 86H 87H 90H 91H 92H 93H 94H 95H 96H 97H 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH 由表 可以看出,液晶顯示內(nèi)容時可以在相應(yīng)的地址上進行操作,要注意選擇顯示的地址,避免地址重復(fù)選擇,不然可能出現(xiàn)顯示混亂或者不顯示的結(jié)果。
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1