单片机多路数据采集控制系统—软件仿真讲解

上传人:最**** 文档编号:115161617 上传时间:2019-11-12 格式:DOCX 页数:13 大小:909.77KB
返回 下载 相关 举报
单片机多路数据采集控制系统—软件仿真讲解_第1页
第1页 / 共13页
单片机多路数据采集控制系统—软件仿真讲解_第2页
第2页 / 共13页
单片机多路数据采集控制系统—软件仿真讲解_第3页
第3页 / 共13页
单片机多路数据采集控制系统—软件仿真讲解_第4页
第4页 / 共13页
单片机多路数据采集控制系统—软件仿真讲解_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《单片机多路数据采集控制系统—软件仿真讲解》由会员分享,可在线阅读,更多相关《单片机多路数据采集控制系统—软件仿真讲解(13页珍藏版)》请在金锄头文库上搜索。

1、一、课程设计的目的和要求1、目的运用单片机原理及其应用等课程知识,根据题目要求进行进行软件仿真的设计和调试,从而加深对本课程知识的理解, 把学过的比较零碎的知识系统化,比较系统的学习开发单片机应用系统的基本步骤和基本方法,使学生应用知识能力、设计能力、调试能力以及报告撰写能力等有一定的提高。2、要求用8051单片机设计数据采集控制系统,基本要求如下:1、 可实现8路数据的采集,假设路信号均为0-5V的电压信号;2、 采集数据可通过LCD显示,显示格式为:通道号 电压值,如: .5V3、 可通过键盘设置采集方式;(单点采集、多路巡测、采集时间间隔)4、 具有异常数据声音报警功能:对第一路数据可设

2、置正常数据的上限值和下限值,当采集的数据出现异常,发出报警信号。选做功能:1、 异常数据音乐报警2、可输出8路顺序控制信号,设每路顺序控制信号为一位,顺序控制的流程为:二、总体设计图1 原理框图分析:选择AT89C52单片机、ADC0809和LCD1602显示器作为主要器件来实现本次设计。图2 电路仿真图图3 AT89C52单片机部分分析:通过单片机的I/O口来控制AD转换和显示器。因为AT89C52的P0是漏极开路,因此要有排阻接电源,形成弱上拉结构,增强控制能力。图4 AD转换部分分析:ADC0808AD转换芯片通过IN口采集模拟量,转换后通过out口输出数字量数据。具体介绍见图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 #include#include#defin

4、e 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,flag; float b;uchar code table=*Welcome!*; ucha

5、r 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;sbit LED1=P35;sbit SPEAK=P34;/*主程序*/void main() init(); while(1) key();

6、 /*初始化LCD1602和中断服务*/void init() RW=0; /进入写操作write_com(0x38); /显示十六位液晶write_com(0x0c); /打开十六位液晶,不显示光标write_com(0x06); /写下一个数右移以为write_com(0x01); /清屏write_com(0x80); /第一行写for(num=0;num15;num+) write_data(tablenum); /第一行写数据delay(5); write_com(0x80+0x40); for(num=0;num12;num+) /第二行写数据 write_data(table1n

7、um); 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=(65536-fre)%256;tt+;if(flag=40&flag=80&flag=120&flag=160&flag=200&flag=240&fl

8、ag=280&flag=320&flag360)tt=0;fre=156;SPEAK=SPEAK;TR0=1;void timer1() interrupt 3TH1=(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); v

9、oid write_data(uchar date) RS=1; EN=0; /使能端拉低delay(5); P0=date; /输入数据,就是你要在液晶上显示什么EN=1; /使能端拉高,开始输入数据delay(5); EN=0; /拉低使能端,停止工作delay(5); void delay(uint z) /延时函数 uint j,k;for(j=0;jz;j+)/延时z msfor(k=0;k124;k+);/大约一毫秒 void write_sfm(uchar add,uchar date) write_com(0x80+0x40+add); /写完光标自动到下一位write_dat

10、a(0x30+date); /*ADC转换和数据采集*/void read(uint a)START=0;P2=0x00;P2=taba;_nop_();_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; /整数部分b2 = (shuju%51)*10/51;/小数部分/*显示数据*/void display(uint a)write_sfm(0x04,a);write_sfm(0x07,b1);write_sfm(0x09,b2);/*按键扫描*/void key()if(k0!=1)read(ii);display(ii);delay(5);if(k1!=1)for(i=0;i8;i+)read(i);display(i);delay(500);if(k2!=1)for(i=0;i=8)ii=0;write_sfm(0x04,ii);if(k4!=1)w

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号