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

正文內(nèi)容

基于51單片機(jī)的液晶萬年歷設(shè)計論文帶溫度顯示(已修改)

2025-03-14 07:28 本頁面
 

【正文】 摘要 在寒假期間我 用一周時間完成 了這個液晶萬年歷,它可 以 顯示年月日 、時分秒、以及溫度(可上下限報警),可以對時間進(jìn)行加一或減一調(diào)整 , 并加入了閏、平年時間調(diào)整, 方便可行,已經(jīng)調(diào)試成功。 考慮到成本和方便, 本作品采用了STC89c52 和 DS18B20,計時用 的是 51 單片機(jī)自帶的十六位定時器 /計數(shù)器 T0,盡管對時間進(jìn)行了誤差調(diào)整但是還是有一定的誤差,考慮到學(xué)校后改用 DS1302時鐘芯片,進(jìn)一步減小誤差。溫度顯示精度達(dá)到 攝氏度。 關(guān)鍵詞: 單片機(jī) DS18B20 萬年歷 溫度 1. 硬件工作介紹 ( 1)上電 自動復(fù)位 及手動復(fù)位電路 STC89c52 單片機(jī)的 RST 端外部復(fù)位有兩種操作方式 :上電自動復(fù)位和按鍵手動復(fù)位。本設(shè)計用上電自動復(fù)位 以及手動復(fù)位下結(jié)合的方式 外接電路(見附圖) 。 ( 2)時鐘振蕩電路 作品中采用 12M 晶振,其連接方法如圖所示,其中電容的值都為 22pF。 ( 3) 1602 液晶顯示 接口 1602 采用標(biāo)準(zhǔn)的 16 腳接口 (見附圖) ,其中 : 第 1 腳: GND 為地電源 第 2 腳: VCC 接 5V 正電源 第 3 腳: V0 為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用 時可以通過一個 10K 的電位器調(diào)整對比度 第 4 腳: RS 為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。 第 5 腳: RW 為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng) RS和 RW 共同為低電平時可以寫入指令或者顯示地址,當(dāng) RS 為低電平 RW 為高電平時可以讀忙信號,當(dāng) RS 為高電平 RW 為低電平時可以寫入數(shù)據(jù)。 第 6 腳: E 端為使能端,當(dāng) E 端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。 第 7~ 14 腳: D0~ D7 為 8 位雙向數(shù)據(jù)線。 第 15 腳: VCC 第 16: GND ( 4)鍵盤 鍵盤是通過 S3(),S4(),S5()對時鐘進(jìn)行調(diào)整,其 S3 選擇要調(diào)整的對象如時,分,日,月等等 ,并在液晶屏上顯示所 選的對象 。 S4 對所選中的對象進(jìn)行加 一 調(diào)整,而 S5 對所選對象進(jìn)行減 一 調(diào)整。 ( 5) 蜂鳴器 對溫度進(jìn)行測量,高低溫 超限 報警,正常溫度在 攝氏度,超過最高或低于最低溫度就會鳴叫報警。 2. 軟件工作介紹 由于 C 語言功能豐富,表達(dá)能力 和可移植能力 強(qiáng),而且 操作方便,簡單易懂 ,因此軟件部分由 C 語言編寫 ,程序的重點和難點是閏月的時間調(diào)整以及鍵盤 對時間的調(diào)整,本程序還不是太完善, 溫度顯示有規(guī)律性的 微微閃爍 , 懇請 老師指正。 否 否 是 是 是 否 否 是 是 是 主程序流程圖 LCD 初始化 開始 T0 初始化 時間、溫度顯示 S3 按下否? S4 按下否? S5 按下否? N 加一,選擇調(diào)整對象 時間加一 時間減一 N=6 否? 到最大值否? 到最小值否? N 清零 時間清零 時間清零 設(shè)計總結(jié) 在制作的過程中,因為板子是在學(xué)校自己動手做的最小系統(tǒng)板,接插線還是比較簡單的,難的是硬件的調(diào)試,因為理論與實踐總是存在著差距,想出來的東西沒有經(jīng)過實踐的檢驗是不可靠的,任何一個小小的疏忽大意都能導(dǎo)致失敗。 比如說對 hour, min , sec, day, moth 的定義,一開始我 用的 unsigned char ,但是在調(diào)試減一時,減到零時再按下鍵盤就會出現(xiàn)亂碼,幾經(jīng)調(diào)試,終于發(fā)現(xiàn)問題地所在并及時地解決了問題,之后再一次對硬件進(jìn)行調(diào) 試,終于成功了。從這一方面來說,我認(rèn)識到 做要比說難得多 , 做的過程中 必定有很多的阻礙,但是 一定要慢慢來,一點一點地找出問題,再一點一點 地解決它,這樣的話,到達(dá)成功的彼岸也就僅僅是時間的問題了。 我 通過這次設(shè)計,特別是通過對 程序的編寫 , 深層了解了單片機(jī)內(nèi)部結(jié)構(gòu)和外圍器件的應(yīng)用。 我學(xué)到的不僅僅是電子方面的知識,更重要的是,我學(xué)到了作為一名電子設(shè)計者所必需的心理素質(zhì) ,那就是 —— 決心加上耐心! 附錄 1: 程序代碼: include define Lcd_Data P0 //定義數(shù)據(jù)端口 define _TH0_TL0_ (65536 50000) define HI (_TH0_TL0_ / 256) //給高 8 位賦值 define LO (_TH0_TL0_ % 256) //給低 8 位賦值 define M 20 //(1000/50)1 秒要 20 個中斷的累計 char hour = 0, min = 0, sec = 0,N=0,day=1,moth=1,week=7。 //初始化要顯示的值 unsigned char SEG_TAB[] = {0x30,0x31,0x32, 0x33, 0x34, 0x35, 0x36, 0x37,0x38, 0x39}。//09 數(shù)字 unsigned int year=8。 sbit RS = P2^ 5。 //定義和 LCD 的連接端口 sbit RW = P2^ 4。 sbit E = P2^ 3。 sbit Busy = P0^ 7。 sbit S3 = P3^2。//定義開關(guān) s3 選擇鍵 sbit S4 = P3^3。//s4 加一鍵 sbit S5 = P3^4。//s5 減一鍵 sbit DQ = P2^0。//DS18B20 sbit speak = P2^1。 //蜂鳴器警報 /***************************************************************************/ void delay1(unsigned int num)//短延時函數(shù) { while( num )。 } /******************************************************************************/ void Delay(unsigned char t)//長延時函數(shù),延時 1MS*t S { unsigned char a。 while(t != 0) { for(a = 0。 a 125。 a++)。 } } /*******************************************************************/ void Timer0Init(void) //初始化定時器 0 程序 { TMOD = 0x01。 //設(shè)置模式 1 定時器 0 工作方式 0 TH0 = HI。 //給 TH0, TL0 賦初始值 TL0 = LO。 TR0 = 1。 //啟動定時器 0 ET0 = 1。 //定時器中斷開 EA = 1。 //總中斷開 } /******************************************************************************/ void Read_Busy(void)//讀忙信號判斷 { do{ Lcd_Data = 0xff。 RS = 0。 RW = 1。 E = 0。 Delay(2)。 E = 1。 }while(Busy)。 } /******************************************************************************/ void Write_Comm(unsigned char lcdm) //寫指令函數(shù) { Lcd_Data = lcdm。 RS = 0。 RW = 0。 E = 0。 Read_Busy()。 E = 1。 } /******************************************************************************/ void Write_Data(unsigned char lcddata)//寫數(shù)據(jù)函數(shù) { Lcd_Data = lcddata。 RS = 1。 RW = 0。 E = 0。 Read_Busy()。 E = 1。 } /******************************************************************************/ void Init_LCD(void)//初始化 LCD { Delay(400)。 //稍微延時,等待 LCD 進(jìn)入工作狀態(tài) Write_Comm(0x01)。//清顯示 Write_Comm(0x02)。//光標(biāo)歸位 Write_Comm(0x38)。//8 位 2 行 5*8 Write_Comm(0x06)。//文字不動,光標(biāo)右移 Write_Comm(0x0c)。//顯示開 /關(guān),光標(biāo)開閃爍開 Write_Comm(0x18)。//左移 } /*******************************************************************************/ Init_DS18B20(void)//初始化 ds1820 { unsigned char x = 0。 DQ = 1。 //DQ 復(fù)位 delay1(8)。 //稍做延時 DQ = 0。 //單片機(jī)將 DQ 拉低 delay1(80)。 //精確延時 大于 480us DQ = 1。 //拉高總線 delay1(14)。 x = DQ。 //稍做延時后 如果 x=0 則初始化成功 x=1 則初始化失敗 delay1(20)。 } /**********************************************************************************/ ReadOneChar(void)//讀一個字節(jié) { unsigned char i = 0。 unsigned char dat = 0。 for (i = 8。 i 0。 i) { DQ = 0。 // 給脈沖信號 dat = 1。 DQ = 1。 // 給脈沖信號 if(DQ) dat |= 0x80。 delay1(4)。 } return (dat)。 } /**********************************************************************************/ WriteOneChar(unsigned char dat)//寫一個字節(jié) { unsigned char i = 0。 for (i = 8。 i 0。 i) { DQ = 0。 DQ = datamp。0x01。 delay1(5)。 DQ = 1。 dat=1。 } } /**********************************************************************************/ Read_Disp_Temperature(void)//讀取并顯示溫度 { unsigned int a = 0, b = 0, c = 0, t = 0。 float tt = 0。 Init_DS18B20()。 WriteOneChar(0xCC)。 // 跳過讀序號列號的操作 WriteOneChar(0x44)。 // 啟動溫度轉(zhuǎn)換 Init_DS18B20()。 WriteOneChar(0xCC)。 //跳過讀序號列號的操作 WriteOneChar(0xBE)。 //讀取溫度寄存器 a = ReadOneChar()。 b = ReadOneChar()。 t = b。 t = 8。 t = t | a。 tt = t * 。 t = tt * 10 + 。 //放大 10 倍輸出并四舍五入 a = t / 100。 //十位 b = t /
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1