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

正文內(nèi)容

基于at89s51單片機的電子時鐘帶溫度顯示-在線瀏覽

2025-02-08 02:29本頁面
  

【正文】 功能說明圖雖然數(shù)據(jù)分成兩種,但是對單片機的程序而言,其實是一樣的,就是對特定的地址進(jìn)行讀寫操作。不過對我們目前而言,最需要熟悉的是和時鐘相關(guān)部分的功能,對于其它參數(shù)請參閱數(shù)據(jù)手冊。數(shù)據(jù)在時鐘(SCLK)的上升沿串行輸入,前8位指定訪問地址,命令字裝入移位寄存器后,在之后的時鐘周期,讀操作時輸出數(shù)據(jù),寫操作時輸出數(shù)據(jù)。 DS1302的寄存器和控制命令對DS1302的操作就是對其內(nèi)部寄存器的操作,DS1302內(nèi)部共有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器以外的寄存器。表12 日歷、時鐘寄存器與控制字對照表寄存器名稱765432101RAM/CKA4A3A2A1A0RD/W秒寄存器1000000分寄存器1000001小時寄存器1000010日寄存器1000011月寄存器1000100星期寄存器1000101年寄存器1000110寫保護(hù)寄存器1000111慢充電寄存器1001000時鐘突發(fā)寄存器1011111最后一位RD/W為“0”時表示進(jìn)行寫操作,為“1”時表示讀操作。表13 DS14302內(nèi)部主要寄存器分布表寄存器名稱命令字取值范圍各位內(nèi)容寫讀76543210秒寄存器80H81H0059CH10SECSEC分寄存器82H83H0059010MINMIN小時寄存器84H85H0112或002312/240AHRHR日期寄存器86H87H0128,29,30,310010DATEDATE月份寄存器88H89H011200010MMONTH周寄存器8AH8BH010700000DAY年份寄存器8CH8DH009910YEARYEAR我們現(xiàn)在已經(jīng)知道了控制寄存器和RAM的邏輯地址,接著就需要知道如何通過外部接口來訪問這些資源。物理上,DS1302的通訊接口由3個口線組成,即RST,SCLK,I/O。具體的讀寫時序如圖16,但是請注意,無論是哪種同步通訊類型的串行接口,都是對時鐘信號敏感的,而且一般數(shù)據(jù)寫入有效是在上升沿,讀出有效是在下降沿(DS1302正是如此的,但是在芯片手冊里沒有明確說明),如果不是特別確定,則把程序設(shè)計成這樣:平時SCLK保持低電平,在時鐘變動前設(shè)置數(shù)據(jù),在時鐘變動后讀取數(shù)據(jù),即數(shù)據(jù)操作總是在SCLK保持為低電平的時候,相鄰的操作之間間隔有一個上升沿和一個下降沿。51單片機內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器。這個放大器與作為反饋元件的片外晶體諧振器一起構(gòu)成一個自激振蕩器。對外接電容的值雖然沒有嚴(yán)格的要求,但電容的大小會影響震蕩器頻率的高低、震蕩器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性。在焊接刷電路板時,晶體振蕩器和電容應(yīng)盡可能安裝得與單片機芯片靠近,以減少寄生電容,更好地保證震蕩器穩(wěn)定和可靠地工作。圖21 時鐘電路圖. 復(fù)位電路復(fù)位是由外部的復(fù)位電路來實現(xiàn)的。當(dāng)時鐘頻率選用12MHz時,C取22μF,R約為1K。實時時鐘/日歷電路提供秒、分、時、日、星期、月、年的信息,每個月的天數(shù)和閏年的天數(shù)可自動調(diào)整,時鐘操作可通過AM/PM標(biāo)志位決定采用24或12小時時間格式。DS1302時鐘電路如圖23所示。以上特點使DS18B20非常適用于遠(yuǎn)距離多點溫度檢測系統(tǒng)。 圖24 DS18B20溫度計電路. 按鍵電路鍵盤接口是單片機應(yīng)用系統(tǒng)中最常用的接口之一,鍵盤的類型很多,常用的有獨立式鍵盤和矩陣式鍵盤,因為本設(shè)計需要的鍵盤比較少,所以采用獨立式的應(yīng)用中,需要解決鍵盤消抖的問題,一般使用的是軟件消抖的方法。 圖25 鍵盤電路圖. 顯示電路顯示器是單片機常用的功能單元之一,顯示器的主要功能是為單片機系統(tǒng)使用者提供必要的單片機工作信息,或者提供工作狀態(tài)的提示信息,顯示器的工作是由單片機通過顯示接口驅(qū)動的。圖26 LCD1602顯示電路圖4. 軟件設(shè)計. 主函數(shù)流程圖主函數(shù)流程圖如圖31所示。 圖32 DS1820溫度計程序流程圖. 按鍵電路流程圖按鍵程序流程圖如圖33所示。本次設(shè)計的是一個帶溫度顯示的電子時鐘。通過本次設(shè)計,了解了時鐘芯片、溫度傳感器的一些基本原理及用途,并學(xué)習(xí)了單片機中一些基本指令的運用,明白了寫程序的困難及軟件思維和邏輯思維能力的重要性,提高了自己思考問題的嚴(yán)謹(jǐn)性,并且體會到了團隊合作的重要性,增強了解決困難的能力。 參考文獻(xiàn)[1] 萬光毅. 嚴(yán)義. 單片機實驗與實踐教程(一)[M], 北京航空航天大學(xué)出版社;[2] 夏繼強. 沈德金. 單片機實驗與實踐教程(二)[M] ,北京航空航天大學(xué)出版社;[3] 李廣弟. 朱月秀. 王秀山. 單片機基礎(chǔ)(修訂本)[M],北京航空航天大學(xué)出版社;[4] 徐愛鈞. 彭秀華. 單片機高級語言C51應(yīng)用程序設(shè)計[M],2000年版;[5] 馬家辰. MCS51單片機原理及其接口技術(shù)[M],哈爾濱工業(yè)大學(xué)出版社,1997年版;[6] 甕嘉民. 單片機應(yīng)用開發(fā)技術(shù)—基于PROTEUS仿真和C語言編程[M],中國電力出版社,2009年版;[7]李強. 51系列單片機應(yīng)用軟件編程技術(shù)[M],北京航空航天大學(xué)出版社,2009年版。sbit lcdrw=P1^7。void delayms(uint z){ uint x,y。x0。y0。}void write_data(uchar date)//寫數(shù)據(jù){ lcdrs=1。//輸入數(shù)據(jù) delayms(5)。 delayms(5)。}void write_(uchar )//寫指令{ lcdrs=0。//輸入數(shù)據(jù)指令碼 delayms(5)。 delayms(5)。} //初始化LCD************************************************************void lcd_init(){ P0=0。 lcden=0。 //顯示模式設(shè)置,設(shè)置16x2顯示,5x7點陣,8位數(shù)據(jù)接口 write_(0x0c)。 //寫一個字符后地址加一,且光標(biāo)加一 write_(0x01)。//其中00~0f為第一行的顯示區(qū),10~27為第一行不顯示存儲區(qū),40~4f為第二行顯示區(qū),50~67為第二行不顯示存儲區(qū) x+=0x80。}//顯示單個字符void display_char(uchar x,uchar y,uchar dat){ display_xy(x,y)。 }//顯示字符串void display_string(unsigned char x,unsigned char y,unsigned char *s){ display_xy(x,y)。 s++。 //實時時鐘時鐘線引腳 sbit DS1302_IO = P2^5。 //實時時鐘復(fù)位線引腳sbit ACC0 = ACC^0。uchar Second,Minute,Hour,Day,Month,Year,Week。uchar TimeString[9]。 i = valamp。 //按位與,i得到低四位數(shù)。 //右移四位,將高四位移到低四位的位置,得到高四位碼值。= 0x0f。 //高位碼值乘以10 i += val。 return i。 ACC = date。 i0。 //相當(dāng)于匯編中的 RRC DS1302_CLK = 1。 ACC = ACC 1。 for(i=8。 i) { ACC = ACC 1。 DS1302_CLK = 1。 } return(ACC)。 DS1302_CLK = 0。 DS1302InputByte(ucAddr)。 // 寫1Byte數(shù)據(jù) DS1302_CLK = 1。} uchar Read1302(uchar ucAddr) //讀取DS1302某地址的數(shù)據(jù){ uchar ucData。 DS1302_CLK = 0。 DS1302InputByte(ucAddr|0x01)。 // 讀1Byte數(shù)據(jù) DS1302_CLK = 1。 return(ucData)。 //寫保護(hù)打開 else //寫保護(hù)關(guān)閉 Write1302(0x8E,0x00)。 Write1302(Address, ((Value/10)4 | (Value%10)))。 ReadValue = Read1302(DS1302_SECOND)。0x70)4)*10 + (ReadValueamp。 ReadValue = Read1302(DS1302_MINUTE)。0x70)4)*10 + (ReadValueamp。 ReadValue = Read1302(DS1302_HOUR)。0x70)4)*10 + (ReadValueamp。 ReadValue = Read1302(DS1302_DAY)。0x70)4)*10 + (ReadValueamp。 ReadValue = Read1302(DS1302_WEEK+1)。0x70)4)*10 + (ReadValueamp。 ReadValue = Read1302(DS1302_MONTH)。0x70)4)*10 + (ReadValueamp。 ReadValue = Read1302(DS1302_YEAR)。0x70)4)*10 + (ReadValueamp。 }void DateToStr() //處理年月日函數(shù){ DateString[0] = Year/10 + 39。 DateString[1] = Year%10 + 39。 DateString[2] = 39。 DateString[3] = Month/10 + 39。 DateString[4] = Month%10 + 39。 DateString[5] = 39。 DateString[6] = Day/10 + 39。 DateString[7] = Day%10 + 39。 //DateString[8] = Week/10+39。 //DateString[9] = Week%10+39。 DateString[8] = 39。}void TimeToStr() //處理時分秒函數(shù){ TimeString[0] = Hour/10 + 39。 TimeString[1] = Hour%10 + 39。 TimeString[2] = 39。 TimeString[3] = Minute/10 + 39。 TimeString[4] = Minute%10 + 39。 TimeString[5] = 39。 TimeString[6] = Second/10 + 39。 TimeString[7] = Second%10 + 39。 DateStri
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1