当前位置:首页 >> 电力/水利 >>

单片机应用系统设计与仿真


东 华 大 学
机 械 工 程 学 院

实验指导书
实验名称 课程名称
单片机应用系统设计与仿真

自选综合实验





机械工程 及自动化 Xin.Wei

学 期 学 号 实验成绩

第一学期

/>
姓 名 指导教师

实 验 日 期







东华大学机械工程学院机电实验中心

一、实验目的及要求
1. 实验目的: (1) 熟练掌握 Proteus 软件的基本应用 (2) 掌握应用 keil 和 Proteus 进行单片机系统的仿真方法 (3)学会设计单片机应用系统. (4)掌握 MCS51 系列单片机的编程 2. 实验要求: (1) 学习 Proteus 的应用软件 (2) 学习消化已有典型单片机应用系统。 (3) 自行设计出单片机控制系统的软件硬件结构,并制定出其调试 方案。 (4) 实验全过程应有比较详细的工作记录, 其内容包括: 工作日志, 电路设计与分析,软件流程图与源程序,制作、调试中的现象与失误 甚至失败的记录,实验原始数据的记录,实验器材的使用记录等。

二、实验装置
1、计算机、单片机实验板、 2、Proteus 软件 keil 软件。

三、实验内容
1、学习 Proteus 软件,消化已有单片机应用系统 2、设计新的单片机控制的应用系统软硬件结构,并要有所创新。 3、制作出控制系统的硬件并编写控制软件。进行系统的软硬件调试。

四、实验报告要求
1、对采用单片机实现系统原理进行详尽分析与阐述。 2、说明自己设计的控制系统的工作原理和主要特点及创新点。 3、归纳整理实验记录,写出实验测试报告。 4、写出经过本次设计后的体会与收获。

五、实验进度安排
实验内容 学习 Proteus 软件 学习典型的单片机应用系统
-2-

学时数 6 8

东华大学机械工程学院机电实验中心

设计新的应用系统 软件设计及仿真调试 撰写实验报告及验收

6 8 4

六、考核方式
需提交资料
? 实验报告 ? 仿真电路 ? 控制程序

-3-

东华大学机械工程学院机电实验中心

一. 设计任务 题目:基于 51 单片机的数字万用表设计 检测对象:交直流电压测量,电阻测量,过压自动报警 设计要求:电路系统中包含按键系统、显示系统(七段数码管显 示或 LCD 显示屏显示) ,达到一定的精度要求 二. 设计背景 传统的电桥平衡法等方法在测试过程中不够智能而且体积笨重, 价格昂贵,需要外围环境优越,测试操作过程中需要调整很多参数, 而基于单片机的智能数字式万用表价格便宜,操作简单,显示准确, 还有过压报警系统,更加人性化。目前,数字万用表已被广泛用于电 子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域, 表现出强大的生命力。 三. 整体设计思路 虽然数字万用表种类很多,但基本工作原理则是大同小异。都是 把被测的模拟量转化成数字量显示。所以最关键的是模数转换电路。 本数字万用表主要由直流数字电压表 DVM 它由阻容滤波器、 前置 放大器、模数转换器 A/D、发光二极管显示器 LED 及保护电路等组 成。 在数字电压表的基础上再增加交流一直流转换器 AC/DC、电阻 一电压转换器 Ω /V,就构成了本数字万用表的基本部分。 设计方框图:

四. 分步设计 步骤一:电路图模块设计 电路分为电压衰减模块, 电压档位自选模块, 电阻档位自选模块,
-4-

东华大学机械工程学院机电实验中心

交直流电压判别模块,绝对值电路模块,电压显示模块,电阻显示模 块,绝对值电路模块,AD 转换、电压值处理及 LCD 显示模块。 各模块设计原理如下。 电压衰减模块:由于待测电压范围太大,高的可到 500v,而 AD 只能参考输入为+-5V,所以对于未知信号,可以先衰减再测量。 如 下图,左端电压输入,在默认继电器导通的情况下经电阻 R1、R2 分 压,将待测电压值衰减至原来的百分之一。

电压档位自选模块:电压经衰减后的值可分为 0-20v、20-200v、 200-500v 三档,继电器由单片机控制通断,完成档位的自动选择(利 用三极管的导通原理) 。

-5-

东华大学机械工程学院机电实验中心

电阻档位自选模块: 电阻按其大小可分为 0-1k, 1-10k, 10k-100k, 大于 100k 四档,通过单片机控制继电器的开端进行档位的选择。

注:由于电路中继电器数目较多,将单片机的端口经 74LS138 译码器 进行扩展后进行控制(了解译码器输入输出真值表的对应关系) 。 交直流电压判别模块:如下图所示,左端为一反向比较器通过调 节变阻器 R3 阻值输出一负值到比较器的负向端,而输入电压经衰减 分档后的结果与其进行比较,可控制光电耦合器中光电管的亮灭,进 而控制 INT_1 端输出高低电平。其中,低电平代表交流电压测量,高 电平代表直流电压测量。

绝对值电路模块:由于电压输入值的正负无法确定,为保证后续 测量工作的进行,需对电压值进行取绝对值处理,如下图所示,经左 端的整流及右端的滤波处理后,输出电压值确保为正值。

-6-

东华大学机械工程学院机电实验中心

电压显示模块:利用 LCD 输出,选用 16x1 的显示屏。直流电压 显示为 DC:XXXX……交流电压显示为 AC:XXXX……电阻显示为 RE: XXXX…… AD 转换、电压值处理及 LCD 显示模块:单片机的复位电路及时 钟电路的连接,译码器与单片机的连接,ADC0808 与单片机的连接如 下图所示。 注:P0 口需接上拉电阻,左侧 ADC0808 输入端需接二极管保护 元器件。

步骤二:电路图整体设计及工作原理 直流电压测量:继电器 RL1 默认位置为与衰减电路电阻端相连, 经衰减后输出值为 out1,经电压档位自选电路后对电压值进行二次 处理输出值为 out2,此时,信号同时输入交流电压判断电路与电压 绝对值电路。前者判断电压信号的性质为直流,INT_1 值为 1;后者 将输入电压值的绝对值输出,为 out3。此时,输入 AD 转换其中,将 测得的信号转化为二进制形式输出至单片机,再经由 P1 口连接 LCD 显示器输出测得电压值。 交流电压测量:整体测量过程与直流相似,区别在于交直流判断 电路出输出 INT_1 值为零,对应于单片机中程序不同。
-7-

东华大学机械工程学院机电实验中心

电阻测量:测量开始时按下按键,使继电器 R12 中 J2 端为高电 平后档位变更为与 Res+、Res-两端相连接入电路,经电阻档位选择 并转化为对应电压回到与测量电压相同的测试环境中继续测量, 最后 做相应的代数运算输出待测电阻的测量值。 步骤三:主要元器件的选择及简单介绍 模数转换器 ADC0808:DC0808 是带有 8 位 A/D 转换器、8 路多路 开关以及微处理机兼容的控制逻辑的 CMOS 组件。 它是逐次逼近式 A/D 转换器,可以和单片机直接接口。 单片机主控芯片 AT89C52:它是一种低功耗、高性能 CMOS8 位微 控制器,具有 8K 在系统可编程 Flash 存储器。 译码器 74LS138:三端输入,八端输出 运算放大器 4599、LM741、LM324 显示器 LCD1601 步骤四:程序编写 流程图如下图所示
待测量

是否为电压



是 衰减 100 倍

闭合开关

A/D 转换 A/D 转换

电压判断 电压判断 3.333 | 5v 0.833 | 3.33v 0.098 | 0.833v 不 切换 档位 切换 至 20kΩ 档位 0 | 0.098v 切 换 至 200k Ω 档 位

2-5v 不 切 换 档 位

0.2-2v 切换至电 压放大 2 倍档位

0-0.2v

切换至电 压放大 20 倍档位

切换 至 200 Ω 档位

-8-

东华大学机械工程学院机电实验中心

采集 100 个值取平均值

采集 100 个值取平均值

转换成电阻值

交直流判断 是否为直流



x1.1 是

送至 LCD 显示屏

结束

源程序: #include<reg52.h> #include<stdio.h> #include<math.h> #define uchar unsigned char #define uint unsigned int #define usl unsigned long sbit ST=P3^6; sbit OE=P3^7; sbit EOC=P3^2; sbit INT_1=P3^3; sbit A1=P2^1; sbit B1=P2^2; sbit C1=P2^3; sbit A2=P2^0; sbit B2=P2^6; sbit C2=P2^7; sbit key=P3^5;
-9-

东华大学机械工程学院机电实验中心

sbit KEY=P3^0; sbit lcden=P2^5; sbit lcdrs=P2^4; uchar disp_DC[5]; uchar disp_AC[5]; uchar disp_RE[7]; usl num; float num1,num2,val; int k,p; //电压,电阻档位标志位 uint time; //数据采集个数 uchar adval,num3; void delayms(uint x) { uint i,j; for(i=x;i--;i>0) for(j=110;j--;j>0); } void write_com(uchar com) { lcdrs=0; P1=com; delayms(5); lcden=1; delayms(5); lcden=0; } void write_data(uchar date) { lcdrs=1; P1=date; delayms(5); lcden=1; delayms(5); lcden=0; } //xms 延时

//写命令至 LCD

//写数据至 LCD

- 10 -

东华大学机械工程学院机电实验中心

void display(uchar x,uchar data0) { x&=15; x|=0x80; write_com(x); write_data(data0); } void init_lcd() { lcden=0; write_com(0x34); write_com(0x0c); write_com(0x06); write_com(0x01); } void init_0808() { ST=0; OE=0; A1=0; B1=0; C1=0; } void adc_0808() { ST=0; ST=1; ST=0; adval=P0; while(EOC==0) OE=1; } void cal()

//输出字符

//lcd 初始化

//AD 模块初始化

//选择通道 0

//发送 AD 转换的值

//带回一个转换值
- 11 -

东华大学机械工程学院机电实验中心

{ val=adval*5.0/255.0; } void conversion(usl z) //将测得的电压值放大 100 倍后转换 成四位数 { uint wan,qian,bai,ge,shi; num1=0; wan=z/10000+0x30; qian=z%10000/1000+0x30; bai=z%1000/100+0x30; shi=z%100/10+0x30; ge=z%10+0x30; disp_DC[0]=wan; disp_DC[1]=qian; disp_DC[2]=bai; disp_DC[3]=shi; disp_DC[4]=ge; disp_AC[0]=qian; disp_AC[1]=bai; disp_AC[2]=shi; disp_AC[3]=ge; } void conversion_1(usl w) //将测得的电阻值转换成六位数 { uint baiwan,shiwan,wan,qian,bai,ge,shi; num2=0; baiwan=w/1000000+0x30; shiwan=w%1000000/100000+0x30; wan=w%100000/10000+0x30; qian=w%10000/1000+0x30; bai=w%1000/100+0x30; shi=w%100/10+0x30; ge=w%10+0x30; disp_RE[0]=baiwan; disp_RE[1]=shiwan;
- 12 -

东华大学机械工程学院机电实验中心

disp_RE[2]=wan; disp_RE[3]=qian; disp_RE[4]=bai; disp_RE[5]=shi; disp_RE[6]=ge; } void choose() //自动选择电压档位 { if(val>2.0&&val<=5.0) //200~500V 为第一档 k=0; else if(val>0.20&&val<=2.00) //20~200V 为第二档 { A2=1; B2=0; C2=0; k=1; } else if(val>0.0&&val<=0.20) //0~20V 为第三档 { k=2; A2=0; B2=1; C2=0; } } void choose1() //自动选择电阻档位 { if(val>=3.33333&&val<=5.0) { //<1k 欧姆为第一档 p=0; A2=1; B2=1; C2=0; } else if(val>=0.83333&&val<3.33333) //1k~10k 欧姆为第 二档
- 13 -

东华大学机械工程学院机电实验中心

p=1; else if(val>=0.09804&&val<0.83333) 为第三档 { A2=1; B2=0; C2=1; p=2; } else if(val>=0.0&&val<0.09804) 档 { A2=0; B2=1; C2=1; p=3; } } void keyscan() { if(key==0) { delayms(10); //去抖动 if(key==0) { KEY=0; A2=0; B2=0; C2=1; delayms(200); choose1(); for(time=99;time--;time>0) { num2+=val; delayms(10); } num2/=100.0;
- 14 -

//10k~100k 欧姆

//>100k 欧姆为第四

东华大学机械工程学院机电实验中心

if(p==0) num2=1000.0*(0.2*5.0/num2-0.2); if(p==1) num2=1000.0*(2.0*5.0/num2-2.0); if(p==2) num2=1000.0*(20.0*5.0/num2-20.0); if(p==3) num2=1000.0*(200.0*5.0/num2-200.0); num=(int)num2; conversion_1(num); } } if(key==1) { A2=0; //译码器初始化,默认 X0 打开 B2=0; C2=0; delayms(200); choose(); for(time=99;time--;time>0) { num1+=val; delayms(10); } num1/=100.0; if(k==0) num1=num1*100.0*100.0; if(k==1) num1=num1*100.0*50.0; if(k==2) num1=num1*100.0*5.0; if(INT_1==0) num1*=1.11; num=(usl)num1; conversion(num); } }

- 15 -

东华大学机械工程学院机电实验中心

void main() { init_lcd(); init_0808(); TMOD=0x01; TH0=(65536-4000)/256; TL0=(65536-4000)%256; TR0=1; ET0=1; EA=1; delayms(500); while(1) { keyscan(); while(key==1&&INT_1==1) //若按键未按下且 INT=1 则 断定为直流 { display(0,'D'); display(1,'C'); display(2,':'); display(3,disp_DC[0]); display(4,disp_DC[1]); display(5,disp_DC[2]); display(6,disp_DC[3]); display(7,disp_DC[4]); delayms(1000); } while(key==0) //如按键按下说明在测电阻 { display(0,'R'); //最大可显示百万级大小的电阻 display(1,'E'); display(2,':'); display(3,disp_RE[0]); display(4,disp_RE[1]); display(5,disp_RE[2]); display(6,disp_RE[3]); display(7,disp_RE[4]); display(8,disp_RE[5]);
- 16 -

东华大学机械工程学院机电实验中心

display(9,disp_RE[6]); display(10,'k'); delayms(1000); } while(INT_1==0) //INT1=0 说明测的是交流电 { display(0,'A'); display(1,'C'); display(2,':'); display(3,disp_AC[0]); display(4,disp_AC[1]); display(5,disp_AC[2]); display(6,disp_AC[3]); delayms(100); } } } void timer0()interrupt 1 { TH0=(65536-4000)/256; TL0=(65536-4000)%256; EA=0; adc_0808(); cal(); EA=1; }

- 17 -


相关文章:
单片机应用系统设计开发主要步骤
单片机应用系统设计开发主要步骤_电子/电路_工程科技_专业资料。单片机应用系统的研究...调试通过的程序, 最终要脱机运行, 即将仿真 ROM 中运行的程序固化到 EPROM ...
单片机应用系统设计工程实践报告
使用 Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结 合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力; 实践证明,在使 ...
单片机应用系统设计技术(基于c51的Proteus的仿真)_期末...
单片机应用系统设计技术(基于c51的Proteus的仿真)_期末考试总结_复习资料_工学_高等教育_教育专区。MPU (Micor Processing Unit):微处理器 Cpu(central processing un...
实验四 单片机应用系统设计——报警系统
单片机原理与接口技术实验 实验四 单片机应用系统设计——报警系统 一、实验目的...六、电路原理图 1、 仿真图: 图 4.1 报警系统电路图 2.实物图: 图 4.2 ...
单片机应用系统设计实验
单片机应用系统设计实验_IT/计算机_专业资料。单片机应用系统设计实验目...对硬件实验 4、5、6、7、8、9、12、15 而言,仿真模式应设定为内程序、外...
单片机应用系统设计-实验2
单片机应用系统设计-实验2 隐藏>> 实验二 单片机 I/O 端口应用一、实验目的 ...将 Keil 生成的目标代码绑定到 Proteus 电路图的单片机并运行仿真,验证设计结果;...
单片机教程-(第2版)单片机原理与应用系统设计实用教程_...
单片机教程-(第2版)单片机原理与应用系统设计实用教程_信息与通信_工程科技_专业...(6)以仿真设计为主,以实物设计为辅,使初学者能够快速掌握单片机原理及单片机 ...
基于Proteus的单片机仿真研究与实现
用单片机原理及接口技术的理论知识与 Proteus 软件结合, 设计 出以 MCS-51 单片机为核心的电子万年历,以达到对单片机应用系统设计的深入理解 和 Proteus 软件的仿真...
单片机直流电机控制系统的设计与仿真
单片机直流电机控制系统的设计与仿真_电子/电路_工程科技_专业资料。《单片机》期末...第一章 绪论一个单片机应用系统从提出任务到正式投入运行的过程,称为单片机的开...
第13章 AT89C51单片机应用系统的设计与调试答案
2.为什么单片机应用系统的开发与调试离不开仿真开发系统? 答: 当一个单片机应用系统完成了用户样机的硬件和软件设计开发后,在用户样 机的程序存储器中放入编写好的...
更多相关标签:
单片机应用系统设计 | 单片机的应用系统设计 | 单片机最小系统仿真 | 单片机最小系统仿真图 | 单片机应用与仿真训练 | 单片机仿真器应用现状 | 单片机应用系统 | 单片机应用系统实例 |