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

正文內(nèi)容

畢業(yè)論文-基于單片機(jī)的身高體重測量儀設(shè)計(jì)(編輯修改稿)

2024-11-26 19:30 本頁面
 

【文章內(nèi)容簡介】 void main(void) { lcdreset()。 //初始化液晶屏 system_init()。 //初始化串口 定時器 clrscreen()。 //清屏 while(1) //循環(huán) { switch(pattern) //狀態(tài)查詢 { //正常測量模式 case 1: if(Key_Scan(2)||weight4000)//人體秤校準(zhǔn) Correct_w++。 if(Key_Scan(3)) Correct_w。 if(Key_Scan(1)) //發(fā)送鍵按下 { beep=0。 //開蜂鳴器提示 Number++。 //編號加 1 for(i=0。i4。i++) //發(fā)送數(shù)據(jù)到上位 機(jī) { SBUF=Number_data[i]。 while(!TI)。 TI=0。 } beep=1。 //關(guān)蜂鳴器提示音 } if(Key_Scan(4)) //”保持“按鍵按下 pattern=2。 //狀態(tài)變量變?yōu)楸3譅顟B(tài) weight = Read_Count()。 //讀取體重值 hzkdis(p)。 //顯示體重值 height = sonic()。 //讀取身高值 hzkdis(p)。 //顯示身高值 break。 case 2: //保持狀態(tài) if(Key_Scan(4)) //“保持”鍵按下 pattern=1。 //狀態(tài)變量變?yōu)檎?狀態(tài) break。 default: break。 } } } 鄭州鐵路職業(yè)技術(shù)學(xué)院 2020 屆自考本科生畢 業(yè)論文(設(shè)計(jì)) 13 系統(tǒng)初始化函數(shù)的編寫 本設(shè)計(jì)中因?yàn)槌暡K需要用定時器來測量超聲波脈沖的傳播時間,另外系統(tǒng)工作時需要向上位機(jī)發(fā)送數(shù)據(jù),所以在程序開始時需先初始化單片機(jī)定時器和串行端口相應(yīng)的寄存器 [12]。系統(tǒng)的初始化程序如下: void system_init(void) { SM0=0。 //設(shè)置串口工作模式 SM1=1。 TMOD = 0x21。 //設(shè)置定時器工作模式 TH1=0xfd。 //設(shè)置波特率為 9600 TR1=1。 //開定時器 1 } HX711 AD 轉(zhuǎn)換器通信函數(shù)的編寫 HX711 AD 轉(zhuǎn)換芯片的串行通訊線由管腳 SCK 和 DT 組成, DT 為數(shù)據(jù)線, SCK 用于時鐘信號的輸入和選擇輸入通道和增益的大小。當(dāng) HX711 芯片數(shù)據(jù)輸出管腳 DT輸出高電平時,表示 AD 轉(zhuǎn)換器還沒有準(zhǔn)備好輸出數(shù)據(jù),此時時鐘輸入信號 SCK 應(yīng)為低電平。當(dāng) DT 變?yōu)榈碗娖胶螅硎?AD 轉(zhuǎn)換器準(zhǔn)備好輸出數(shù)據(jù),這時 SCK 應(yīng)輸入 25 到 27 個不等的時鐘脈沖。第一個時鐘脈沖的上升沿后可讀取輸出 24 位數(shù)據(jù)的最高位,直至第 24 個時鐘脈 沖完成,24 位輸出數(shù)據(jù)從最高位至最低位逐位輸出完成。第 25 到 27個時鐘脈沖用來選擇下一次轉(zhuǎn)換的輸入通道和增益。本設(shè)計(jì)使用 AD 轉(zhuǎn)換器的 A 通道,增益為 128,所以輸入 25 個時鐘脈沖 [11]。 HX711 AD 轉(zhuǎn)換器芯片的讀寫時序如圖 43所示。 圖 43 HX711 讀寫時序 鄭州鐵路職業(yè)技術(shù)學(xué)院 2020 屆自考本科生畢 業(yè)論文(設(shè)計(jì)) 14 HX711 AD 轉(zhuǎn)換芯片通信函數(shù): unsigned long Read_Count(void) { unsigned long Count。 unsigned char i。 ADSK=0。 //先將 時鐘線拉低 Count=0。 //將存儲轉(zhuǎn)換值的中間變量清零 while(ADDO)。 //等待 HX711 準(zhǔn)備好輸出數(shù)據(jù) for(i=0。i24。i++) //逐位讀取 24 位 AD 轉(zhuǎn)換器轉(zhuǎn)換好的值 { ADSK=1。 //時鐘線拉高 Count=Count1。 //變量左移一位 ADSK=0。 //信號線拉低 if(ADDO) //數(shù)據(jù)輸入為高電平 { Count++。 //最低位置一 } } ADSK=1。 //時鐘線拉高 Count=Count^0x800000。 //最高位取反 ADSK=0。 //信號線拉低 Count=Count*。 //轉(zhuǎn)為實(shí)際的重量值 Count=Correct_wCount。 //調(diào)零 return(Count)。 //重量值返回 } 按鍵檢測函數(shù)的編寫 在本文 節(jié)可知,按鍵的檢測主要是檢測單片機(jī) IO 是否出現(xiàn)低電平。本設(shè)計(jì)中將所 有按鍵的檢測寫在了一個函數(shù)中,函數(shù)的參數(shù)為要檢測的按鍵的編號,返回值為真( 1)時說明相應(yīng)的按鍵按下,返回值為假( 0)時則說明按鍵沒有按下。 在理想情況下若單片機(jī)的 IO 口出現(xiàn)低電平即可認(rèn)為是對應(yīng)的按鍵按下,但在實(shí)際情況下由于按鍵在閉合和斷開的瞬間觸點(diǎn)會存在抖動現(xiàn)象,所以按鍵所連接的 IO 口上就會出現(xiàn)一些雜波信號造成單片機(jī)的檢測錯誤,如圖 44 所示。另外主程序中對按鍵的檢測是循環(huán)進(jìn)行的,若按鍵按下的時間較長會造成單片機(jī)多次檢測到按鍵按下的情況從而造成程序的混亂 [13]。本設(shè)計(jì)在按鍵按下后以及松手后的瞬間加入了一個 短時間的延時函數(shù)來濾除這段時間內(nèi)的雜波信號,該濾波程序?qū)Ω哳l雜波信號的濾除具有很好的效果,另外通過在程序中加入松手檢測有效的避免了單片機(jī)多次檢測的情況。 鄭州鐵路職業(yè)技術(shù)學(xué)院 2020 屆自考本科生畢 業(yè)論文(設(shè)計(jì)) 15 圖 44 按鍵的抖動 按鍵檢測函數(shù): unsigned char Key_Scan(unsigned char key_num) { switch(key_num) //key_num 為選擇要檢測的按鍵 { case 1: //第一個按鍵 if(key1==0) //第一個按鍵按下 { delay_ms(5)。 //延時濾波 if(key1==0) //濾波后再次檢測 { while(!key1)。 //松手檢測 return 1。 //認(rèn)為按鍵按下 返回值為真 1 } else { return 0。 //若濾波后檢測沒有按下判斷為雜波 返回 0 } } else { return 0。 //若第一個按鍵沒有按下 返回 0 } break。 default: break。 } } 鄭州鐵路職業(yè)技術(shù)學(xué)院 2020 屆自考本科生畢 業(yè)論文(設(shè)計(jì)) 16 超聲波模塊函數(shù)的編寫 超聲波模塊的控制端口 Trig 產(chǎn)生一個 10us以上的高電平該模塊內(nèi)部將自動發(fā)出 8 個周期頻率為 40KHz 的超聲波脈沖信號。信號發(fā)出后超聲波模塊將自動檢測超聲波回波信號,若檢測到超聲波回波信號超聲波模塊的 Echo 引腳變?yōu)榈碗娖?。若在超聲波脈沖發(fā)射后打開單片機(jī)的定時器開始計(jì)時收到超聲波回波信號后關(guān)閉定時器那么定時間即為超聲波脈沖在空氣中的傳播時間,通過公式:測量距離 =(傳播時間 *聲速 (340m/s))/2 即可算出傳播距離。如圖 45 為 超聲波模 塊時序 圖 。 圖 45 超聲波模塊時序 圖 讀取距離的函數(shù): int sonic(void) { unsigned int n。 RX=1。 //將 RX(接收引腳 )置為高電平 TR0=0。 //定時器 0 關(guān)閉 TH0=TL0=0。 //定時器清零 Pulse()。 //發(fā)射超神波脈沖信號 TR0=1。 //定時器開始計(jì)時 TF0=0。 //定時器溢出標(biāo)志位置零 for(n=0。n70。n++)。 //延時 while( RX ==1 amp。amp。 TF0 == 0 )。 //等待收到回波信號或定時器溢出 TR0=0。 //關(guān)定時器停止計(jì)時 if(TFO) //定時器溢出則判斷為無信號返回 n=999。 //無信號返回時把距離值賦為 999cm else //定時器沒有溢出 計(jì)算傳播距離 { 鄭州鐵路職業(yè)技術(shù)學(xué)院 2020 屆自考本科生畢 業(yè)論文(設(shè)計(jì)) 17 n=(TH08)+TL0。 //整合定時時間 n=(unsigned int)( n*)。//換算為實(shí)際距離 n=n3。 //減去承重板到地面距離 } return n。 //返回高度值 } 液晶屏驅(qū)動函數(shù)的編寫 單片機(jī)與液晶間的通信 主要有三種情況即寫數(shù)據(jù)、寫命令、讀狀態(tài)。寫數(shù)據(jù)的作用是將想要顯示的字符、漢字寫入液晶進(jìn)行顯示。寫命令的作用是向液晶屏幕發(fā)送各種指令如設(shè)置顯示坐標(biāo)、清屏、設(shè)置游標(biāo)等。讀狀態(tài)操作的作用是查看液晶的狀態(tài),液晶屏幕在接受指令前,單片機(jī)需要先確認(rèn)液晶屏幕內(nèi)部處于非忙碌狀態(tài),即讀取 BF 標(biāo)志時 BF需為 0,方可接受新的指令。液晶的這三種操作是由 RS 和 RW 引腳決定的。液晶的讀寫時序如圖461和 462 所示。 寫數(shù)據(jù):輸入: RS=H,RW=L,D0D7=數(shù)據(jù) ,E=H 輸出:無 寫命令:輸入: RS=L,RW=L,D0D7=數(shù)據(jù) ,E=H 輸出:無 圖 461 液晶的寫操作 void write_(unsigned char cmdcode) { chk_busy()。 //檢查是否可以接收指令 RS=0。 //RS 為指令 /數(shù)據(jù)選擇信號,寫命令 RS=0 RW=0。 //RW 為讀寫選擇信號 寫命令 RW=0 E=1。 //液晶使能 Lcd_Bus=cmdcode。 //將命令送到數(shù)據(jù)總線 delay(5)。 //在數(shù)據(jù)寫入的時候加入適當(dāng)?shù)难訒r E=0。 //禁止使能 delay(5)。 //延時 } 鄭州鐵路職業(yè)技術(shù)學(xué)院 2020 屆自考本科生畢 業(yè)論文(設(shè)計(jì)) 18 void write_data(unsigned char Dispdata) //寫數(shù)據(jù)到 LCD { chk_busy()。 //檢查是否可以接收指令 RS=1。 //RS 為指令 /數(shù)據(jù)選擇信號 寫數(shù)據(jù) RS=1 RW=0。 //RW 為讀寫選擇信號 寫數(shù)據(jù) RW=0 E=1。 //液晶 使能 Lcd_Bus=Dispdata。 //將數(shù)據(jù)送到數(shù)據(jù)總線 delay(5)。 //在數(shù)據(jù)寫入的時候加入適當(dāng)?shù)难訒r E=0。 //禁止使能 delay(5)。 //延時 } 讀狀態(tài):輸入: RS=L,RW=H,E=H 輸出: DOD7=狀態(tài)字 圖 462 液晶的讀操作 忙位檢查函數(shù): void chk_busy(void) { RS=0。
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1