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

正文內(nèi)容

基于單片機(jī)的電子萬年歷的設(shè)計—畢業(yè)設(shè)計論文-閱讀頁

2025-03-18 12:02本頁面
  

【正文】 0000h ℃ 1111 1111 1111 1000 FFF8h ℃ 1111 1111 0101 1110 FF5Eh ℃ 1111 1110 0110 1111 FE6Fh 55℃ 1111 1100 1001 0000 FC90h 上表是 DS18B20 溫度采集轉(zhuǎn)化后得到的 12 位數(shù)據(jù),存儲在 DS18B20 的兩個 8 比特的 RAM 中,二進(jìn)制中的前面 5位是符號位,如果測得的溫度大于或等 于 0,這 5 位為 0,只要將測到的數(shù)值乘于 即可得到實際溫度;如果溫度小于 0,這 5位為 1,測到的數(shù)值需要取反加 1再乘于 即可得到實際溫度。 例如當(dāng) DS18B20 采集到 55℃ 的實際溫度后,輸出為 FC90H,則應(yīng)先將 11位數(shù)據(jù)位取反加 1 得 370H(符號位不變,也不作為計算),則: 實際溫度 =370H =880 =550C。 由于程序操作簡單,只需 4個按鍵,所以選有查詢式按鍵。查詢式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單,但每個按鍵必須占用一根 I/O 口線,在按鍵數(shù)量較多時, I/O 口線浪費較大,且電路結(jié)構(gòu)顯得繁雜。 此 設(shè)計 因為需要的按鍵少。 Down 鍵,具有向下和減 1的功能。 Function鍵具有運(yùn)行進(jìn)入的功能。 第 21 頁 共 40 頁 圖 312 鍵盤模塊 LCD 顯示模塊 就時鐘而言,通??刹捎靡壕э@示或數(shù)碼管顯示。因此,本設(shè)計采用 LGM12641BS1R 顯示。若指令中含有參數(shù),則每條指令執(zhí)行時均須先送入?yún)?shù),再送入指令代碼。 其引腳功能如下: VCC:電源。 DB0~DB7:數(shù)據(jù)線。 E:數(shù)據(jù)讀寫操作控制位, E 線向 LCD 模塊發(fā)送一個脈沖, LCD 模塊與單片機(jī)之間將進(jìn)行一次數(shù)據(jù)交換。 DI:顯示指令控制端。 Vout: LCD 驅(qū)動負(fù)電壓。 CS2:左半屏選屏信號。單片機(jī)向時鐘芯片和測溫元件發(fā)出命令使其完成讀或?qū)懖僮?,將讀出的信息轉(zhuǎn)為 BCD 碼,最后送入顯示系統(tǒng)實現(xiàn)功能。程序如下: void Sensor_Delay(uchar count) { while(count)。 初始化序 圖 42 溫度采集流程圖 列包括總線主機(jī)發(fā)出一復(fù)位 脈沖,接著由從屬器 件送出存在脈沖。 初始化程序如下: uchar Sensor_Initial(void) { uchar i = 0。 // DQ 復(fù)位 Sensor_Delay(8)。 // 單片機(jī)將 DQ 拉低 Sensor_Delay(80)。 // 拉高總線 Sensor_Delay(14)。 // 若 x=0 則初始化成功,若 x=1 則初始化失敗 Sensor_Delay(20)。 } 一旦總線主機(jī)檢測到從屬器件的存在,它便可以發(fā)出器件 ROM 操作命令之一 , 所有ROM操作命令均為 8 位長。 Sensor_Write_Byte( 0xCC )。 // 啟動溫度轉(zhuǎn)換 Sensor_Write_Byte( 0xCC )。 // 讀取溫度寄存器 陽歷軟件設(shè)計 因為使用了時鐘芯片 DS1302,陽歷程序只需從 DS1302各寄存器中讀出年、周、月、日、時、分、秒等數(shù)據(jù),再處理即可。此命令幀是由八位二進(jìn)制組成,最 高位 BIT7 固定為 1, BIT6 決定操作是針對 RAM 還是時鐘寄存器,接著的 5個 BIT 是 RAM 或時鐘寄存器在 DS1302 的內(nèi)部地址,最后一個 BIT 表示這次操作是 圖 43 陽歷流程圖 讀操作抑或是寫操作,詳細(xì)格式可見表 32。 //定義最低位 子程序入口 初始化 1302時鐘芯片 從 1302 時鐘芯片中讀出時間和日期 讀出數(shù)據(jù)為 BCD碼,送入顯示緩沖單元 第 25 頁 共 40 頁 sbit ACC7 = ACC ^ 7。初始化相應(yīng)程序如下: Clock_Write_Time(0x8e,0x00)。 //秒 clock_time ++。 //分 Clock_Write_Time( hour_address, * clock_time )。 //日 Clock_Write_Time( month_address, * clock_time)。 //年 Clock_Write_Time( 0x8e,0x80)。例如: * clock_time = Clock_Read_Time( second_address )。 //指向分 * clock_time = Clock_Read_Time( minute_address )。 //指向時 * clock_time = Clock_Read_Time( hour_address )。陽歷一個月不是 30 天就是 31 天( 2月除子程序入口 根據(jù)公歷年,定位數(shù)據(jù)表地址 從數(shù)據(jù)表取得春節(jié)公歷的日期,并通過計算公歷日和春節(jié)離元旦的天數(shù),算出公歷日離春節(jié)的天數(shù)記為 A 公歷在春節(jié)以后? 農(nóng)歷年 =公歷年 取農(nóng)歷月信息 農(nóng)歷年 =公歷年 1,定位前一年,取農(nóng)歷月信息 農(nóng)歷月 =12,閏月 C=0(非閏月) 農(nóng)歷月 =1,閏月 C=0(非閏月) 取農(nóng)歷天數(shù) B 取農(nóng)歷天數(shù) B 農(nóng)月 =閏月? C取反 農(nóng)歷月加 1 C=1? 農(nóng)歷月減 1 C取反 農(nóng)月 =閏月? C=1? AB? A=AB A=AB A=B? 農(nóng)歷日 =BA+1 農(nóng)歷日 =A+1 農(nóng)歷年 、月、日數(shù)據(jù)標(biāo)準(zhǔn)化 子程序出口 Y N Y Y Y Y Y Y N N N N N N 第 27 頁 共 40 頁 外,閏年 2月為 29 天)。根據(jù)陰歷和陽歷的關(guān)系可得出以下數(shù)據(jù),公歷年對應(yīng)的農(nóng)歷數(shù)據(jù),每年三字節(jié)。第二字節(jié) BIT70 對應(yīng)農(nóng)歷第 512 月大小。月份對應(yīng)的位為 1 表示本農(nóng)歷月大( 30 天),為 0 表示?。?29 天),第三字節(jié)BIT65 表示春節(jié)的公歷月份, BIT40 表示春節(jié)的公歷日期。由于輸入的年、月、日數(shù)據(jù)都為二進(jìn)制( BCD碼),換算很不方便,所以把它轉(zhuǎn)換為十六進(jìn)制( HEX 碼)。 //BCDhex 先把數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制 temp2=year%16。 轉(zhuǎn)換為十六進(jìn)制后可以根據(jù)公歷年定位數(shù)據(jù)表地址,可從數(shù)據(jù)表內(nèi)取得該年公歷春節(jié)的日期。算法如下: //定位數(shù)據(jù)表位置 calendar_address = ( year + 99 ) * 3。 //19 世紀(jì) //取春節(jié)所在的陽歷月份 temp1 = year_code[ calendar_address + 2 ] amp。 //Bit6~~Bit5 //取春節(jié)所在的陽歷日期 temp2 = year_code[ calendar_address + 2 ] amp。 //Bit4~~Bit0 //計算春節(jié)離當(dāng)年元旦的天數(shù);春節(jié)只會在陽歷的 1月 或 2 月 temp3 = temp2 1。 //陽歷月小于 10 月 day_number = day_code2[ month 10 ] + day 1。如果陽歷的月大于 2 且該年的 2 月為閏月,天數(shù)加 1 。陽歷四年一閏,在二月加一天,這一天叫做閏日。方法如下: if( ( month 2 ) amp。 ( year % 4 == 0) ) day_number ++ 然后再判斷陽歷日在春節(jié)之前還是之后。如果 A 小于 B,農(nóng)歷日等于 A加 1。算法的主要語句如下: if( day_number = temp3 ) //陽歷在春節(jié)之后或春節(jié)當(dāng)日 flag_month = get_moon_day( month_point, calendar_address )。 //大月 30天 temp1 = 29。 0xf0。 //提取高四位 假如是 0 表示沒有閏月 while( day_number = temp1 ) // day_number 陽歷日離春節(jié)的天數(shù) 如果陽歷日在春節(jié)之前,與上面算法大體相同,但要注意農(nóng)歷年等于公歷年減 1。如果 A大于 B,判斷是否為改年有閏月,沒有的話農(nóng)歷月減 1,最后判段農(nóng)歷月是否等于閏月,如果等于則閏月取反。 c_flag = 1。 //農(nóng)歷月減 1 if( month == temp2 ) //農(nóng)歷月等于閏月 最后算出結(jié)果轉(zhuǎn)為二進(jìn)制碼( BCD 碼)送入顯示單元。程序如下: Lcd_Display_Off() 。 //頁面地址 Lcd_Write_Command( 0x40) 。 //行開始 Lcd_Display_On() 。 //清屏 圖 45 顯示流程 此程序中開啟顯示器的主要語句 port=0x3f;關(guān)閉顯示器的主要語句為 port=0x3e。 要使 LCD液晶顯示器顯示文字有兩種方法,文本顯示和圖形顯示,這里重點介紹以圖形方式顯示漢字的方法。對于每個漢字的顯示,首先應(yīng)該計算該漢字在字庫中的地址,然后讀出該漢字的字型碼。顯示漢字時,一個 16 16 的漢字字型碼占 32 個字節(jié),每顯示一行要 2個字節(jié);第二行顯示時,顯示地址要在前一行首字節(jié)地址上加 30,共需要 16次循環(huán)才能完整地顯示一個漢字。 此字體下對應(yīng)的點陣為:寬 x 高 =16x16 */ 子程序入口 初始化 LCD 寫指令數(shù)據(jù)或讀顯示數(shù)據(jù) 子程序出口 第 30 頁 共 40 頁 0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00, 0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00, 讀出漢字后就能顯示相應(yīng)信息。 Lcd_Character_16X8( 1, 2, 16 , letter_logo[i])。 0x0f。 //顯示 小時的低位 Lcd_Character_16X16( 1, 2, 32 , time_logo[0])。 按鍵系統(tǒng) 此程序共有 4個按鍵,每次按完鍵后應(yīng)該使鍵松開,為此設(shè)定一個按鍵松開程序如下所示: void Key_Idle() { while( ( P0 amp。 } 要使按鍵實現(xiàn)相應(yīng)的功能,應(yīng)該設(shè)置一個按鍵掃描程序如下: 圖 46 控制流程圖 switch ( P0 amp。 //UP 鍵 case 0x0d: return down_array。 //clear 鍵 case 0x07: return function_array。 //返回 } 確定按鍵后就能使其實現(xiàn)功能。 開始初始化 從 DS1302 讀出信息 LCD 液晶顯示相關(guān)信息 判斷是否有鍵按下 調(diào)整時間 沒有鍵按下 N Y 第 32 頁 共 40 頁 第 5 章 系統(tǒng)調(diào)試 本設(shè)計的核心采用是 AT89C52 單片機(jī),外部連接電子電路,構(gòu)成了一個電子萬年歷系統(tǒng)。 調(diào)試過程 調(diào)試分為硬件調(diào)試和軟件調(diào)試。 DS1302 的硬件電路很簡單,只通過 3根線于單片機(jī)相連,很容易檢測,主要是檢查其引腳,如晶振和電源等 是否接好。接下來可進(jìn)行軟件調(diào)試,可以編寫只含 DS1302 的計時和讀寫程序、顯示程序,測試 DS1302 是否正常工作。 圖 51 系統(tǒng)仿真圖 按一下 function 鍵可進(jìn)入調(diào)整界面,再按一下可切換調(diào)整內(nèi)容,如下圖所示: 第 33 頁 共 40 頁 圖 52 系統(tǒng)調(diào)試切換圖 UP鍵和 DOWN 鍵分別起加 1和減 1 的作用, CLEAR 鍵起返回的作用。經(jīng)測試此程序比標(biāo)準(zhǔn)時間略慢,有一定誤差。而電子時鐘在現(xiàn)在的應(yīng)用非常廣泛,已經(jīng)成為人們生活必不可少的一部分。 本設(shè)計功能齊全適用于大眾,以 AT89C52 單片機(jī)為控制核心,與外圍的一些元件通過線路
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1