單片機多路數(shù)據(jù)采集控制系統(tǒng)—軟件仿真_第1頁
單片機多路數(shù)據(jù)采集控制系統(tǒng)—軟件仿真_第2頁
單片機多路數(shù)據(jù)采集控制系統(tǒng)—軟件仿真_第3頁
單片機多路數(shù)據(jù)采集控制系統(tǒng)—軟件仿真_第4頁
單片機多路數(shù)據(jù)采集控制系統(tǒng)—軟件仿真_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一、課程設計的目的和要求1、目的運用單片機原理及其應用等課程知識,根據(jù)題目要求進行進行軟件仿真的設計和調試,從而加深對本課程知識的理解, 把學過的比較零碎的知識系統(tǒng)化,比較系統(tǒng)的學習開發(fā)單片機應用系統(tǒng)的基本步驟和基本方法,使學生應用知識能力、設計能力、調試能力以及報告撰寫能力等有一定的提高。2、要求用8051單片機設計數(shù)據(jù)采集控制系統(tǒng),基本要求如下:1、 可實現(xiàn)8路數(shù)據(jù)的采集,假設路信號均為0-5V的電壓信號;2、 采集數(shù)據(jù)可通過LCD顯示,顯示格式為:通道號 電壓值,如: .5V3、 可通過鍵盤設置采集方式;(單點采集、多路巡測、采集時間間隔)4、 具有異常數(shù)據(jù)聲音報警功能:對第一路數(shù)據(jù)可設

2、置正常數(shù)據(jù)的上限值和下限值,當采集的數(shù)據(jù)出現(xiàn)異常,發(fā)出報警信號。選做功能:1、 異常數(shù)據(jù)音樂報警2、可輸出8路順序控制信號,設每路順序控制信號為一位,順序控制的流程為:二、總體設計圖1 原理框圖分析:選擇AT89C52單片機、ADC0809和LCD1602顯示器作為主要器件來實現(xiàn)本次設計。圖2 電路仿真圖圖3 AT89C52單片機部分分析:通過單片機的I/O口來控制AD轉換和顯示器。因為AT89C52的P0是漏極開路,因此要有排阻接電源,形成弱上拉結構,增強控制能力。圖4 AD轉換部分分析:ADC0808AD轉換芯片通過IN口采集模擬量,轉換后通過out口輸出數(shù)字量數(shù)據(jù)。具體介紹見圖5和圖6.

3、圖5 ADC0808引腳圖圖6 ADC0808采集通道選擇方式圖7 LCD1602顯示器部分分析:LCD1602詳細介紹見圖8和圖9圖8 LCD1602引腳功能圖9 LCD1602引腳功能圖10 按鍵部分分析:檢測單片機引腳是否為低電平來判斷是否按鍵按下。圖11 警報部分分析:通過檢測IN2口電壓來警報,當電壓大于上限制或者低于下限值會LED亮和蜂鳴器報警。三、程序設計1、程序框圖:開始按鍵掃描顯示設定的通道電壓k0快速依次顯示八通道各電壓間隔一定時間顯示各通道電壓選擇要顯示的通道對IN2口進行報警控制K1K2K3K42、程序代碼:#include<reg52.h> #includ

4、e<intrins.h>#include<stdio.h>#define uint unsigned int #define uchar unsigned char void init(); void write_com(uchar); void write_data(uchar); void delay(uint); void write_sfm(uchar,uchar); void read(uint i);void display(uint i);void key();uchar num,shuju; uint i=0,ii=0,b1,b2,t=3,tt,fre,

5、flag; float b;uchar code table="*Welcome!*" uchar code table1=" 0 0:0.0v "uchar code tab8=0x00,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0; sbit RW=P17; sbit RS=P16; sbit EN=P15; sbit START=P36; sbit AD_INT=P32;sbit AD_ENA=P37;sbit k0=P10;sbit k1=P11;sbit k2=P12;sbit k3=P13;sbit k4=P14;sb

6、it LED1=P35;sbit SPEAK=P34;/*主程序*/void main() init(); while(1) key(); /*初始化LCD1602和中斷服務*/void init() RW=0; /進入寫操作write_com(0x38); /顯示十六位液晶write_com(0x0c); /打開十六位液晶,不顯示光標write_com(0x06); /寫下一個數(shù)右移以為write_com(0x01); /清屏write_com(0x80); /第一行寫for(num=0;num<15;num+) write_data(tablenum); /第一行寫數(shù)據(jù)delay(5

7、); write_com(0x80+0x40); for(num=0;num<12;num+) /第二行寫數(shù)據(jù) write_data(table1num); delay(5); fre=50000;SPEAK=1;TMOD=0x11;TH0=(65536-fre)/256;TL0=(65536-fre)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;TR1=0;TR0=0; /*中斷服務子程序*/void timer0() interrupt 1TR0=0;TH0=(65536-fre)/256;TL0=

8、(65536-fre)%256;tt+;if(flag<40)if(tt=0)tt=0;tt=50000;SPEAK=SPEAK;if(flag>=40&&flag<80)tt=0;fre=50000;SPEAK=SPEAK;if(flag>=80&&flag<120)tt=0;fre=10000;SPEAK=SPEAK;if(flag>=120&&flag<160)tt=0;fre=5000;SPEAK=SPEAK;if(flag>=160&&flag<200)tt=0;fr

9、e=2500;SPEAK=SPEAK;if(flag>=200&&flag<240)tt=0;fre=1250;SPEAK=SPEAK;if(flag>=240&&flag<280)tt=0;fre=625;SPEAK=SPEAK;if(flag>=280&&flag<320)tt=0;fre=312;SPEAK=SPEAK;if(flag>=320&&flag<360)tt=0;fre=156;SPEAK=SPEAK;TR0=1;void timer1() interrupt 3T

10、H1=(65536-50000)/256;TL1=(65536-50000)%256;flag+;if(flag=360)flag=0;fre=50000;/*LCD1602設置*/void write_com(uchar com) RS=0; /寫指令EN=0; /使能端拉低delay(5); P0=com; /輸入地址,就是命令EN=1; /使能端拉高,工作delay(5); EN=0; /使能端拉低停止工作delay(5); void write_data(uchar date) RS=1; EN=0; /使能端拉低delay(5); P0=date; /輸入數(shù)據(jù),就是你要在液晶上顯示什

11、么EN=1; /使能端拉高,開始輸入數(shù)據(jù)delay(5); EN=0; /拉低使能端,停止工作delay(5); void delay(uint z) /延時函數(shù) uint j,k;for(j=0;j<z;j+)/延時z msfor(k=0;k<124;k+);/大約一毫秒 void write_sfm(uchar add,uchar date) write_com(0x80+0x40+add); /寫完光標自動到下一位write_data(0x30+date); /*ADC轉換和數(shù)據(jù)采集*/void read(uint a)START=0;P2=0x00;P2=taba;_nop

12、_();_nop_();_nop_();_nop_();START=1;_nop_();START=0;_nop_();delay(5);while(!AD_INT);P2 = 0xff;_nop_();_nop_();AD_ENA=1;_nop_();shuju=P2;_nop_();AD_ENA=0;_nop_();P2 = 0xff;b1 = shuju/51; /整數(shù)部分b2 = (shuju%51)*10/51;/小數(shù)部分/*顯示數(shù)據(jù)*/void display(uint a)write_sfm(0x04,a);write_sfm(0x07,b1);write_sfm(0x09,b2

13、);/*按鍵掃描*/void key()if(k0!=1)read(ii);display(ii);delay(5);if(k1!=1)for(i=0;i<8;i+)read(i);display(i);delay(500);if(k2!=1)for(i=0;i<8;i+)read(i);display(i);delay(t+t*(i%2)*1000);if(k3!=1)ii+;delay(500);if(ii>=8)ii=0;write_sfm(0x04,ii);if(k4!=1)while(1)read(2);display(2);b=b1+0.1*b2;delay(5);if(b<=1.8|b>=2.2)LED1=0;TR0=1;TR1=1;elseflag=0;fre=50000;LED1=1;TR0=0;TR1=0;四、調試及結果1、可以單點采集、多路巡測、采集時間間隔:圖12 運行顯示結果圖2、可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論