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

正文內(nèi)容

基于單片機(jī)的電子萬年歷的設(shè)計(jì)—畢業(yè)設(shè)計(jì)論文(參考版)

2025-03-02 12:02本頁(yè)面
  

【正文】 本設(shè)計(jì)正是大家熟悉的電子萬年歷。 第 34 頁(yè) 共 40 頁(yè) 總 結(jié) 隨著科技的發(fā)展、時(shí)代的進(jìn)步、人們的生活水平越來越高,現(xiàn)在已經(jīng)是信息技術(shù)化的時(shí)代。 仿真結(jié)果 此程序能穩(wěn)定的運(yùn)行,成功顯示出公歷和農(nóng)歷時(shí)間,還可顯 示小時(shí)溫度及星期。最后調(diào)試時(shí)間,調(diào)整程序。另外可以通過軟件來調(diào)試硬件,如為了測(cè)試顯示電路連接是否正確,可以編寫一個(gè)簡(jiǎn)單的顯示程序來測(cè)量它。硬件調(diào)試主要是檢測(cè)硬件電路是否有短路、斷路、虛焊等。本系統(tǒng)采用 PROTEUS 軟件進(jìn)行仿真。 系統(tǒng)主流程圖 系統(tǒng)的軟件主流程圖如圖 47 所示 圖 47 系統(tǒng)主流程圖 詳細(xì)系統(tǒng)主程序見附錄 2。 //function 鍵 掃描按鍵 Function 鍵有效,進(jìn)入時(shí) 鐘調(diào)整程序 是否調(diào)整時(shí)間 Y 使用 UP或 DOWN進(jìn)行調(diào)整 返回主程序 N 第 31 頁(yè) 共 40 頁(yè) default : return null。 //down 鍵 case 0x0b: return clear_array。 0x0f ) //將按鍵碼轉(zhuǎn)換成鍵值 { case 0x0e: return up_array。 0x0f ) != 0x0f )。 //顯示 小時(shí) 其中時(shí)間數(shù)組全為 BCD碼。 Lcd_Character_16X8( 1, 2, 24 , letter_logo[i])。 //顯示 小時(shí)的高位 i= * clock_time amp。例如顯示小時(shí): //顯示 小時(shí) i= * clock_time 4。 例如年字的字型碼為: /* 文字 : 年 */ /* 宋體 12。當(dāng)顯示至一行的末尾時(shí)要換行顯示。 256 256 點(diǎn)陣的液晶顯示模塊能顯示 16 16個(gè)漢字。通過數(shù)據(jù)讀寫操作控 制位 E 向 LCD 模塊發(fā)送脈沖,與單片機(jī)之間進(jìn)行數(shù)據(jù)交換。 //開啟顯示器 Lcd_Clear() 。 //起始地址 Lcd_Write_Command( 0xc0) 。 //關(guān)閉顯示器 Lcd_Write_Command( 0xb8) 。 LCD 顯示系統(tǒng) 要使 LCD液晶顯示器顯示內(nèi)容,首先要對(duì) LCD 進(jìn)行初始化。 } //農(nóng)歷年等于公歷年減 1,定位前一年 while( temp3 temp1 ) //temp3 陽(yáng)歷日離春節(jié)的天數(shù) if( flag_year == 0 ) //如果不是閏年 month =1。該部分主要程序語(yǔ)句如下: 第 29 頁(yè) 共 40 頁(yè) if( year == 0 ) { year = 99。當(dāng) A 小于 B時(shí),農(nóng)歷日等于 B減 A加 1。//calendar_address 農(nóng)歷地址 temp2 = 4。 //小月 29天 //閏月所在的月分 temp2 = year_code[ calendar_address ] amp。 //檢查該陰歷月的大小 大月返回 1 小月返回 0 if( flag_month ) // flag_month 為陰歷月 temp1 = 30。如果 A大于等于 B 且 A等于 A 減 B,再判斷農(nóng)歷月是否等于閏月,如果不是農(nóng)歷月加 1,如果是且當(dāng)年沒閏月,農(nóng)歷月加 1。如果陽(yáng)歷日在春節(jié)之后或者春節(jié)當(dāng)日,則農(nóng)歷年和公歷年在一年相等,從數(shù)據(jù)表內(nèi)取出農(nóng)歷天數(shù) 記為 B。amp。農(nóng)歷三年一閏,五年兩閏,十九年七閏,每逢閏年所加的一個(gè)月叫做閏月。閏年指的就是陽(yáng)歷有閏日或陰歷有閏月的一年。 //陽(yáng)歷月大于 10 月 取得春節(jié)和陽(yáng)歷日離元旦的天數(shù)后,可求的陽(yáng)歷 日離春節(jié)的天數(shù),求的的天數(shù)記為A,然后判斷該年是否為閏年或者有閏月。 //春節(jié)在 1月 第 28 頁(yè) 共 40 頁(yè) temp3 = temp2 + 31 – 1 //春節(jié)在 2月 //計(jì)算陽(yáng)歷月離當(dāng)年元旦的天數(shù) day_number = day_code1[ month 1 ] + day 1。 0x1f。 0x60。 //21 世紀(jì) calendar_address = ( year 1 ) * 3。通過計(jì)算可取得公歷日和春節(jié)距離元旦的天數(shù),以計(jì)算 2021 年 10 月 16 號(hào)為例,對(duì)應(yīng)數(shù)據(jù)為( 0, 0x4,0x10,0x16)其中第一位數(shù) 0 值 21 世紀(jì),如果是 1 為 19 世紀(jì)。 //年與 16求余 year=temp1*10+temp2。方法如下: temp1=year/16。格式如下: 0x04, 0xAe, 0x53, //1901 0x0A, 0x57, 0x48, //1902 0x55, 0x26, 0xBd, //1903 0x0d, 0x26, 0x50, //1904 0x0d, 0x95, 0x44, //1905 0x46, 0xAA, 0xB9, //1906 ?? 0x0d, 0x15, 0x41, //2098 0x2d, 0x92, 0xB5, //2099 有了此數(shù)據(jù)之后,可以開始設(shè)計(jì)算法了。第三字節(jié) BIT7 表示農(nóng)歷第 13 個(gè)月大小。格式第一字節(jié) BIT74 位表示閏月月份,值為 0 為無閏月, BIT30 對(duì)應(yīng)農(nóng)歷第 14 月的大小。陰歷一 年有 12 個(gè)月或 13個(gè)月(含閏月),一個(gè)月為 30 天或 29天。 //讀時(shí) 第 26 頁(yè) 共 40 頁(yè) 陰歷軟件設(shè)計(jì) 圖 44 陰歷轉(zhuǎn)換流程圖 陰歷程序的實(shí)現(xiàn)是要靠陽(yáng)歷日期來推算。 //讀分 clock_time ++。 //讀秒 clock_time ++。 //WP=1 讀保護(hù) 現(xiàn)在已經(jīng)對(duì)程序進(jìn)行了初始化并且定義了寄存器,可以從 DS1302 時(shí)鐘芯片中讀出時(shí)間與日期。 //月 Clock_Write_Time( year_address, * clock_time )。 //時(shí) Clock_Write_Time( day_address, * clock_time )。 //指向分 Clock_Write_Time( minute_address, * clock_time )。 //WP=0 寫操作 //最高位為 0 時(shí)鐘芯片工作 Clock_Write_Time( second_address, * clock_time )。 //定義最高位 define second_address 0x80 //秒寄存器 define minute_address 0x82 //分寄存器 define hour_address 0x84 //小時(shí)寄存器 define day_address 0x86 //日期寄存器 define month_address 0x88 //月份寄存器 define year_address 0x8C //年寄存器 首次對(duì) DS1302 進(jìn) 行操作之前,必須對(duì)它進(jìn)行初始化,然后從 DS1302 中讀出數(shù)據(jù),再經(jīng)過處理后,送給顯示緩沖單元。由此可定義位變量: sbit ACC0 = ACC ^ 0。 單片機(jī)是通過簡(jiǎn)單的同步串行通訊與 DS1302 通訊的,每次通訊都必須由單片機(jī)發(fā)起,無論是讀還是寫操作,單片機(jī)都必須先向 DS1302 寫入一個(gè)命令幀。 // 跳過讀序號(hào)列號(hào)的操作 Sensor_Write_Byte( 0xBE )。 // 跳過讀序號(hào)列號(hào)的操作 Sensor_Write_Byte( 0x44 )。 ROM 操作命令 : Read T(讀 區(qū)溫度寄存器 ) [BEh], Skip ROM( 跳過 ROM ) [CCh], Convert T(溫度變換) [44h]。 return (~i)。 // 稍做延時(shí)后 i = dq。 // 精確延時(shí),大于 480us dq = 1。 // 稍做延時(shí) dq = 0。 控制系統(tǒng) 顯示系統(tǒng) 時(shí)鐘系統(tǒng) 溫度采集系統(tǒng) 初始化模塊 DS18B20取得溫度值 存入儲(chǔ)存器 處 理溫度值,換成 BCD碼 顯示溫度 第 24 頁(yè) 共 40 頁(yè) dq = 1。存在脈沖讓總線控制器知道 DS18B20 在總線上且已準(zhǔn)備好操作。 // count 表示延時(shí)參數(shù),值越大,延時(shí)時(shí)間越長(zhǎng) } 單 總線上的 所有處理都要從初始化開始。軟件系統(tǒng)框圖如下: 圖 41 軟件系統(tǒng)框圖 溫度采集軟件 因?yàn)?DS18B20溫度傳感器在測(cè)溫時(shí)是通過累加來記錄溫度的,為了溫度傳感器正常穩(wěn)定的運(yùn)行,需要加延時(shí)子程序。 圖 313 LCD顯示模塊 第 23 頁(yè) 共 40 頁(yè) 第 4 章 軟件設(shè)計(jì) 本系統(tǒng)的軟件采用 C語(yǔ)言編寫,主要由時(shí)鐘系統(tǒng),溫度采集系統(tǒng),控制系統(tǒng)和顯示系統(tǒng)組成。 第 22 頁(yè) 共 40 頁(yè) CS1:右半屏選屏信號(hào)。 Vo:液晶顯示器驅(qū)動(dòng)電源。 R/W:讀寫控制線, R/W=0:寫操作, R/W=1:讀操作。 RST :復(fù)位信號(hào)。 GND:接地。由于狀態(tài)位作用不一樣,因此執(zhí)行不同指令必須檢測(cè)不同狀態(tài)位。 LGM12641BS1R 的指令可帶一個(gè)、兩個(gè)參數(shù),或無參數(shù)。由于一般的段式液晶屏,需要專門的驅(qū)動(dòng)電路,而且可視性相對(duì)較差,對(duì)于具有驅(qū)動(dòng)電路和微處理器接口的液晶顯示模塊(字符或點(diǎn)陣),一般多采用并行接口,對(duì)微處理器的接口要 求較高,占用資源多。它們與單片機(jī)的 P0口相連,依次接 , , 。 Clear 鍵,具有清除返回的功能。 決定選用 4個(gè)按鈕的小鍵盤, 四個(gè)按鈕的功能分別為:up鍵,具有向上和加 1 的功能。故這種形式適用于按鍵數(shù)量較少的場(chǎng)合。 查詢式按鍵是各按鍵相互獨(dú)立,每個(gè)按鍵占用一根 I/O口線,每根 I/O口線上的按鍵工作狀態(tài)不會(huì)影響其他 I/O口線上按鍵的工作狀態(tài)。 圖 311 DS18B20溫度采集模塊 鍵盤模塊 按照鍵盤與 CPU 的連接方式可以分為查詢按鍵和矩陣式鍵盤。 溫度轉(zhuǎn)換計(jì)算方法舉例: 第 20 頁(yè) 共 40 頁(yè) 例如當(dāng) DS18B20 采集到 +125℃ 的實(shí)際溫度后,輸出為 07D0H,則: 實(shí)際溫度 =07D0H =2021 =1250C。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后 。 DS18B20 的高速暫存存儲(chǔ)器由 9個(gè)字節(jié)組成。在這條命令發(fā)出之后,對(duì)于所發(fā)出的第一個(gè)讀數(shù)據(jù)時(shí)間片,器件會(huì)輸出溫度轉(zhuǎn)換忙的標(biāo)識(shí): “0”= 忙, “1”= 準(zhǔn)備就緒。 Recall E2(重新調(diào)整 E2) [B8h] 這條命令把貯存在 E2 中溫度觸發(fā)器的值重新調(diào)至?xí)捍娲鎯?chǔ)器。如果總線控制器在這條命令之后跟著發(fā)出讀時(shí)間隙,而 DS18B20 又忙于做時(shí)間轉(zhuǎn)換的話, DS18B20 將在總線上輸出 “0” ,若溫度轉(zhuǎn)換完成,則輸出 “1” 。 Convert T(溫度變換) [44h] 第 19 頁(yè) 共 40 頁(yè) 這條命令啟動(dòng)一次溫度轉(zhuǎn)換而無需其他數(shù)據(jù)。如果總線控制器在這條命令之后跟著發(fā)出讀時(shí)間隙,而 DS18B20又正在忙于把暫存器拷貝到 E2存儲(chǔ)器, DS18B20 就會(huì)輸出一個(gè) “0” ,如果拷貝結(jié)束的話, DS18B20 則輸出 “1” 。如果不想讀完所有字節(jié),控制器可以在任何時(shí)間發(fā)出復(fù)位命令來中止讀取。 Read Scratchpad(讀暫存存儲(chǔ)器) [BEh] 這個(gè)命令讀取暫存器的內(nèi)容。接下來寫入的兩個(gè)字節(jié)將被存到暫存器中的地址位置 2和 3。貯存在 EEPROM 內(nèi)的觸發(fā)器值用于告警。告警的條件定義為溫度高于 TH 或低于 TL。 Alarm Search(告警搜索) [ECh] 此命令的流程與搜索 ROM 命令相同。 Search ROM( 搜索 ROM) [F0h] 當(dāng)系統(tǒng)開始工作時(shí),總線主機(jī)可能不知道單線總線上的器件個(gè)數(shù)或者不知道其 64位 ROM 編碼。 Skip ROM( 跳過 ROM ) [CCh] 第 18 頁(yè) 共 40 頁(yè) 在單點(diǎn)總線系統(tǒng)中,此命令通過允許總線主機(jī)不提供 64 位 ROM 編碼而訪問存儲(chǔ)器操作來節(jié)省時(shí)間。所有與 64 位 ROM 序列不符的從片將等待復(fù)位脈沖。 Matc
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1