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

正文內(nèi)容

畢業(yè)設(shè)計-數(shù)字電壓表設(shè)計(編輯修改稿)

2025-02-09 04:07 本頁面
 

【文章內(nèi)容簡介】 根據(jù)上述,我們選擇單片機(jī)與 A/D轉(zhuǎn)換芯片結(jié)合的方法實(shí)現(xiàn)本設(shè)計。使用的基本元器件是: AT89C51 單片機(jī), TLC2543 模數(shù)轉(zhuǎn)換芯片, 1602 液晶顯示器,開關(guān),按鍵,電容,電阻,晶振,標(biāo)準(zhǔn)電源等等。 設(shè)計的基本框圖如下: 14 七.硬件電路系統(tǒng)模塊的設(shè)計 根據(jù)上述選擇的各元器件,各電路模塊的電路圖 如下描述。 1.單片機(jī)系統(tǒng) 單片機(jī)最小系統(tǒng)包括晶振電路,復(fù)位電路,電源。其原理圖如下: 單片機(jī)系統(tǒng)模塊 1602 液晶顯示模塊 A/D 轉(zhuǎn)換模塊 輸入電路模塊 按鍵模塊 15 此模塊中,單片機(jī)的晶振是 12MHZ, C1和 C2的電容是 10UF, C3可選110UF。 R1電阻為 1K。 2.輸入電路 由于輸入電路的電壓比基準(zhǔn)電壓( 2V)高很多,因此在輸入電路必須加電壓衰減器。衰減電路 可由開關(guān)來選擇不同的衰減率, 從而切換檔位。 則完整輸入電路如下: 16 通過計算, 可知設(shè)計衰減器用的電阻 R2, R3和 R4分別為 : 9M, 900K, 100K控制檔 位的開關(guān)是雙開關(guān)的 , 目地是能夠使單片機(jī) CPU自動識別檔位,即可用相應(yīng)的檔位的數(shù)據(jù)轉(zhuǎn)換的算法計算出正確的電壓值。被測電壓輸入端、整理過的模擬電壓輸入端,開關(guān)與單片機(jī)的連接如圖所示。 3. A/D轉(zhuǎn)換芯片與單片機(jī)的連接 此設(shè)計中選擇的是 A/D轉(zhuǎn)換芯片 的通道 0, A/D芯片的數(shù)據(jù)輸入口連接單片機(jī)的 ,數(shù)據(jù)輸出口連接單片機(jī)的 口,芯片使能端連接單片機(jī)的 口,脈沖端連接單片機(jī)的 。模塊連接如下圖所示。 17 4. 1602液晶與單片機(jī)連接 此模塊液晶的 RS, RW和 E端分別連接單片機(jī)的 , ;液晶的數(shù)據(jù)各端口連接單片機(jī)的 P0口。具體如下圖所示。 5. 鍵盤與單片機(jī)的連接如下。 18 此鍵盤的一端與單片機(jī)的 ,另一端接地。原理圖如下所示。 該鍵盤的功能:當(dāng)鍵盤被按下時,即可計算后 5秒的平均電壓值。 八.系統(tǒng)軟件的設(shè)計 1.匯編語言和 C 語言的特點(diǎn)及選擇 本設(shè)計是硬件電路和軟件編程相結(jié)合的設(shè)計方案,選擇合適的編程語言是一個重要的環(huán)節(jié)。在單片機(jī)的應(yīng)用系統(tǒng)程序設(shè)計時,常用的是匯編語言和 C語言。匯編語言的特點(diǎn)是占用內(nèi)存單元少,執(zhí)行效率高。執(zhí)行速度快。但它依賴于計算機(jī)硬件,程 序可讀性和可移植性比較差。而 C 語言雖然執(zhí)行效率沒有匯編語言高,但語言簡潔,使用方便,靈活,運(yùn)算豐富,表達(dá)化類型多樣化,數(shù)據(jù)結(jié)構(gòu)類型豐富,具有結(jié)構(gòu)化的控制語句,程序設(shè)計自由度大,有很好的可重用性,可移植性等特點(diǎn)。 由于現(xiàn)在單片機(jī)的發(fā)展已經(jīng)達(dá)到了很高的水平,內(nèi)部的各種資源相當(dāng)?shù)呢S富, CPU的處理速度非常的快。用 C語言來控制單片機(jī)無疑是一個理想的選擇。所以在本設(shè)計中采用 C語言編寫軟件程序。 2.主程序設(shè)計 主程序設(shè)計包括以下方面: 按照硬件電路對單片機(jī)位定義。 19 編寫延時模塊程序。 編寫驅(qū)動 1602液晶顯示模塊程 序。 編寫驅(qū)動 A/D轉(zhuǎn)換模塊程序。 編寫鍵盤掃描模塊程序。 主程序的總體流程如下圖: 全部軟件程序如下: include define uchar unsigned char define uint unsigned int define key_state0 0 //鍵盤掃描的各個狀態(tài) 開始 對液晶,定時器初始化 A/D 轉(zhuǎn)換 數(shù)據(jù)轉(zhuǎn)換 顯示瞬時電壓值 鍵盤判斷 顯示 5 秒的平均電壓值 3 秒后清屏 20 define key_state1 1 define key_state2 2 define key_state3 3 sbit rs=P1^2。//1602 液晶寫命令 /數(shù)據(jù)標(biāo)志 ,0時寫命令 sbit rw=P1^1。//1602 液晶寫入 /讀出標(biāo)志 ,0 時寫入數(shù)據(jù) sbit ep=P1^0。 sbit input=P1^4。 sbit output=P1^3。 sbit cs=P1^5。 sbit clk=P1^6。 sbit key=P2^0。 sbit flag_1=P2^1。//定義電壓表檔位相關(guān)標(biāo)志 sbit flag_2=P2^2。 sbit flag_3=P2^3。 sbit flag_4=P2^4。 uchar code tab0[]=V 。 //顯示的單位及有關(guān)的字符 uchar code tab1[]=MV。 uchar code tab2[]=Power:。 uchar code tab3[]=Aver_V:。//平均電壓值標(biāo)志符 uchar t。 void delay(int z)//延時函數(shù) { int x,y。 for(x=z。x0。x) for(y=10。y0。y)。 } 21 void write_(uchar )//往 1602液晶寫命令函數(shù) { rs=0。 P0=。 delay(5)。 ep=1。 delay(5)。 ep=0。 } void write_dat(uchar dat)//往 1602液晶寫數(shù)據(jù)函數(shù) { rs=1。 P0=dat。 delay(5)。 ep=1。 delay(5)。 ep=0。 } void init_1602()//對 1602液晶的初始化函數(shù) { rs=0。 rw=0。 22 write_(0x38)。 delay(1)。 write_(0x0c)。 delay(1)。 write_(0x06)。 delay(1)。 write_(0x01)。 delay(1)。 } void init_timer0()//定時計數(shù)器 0初值化函數(shù), { TMOD=0x01。//方式一 TH0=(6553650000)/256。//每 50ms中斷一次 TL0=(6553650000)%256。 IE=0x82。//打開中斷 TR0=0。//定時器首先不可工作 } void display(uchar x,uchar y,uint dat)//顯示電壓值的函數(shù) ,x 行 y 列開始顯示 { uint add。 uchar i,a[5]。 23 switch(x) { case 0:add=0x80。break。 case 1:add=0x80+0x40。break。 } add=add+y。 write_(add)。 for(i=0。i5。i++) { a[i]=dat%10。 dat=dat/10。 } write_dat(a[4]+0x30)。 write_dat(a[3]+0x30)。 write_dat(a[2]+0x30)。 write_dat(39。.39。)。 write_dat(a[1]+0x30)。 write_dat(a[0]+0x30)。 } void display_zifu(uchar x,uchar y,uchar *str)//顯示字符函數(shù) ,x行 y列開始顯示 24 { uint add。 switch(x) { case 0:add=0x80。break。 case 1:add=0x80+0x40。break。 } add=add+y。 write_(add)。 while(*str!=39。\039。) { write_dat(*str)。 str++。 } } uint read_AD(uchar con_way)//讀取 AD轉(zhuǎn)換值操作函數(shù) { uint dat=0。 uchar i。 cs=0。 clk=0。 con_way=4。 for(i=0。i12。i++) 25 { con_way=1。/*選 擇 0 通道,在輸入該控制數(shù)據(jù)的同時輸出前一次 AD轉(zhuǎn)結(jié)果 */ input=CY。 dat=1。 if(output)/*輸出 AD轉(zhuǎn)換結(jié)果 */ dat=dat|0x01。 delay(2)。 clk=1。 delay(5)。 clk=0。 } cs=1。 return dat。 } uint read_value() { long float dq。 long float dat_v。 dq=read_AD(0)。//把讀取得的 AD轉(zhuǎn)換值給變量 dq if(!flag_3) dat_v=(200*dq)/4096*100。//二檔 ,量程為 200V else if(!flag_2) dat_v=(20*dq)/4096*100。//二檔,量程為 20V 26 else if(!flag_1) dat_v=(2*dq)/4096*100。//一檔 ,量程 2V return dat_v。 } void read_key()//鍵盤掃描函數(shù) { static uchar key_state=0。 switch(key_state) { case key_state0: if(key==0) key_state=key_state1。 break。 case key_state1: if(key==0) { TR0=1。 display_zifu(1,0,tab3)。 key_state=key_state2。 } else key_state=key_state0。 break。 case key_state2: 27 if(key) key_state=key_state0。 break。 } } void main() { long float dat。 long float dat_aver,dat1,dat2,dat3,dat4,dat5。//定義 5 個隨機(jī)電壓值變量 uchar flag。//后五秒取隨機(jī)電壓的標(biāo)志 init_timer0()。 init_1602()。 delay(10)。 while(1) { dat=read_value()。 if(dat=100)//當(dāng)電壓值大于 1V時 ,用 V顯示 ,否則用 mV顯示 { display_zifu(0,1,tab2)。 display(0,7,dat)。 display_zifu(0,13,tab0)。 } 28 else { display_zifu(0,1,tab2)。 display(0,7,dat*1000)。 display_zifu(0,13,tab1)。 } read_key()。 //當(dāng)鍵盤按下時,計算后五秒的
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1