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

正文內容

基于52單片機溫濕度傳感器課程設計報告(含代碼)-wenkub

2023-07-08 14:24:25 本頁面
 

【正文】 管腳13)相連,經(jīng)過電平轉換后,由TTL輸出端(管腳11)輸出到單片機的RXD上。、12864讀寫時序圖如下:讀寫操作時序 數(shù)據(jù)與命令時序、基本操作時序 (1)讀狀態(tài):輸入:RS=L,RW=H,E=H 輸出:D0~D7=狀態(tài)字 (2)寫指令:輸入:RS=L,RW=L, D0~D7=指令碼,E=高脈沖 輸出:無 (3)讀數(shù)據(jù):輸入:RS=H,RW=H,E=H 輸出:D0~D7=數(shù)據(jù) (4)寫數(shù)據(jù):輸入:RS=H,RW=L, D0~D7=數(shù)據(jù),E=高脈沖 輸出:無、初始化過程(復位過程)指令:(1)延時15毫秒(2)寫指令38H;顯示模式設置(3)寫指令08H;顯示關閉(4)寫指令01H;顯示清屏(5)寫指令06H;顯示光標移動設置(6)寫指令0CH;顯示開及光標設置6. 與PC機通信模塊從上述電路可知,單片機要與計算機通信,必須通過MAX232(或其他)芯片。按鍵4是設置溫濕度上下限值及報警開關;按鍵5是關報警。蜂鳴器要用NPN型三極管驅動,Q1飽和導通,蜂鳴器獲得工作電流發(fā)出響聲。當Vcc2Vcc1+,由Vcc2向DS1302供電,當Vcc2 Vcc1時,由Vcc1向DS1302供電。二、 設計所需元件清單(1)9V電源(2)杜邦線若干(3)12864LCD1塊(4)80X52單片機1片(5)排阻1排,電阻若干(6)AM2301傳感器1個(7)32768Hz晶振1個,12MHz晶振1個(8)蜂鳴器1個(9)LM2940穩(wěn)壓元件1個(10)DS1302時鐘芯片1片(11)船型開關1個,觸點開關若干(12)30pF電容若干,22uF電容若干(13)LED燈2個,三極管,紐扣電池三、具體設計 根據(jù)所要實現(xiàn)的功能,將系統(tǒng)模塊化設計,總體模塊結構圖如下圖所示:以下就分別就各模塊功能實現(xiàn)進行設計。以單片機為核心,外圍電路包括電源、時鐘芯片、12864LCD、Max232芯片、AM2301傳感器以及蜂鳴器報警電路等。其中AM2301傳感器是含有已校準數(shù)字信號輸出的溫濕度復合傳感器,它包括一個電阻式感濕元件和一個NTC測溫元件。1. 復位電路這部分是單片機一般都需要的,當運行出錯或者死機時,利用復位按鍵能重新啟動系統(tǒng)。SCLK:串行時鐘,輸入,控制數(shù)據(jù)的輸入與輸出;I/O:三線接口時的雙向數(shù)據(jù)線;RST為復位引腳,在讀、寫數(shù)據(jù)期間,必須為高,X1 X2為32867Hz晶振管腳,為芯片提供時鐘脈沖。4. 鍵盤掃描電路這里用了5個按鍵。5. 12864LCD顯示電路ST7920系列12864是帶中文字庫的液晶顯示器,它可以顯示4行,每行16個字節(jié),各行的地址依次為0x80~0x80x90~0x90x88~0x8F0x98~0x9F。這是因為計算機串口上的電平執(zhí)行的是RS232標準,它定義的高低電平和單片機的TTL邏輯電平不兼容。7. AM2301溫濕度檢測電路上圖中DHT11和AM2301是一個系列的,他們的引腳和功能一樣。DATA 用于微處理器與DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,具體格式在下面說明,當前小數(shù)部分用于以后擴展,:一次完整的數(shù)據(jù)傳輸40bit,高位先出。總線為低電平,說明DHT11發(fā)送響應信號,DHT11發(fā)送響應信號后,再把總線拉高80us,準備發(fā)送數(shù)據(jù),每一bit數(shù)據(jù)都以50us低電平時隙開始,則DHT11沒有響應,,DHT11拉低總線50us,隨后總線由上拉電阻拉高進入空閑狀態(tài)。否則就會顯示出錯。下面將分步驟將實現(xiàn)過程中的問題和解決方案作說明:1. 剛開始燒了程序以后,發(fā)現(xiàn)LCD什么都不顯示,后來發(fā)現(xiàn)是因為沒有開背光,因為沒開背光顯示不明顯,如果角度不對會發(fā)現(xiàn)什么都沒顯示。原因是每秒隨著秒刷新初始化界面一次,解決的方案是不重新調用顯示,而是只給顯示秒的位置刷新,其他時間隨秒變化。理論雖簡單,但實際在下載到芯片中檢測現(xiàn)象時,我們發(fā)現(xiàn)分別單獨顯示兩者的數(shù)據(jù)沒有問題,但集成在一塊顯示不久就會花屏的現(xiàn)象,問題出在刷新漢字時,指針光標的位置修改錯誤所導致的。上位機界面設計,利用VB編程,用MSComm控件能夠實現(xiàn)單片機傳送數(shù)據(jù)到計算機并顯示。串口事件為接收 rec = 。波特率,奇偶校驗,發(fā)送位數(shù),停止位 = 5 。返回一次從接收緩沖區(qū)讀取所有字節(jié) = InputModeText 。當然我們的不足也有很多,比如硬件設計電路考慮不全面,造成后來不得不修改一些連線和元件使得電路板不夠美觀;還有程序不夠模塊化,有不少冗余,移植性和兼容性也不好,今后要更加注重這些方面的改進。 //液晶使能控制sbit LCD_PSB=P3^7。 //調時開/關sbit s2=P0^6。 //濕度報警sbit buzzer=P2^5。char sec,min,hour,week,day=1,month=1,year。uchar code dis1[]={2011年12月02日}。uchar code dis5[]={溫度上限:}。uchar code disx[]={0xc8,0xd5,0xd2,0xbb,0xb6,0xfe,0xc8,0xfd,0xcb,0xc4,0xce,0xe5,0xc1,0xf9}。U8 data tab[8]={0x00,0x00,0x2e,0x00,0x00,0x00,0x2e,0x00}。U8 U8data。U16 U16temp1,U16temp2。x) for(y=110。 for(。i++)。 i。}/***發(fā)送字符串子函數(shù)***/void SendData(U8*a){ outdata[0]=a[0]。 outdata[4]=a[4]。 count=0。 LCD_EN=0。 delay(5)。 LCD_EN=0。 delay(5)。 else if(X==1) X=0x90。 write_(pos)。 write_(0x0c)。 TMOD=0x21。 EA=1。 TR1=1。 TI=0。} /***寫年月日子函數(shù)***/void write_ymd(uchar add,uchar dat){ uchar shi,ge。 write_dat(0x30+shi)。 ge=dat%10。}/******溫濕度上下限設置更新***********/void write_lim1(uchar add,uchar dat){ uchar shi,ge。 write_dat(0x30+shi)。 ge=dat%10。 }void write_lim3(uchar add,uchar dat){ uchar shi,ge。 write_dat(0x30+shi)。 ge=dat%10。 }/*溫度顯示子函數(shù)*/void write_tem(uchar add){ write_(0x88+add)。 write_dat(tab[7])。 write_dat(tab[2])。i8。U8FLAG++)。 U8temp=0。amp。 U8data|=U8temp。 //總線由上拉電阻拉高 主機延時40us Delay_10us()。 //主機設為輸入 判斷從機響應信號 AM2301=1。U8FLAG++)。U8FLAG++)。 U8RH_data_L_temp=U8data。 U8T_data_L_temp=U8data。 //數(shù)據(jù)校驗 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp)。 U16temp1 = 8。//濕度十位 tab[3]=U16temp1%10+0x30。 U16temp2=8。//溫度十位 tab[7]=U16temp2%10+0x30。/***從第一行第一個字符的位置開始顯示***/ lcd_pos(0,0)。) { write_dat(dis1[i])。 while(dis2[i]!=39。 }/***從第三行第一個字符的位置開始顯示***/ lcd_pos(2,0)。) { write_dat(dis3[i])。 while(dis4[i]!=39。 } }/*****溫濕度上下限及報警開關設置界面***********/void display2(){ uchar i。 while(dis5[i]!=39。 } write_lim1(5,temp_H)。 write_dat(0xbf)。 write_dat(0xd8)。\039。 write_dat(0x2e)。 write_dat(0xaa)。 }/***從第三行第一個字符的位置開始顯示***/ lcd_pos(2,0)。) { write_dat(dis7[i])。 write_dat(0x30)。 } else { write_(0x88+7)。 i=0。 i++。 if(flag6) { write_(0x98+7)。 write_dat(0xb9)。 s1num++。 } if(s1num==2) { write_(0x80+3)。 //write_(0x0f)。 //write_(0x0f)。 //write_(0x0f)。 //write_(0x0f)。 write_(0x0c)。 if(year==99) year=0。 if(month==13) month=1。 if(day==32) day=1。 if(hour==24) hour=0。 if(min==60) min=0。 if(sec==60) sec=0。 week++。 i++。//消抖,否則就會一下加很多 /***調節(jié)修改顯示的位置***/ if(s1num==1) { year。 } if(s1num==2) { month。 } if(s1num==3) { day。 } if(s1num==4) { hour。 } if(s1num==5) { min。 } if(s1num==6) { sec。 } if(s1num==7) { uchar i。 while(i2*week+2) { write_dat(disx[i])。 if(s4==0)
點擊復制文檔內容
范文總結相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1