数字电压表仿真设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写
入数据。
6-E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。
7~14-D0~D7 为 8 位双向数据线。
15-背光源正极。 16-背光源负极。
5
Fra Baidu bibliotek
三、讨论与分析
1、方案讨论 在仿真中 A/D 转换芯片开始试图采用 PCF8591,PCF8591 是一个单片集
如附录 1,流程图如图 3:
开始 LCD 初始化
显示字符 启动 A/D 转换 数据读取、处理
显示数据
LCD 初始化
启动 A/D 转换
图 3:程序流程图
3
二、系统硬件设计
1、ADC0804 芯片介绍
图 4:ADC0804 规格及连接图 本设计中采用的 A/D 芯片为 ADC0804,它是 CMOS 8 位单通道逐次渐近 型的模/数转换器,其规格及引脚图如图 4 所示,引脚介绍如下:
本设计采用 AT89C52 作为主控芯片,通过 ADC0804 模数转换器, 将模拟电压实时地显示在 LCD1602 液晶屏幕上,其标准量程为 0~5V, 并可通过电路连接实现更大的测量范围,测量误差可控制在±0.01V 内。其中 AT89C52 是 ATMEL 公司一个低电压,高性能 CMOS 8 位单片 机,它在电子行业中有着广泛的应用。
6
四、收获与体会
在设计过程中,首先我学习了 51 单片机的基本原理及其接口,电路系统 原理、指令以及编程实现等内容,更加了解了用单片机控制外围设备以达到
实际应用目的的设计过程。
此外,在设计过程中还学习了 Keil uVision3 编程软件和 Proteus 仿真软 件,通过用 Keil 软件编写 51 单片机的 C 语言程序,实现了 51 单片机可以 按照我的设计思路运行的目的,这个过程需要编程者结合科学正确的思路并
}
/***函数功能:延时 1ms*****/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/*****函数功能:延时若干毫秒**********/
void delay(unsigned char n)
{
unsigned char i;
12864 液晶具有更强大的功能,不过限于本设计中需要显示的内容并不丰 富,所以选用了与其类似且功能满足要求的 LCD1602. 2、问题分析
在课程设计过程中,问题和困难主要是出现在程序的调试与软件的仿真 环节中,这两个环节也是整个设计过程中的主要环节,出现的问题如下。
在程序的调试过程中,首先要搜集 LCD1602 和 ADC0804 的数据手册, 了解它们主要的控制指令和时序,特别是 LCD1602 的控制指令和时序比较复 杂,所以其对应的程序也比较庞大,需要准确的输入各种指令,比如显示模 式设置指令、清屏幕指令等。此外,需要显示的数字与电压单位“V”必须 在程序中转换为相应的码并写入 LCD1602,才能正确显示,如果把数字直接 写入 LCD1602 中,将会显示为乱码。其次单片机与 ADC0804 的交互过程, 需要了解它的控制时序,特别是 ADC0804 控制引脚几号 CS、INT、RD、 WR,等,它们之间有明确的时序关系,倘若时序错误将不能使 ADC0804 启 动 A/D 转换,也不能正确读取 A/D 转换结果。
E=0;
//当 E 由高电平跳变成低电平时,液晶模块开始执行命令
}
/****************函数功能:指定字符显示的实际地址***/
void WriteAddress(unsigned char x)
{
WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码 x"
7
附录 1 源程序
#include<reg52.h>
#include<intrins.h> //包含_nop_()函数定义的头文件
#define uint unsigned int
#define uchar unsigned char
sbit RS=P2^0; //寄存器选择位,将 RS 位定义为 P2.0 引脚
成、8-bit CMOS 数据获取器件,具有 4 个模拟输入、1 个模拟输出和 1 个串 行 I2C 总线接口,51 单片机通过与其连接的双线双向 I2C 总线以串行的方式 交互信息。不过 PCF8591 需要更加严格的时序控制,在 Proteus 仿真中不易 实现,其程序开销也比较大,并且 ADC0804 足以满足要求,所以放弃了选 用 PCF8591 作为 A/D 转换芯片的方案。
{adcs=0; //允许进行 A/D 转换
adwr=0;
delay_50us(2);
adwr=1;//WR 由低变高时,AD 开始转换
//adcs=1; //停止 AD 转换
delay_50us(10);
}
//读 A/D 数据子程序////
uint read_ad()
{ uint ad_data;
sbit adwr=P2^5;
//AD 转换起动控制,上升沿有效
sbit adint=P2^6;
void delay_50us(uint t)
{ uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void start_adc0804(void) //启动 AD 转换子程序////////
2
2、电路仿真图 在设计过程中,学习了 Proteus 仿真软件,并且在电路仿真中利
用 Proteus 进行了电路图的绘制与系统的仿真,所以方便和正确的完 成了设计的要求。电路仿真图如下:
3、程序流程图
图 2:电路仿真图
设计过程中利用 Keil uVision3
编程软件,并根据设计要求和实现
功能编写和调试程序,其程序内容
/CS:芯片片选信号,低电平有效,即/CS=0,该芯片才能正常工作。 /WR:启动 ADC0804 进行 ADC 采样,该信号低电平有效,即/WR 信号 由高电平变成低电平时,触发一次 ADC 转换。 /RD 低电平有效,/RD=0 时,可通过端口 DB0~DB7 读出采样结果。 UIN(+)和 UIN(-):模拟电压输入端。 VREF/2:参考电压引脚,接外界电压,其参考电压为该外界电压的两倍。 CLKR 和 CLKIN:外接 RC 电路产生模数转换器所需的时钟信号,时钟 频率 CLK = 1/1.1RC,一般要求频率范围 100KHz~1.28MHz。 AGND 和 DGND:分别接模拟地和数字地。 /INT:中断请求信号输出引脚,该引脚低电平有效,当一次 A/D 转换完 成后,将引起/INT=0,。 DB0~DB7:输出 A/D 转换后的 8 位二进制
void WriteInstruction (unsigned char dictate)
{
while(BusyTest()==1); //如果忙就等待
RS=0;
//根据规定,RS 和 R/W 同时为低电平时,可以写入指令
RW=0;
E=0;
//E 置低电平(写指令时,E 为高脉冲,
// 就是让 E 从 0 到 1 发生正跳变,所以应先置"0"
4
2、LCD1602 介绍
部分引脚说明:
图 5:LCD 引脚及电路连接图
3 -VL 为液晶显示器对比度调整端。
4-RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
5-R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS
和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平
unsigned char code string[ ]={"ni hao LML !"}; //定义字符数组显示提示信息
#define ad1_7 P1
//AD 数据口
sbit adcs=P2^3;
//芯片选择信号,控制芯片的启动和结果读取,低电平有效
sbit adrd=P2^4;
//读数据控制,低电平有效
adint=1;
while(adint);
ad1_7=0xff;
adcs=0; //允许读
adrd=0; //读取转换数据结果数据结果
delay_50us(5);
ad_data=ad1_7; //把数据存到 ad_data 中
adrd=1;//adcs=1;
//停止 A/D 读取
8
return(ad_data);
通过这次的设计,我收获很多,也深刻地体会到设计一个项目需要我们
有着丰富的知识储备和较强的实践能力,比如资料的搜集与整理,软件的学
习和操作,程序的编写与调试等,这些能力对于我们以后的学习和工作也是
非常必要的,将让我们在以后的项目中展现出更高的水平。
参考文献:
[1]余新拴,李建忠. 消失模充型速度测试的虚拟仿真[J].微计算机信息,2007,4(23): 278- 280. [2]胡汉才.单片机原理及其接口技术[M]. 北京:清华大学出版社,1996. [3]张友德.单片机原理应用与实验[M]. 天津:复旦大学出版社,1992. [4]陈小忠,黄宁,赵小侠. 单片机接口技术实用子程序 [M].北京:人民邮电出版 社,2005. [5]杨金岩,郑应强,张振仁. 8051 单片机数据传输接口扩展技术与应用实例[M].北 京:人民邮电出版社,2005\
关键字:51 单片机 模数转换 Proteus 一、系统介绍
本部分将整体地介绍数字电压表设计方案的工作流程、电路仿真、 程序设计。 1、系统流程图
待测电压
LCD1602 显示
ADC0804
AT89C52 单片机
复位电路
图 1:系统流程图 待测电压范围为 0~5V,此电压可以直接被 ADC0804 模数转换器转 换为数字量,并且并行输出至单片机,单片机通过对数字量处理,将 其显示到 LCD1602 液晶上显示,此外,电路中还设计了复位模块,以 保证程序发生故障时可以重新运行。
且认真地编写,之后再调试程序,因此,它也提高了我的编程能力以及细心
的科学态度。
在 Proteus 仿真软件操作过程中,主要需要根据程序和设计目的,设计硬 件电路,所以必须细心、正确地连接电路,并且各个元器件摆放尽量合理、
美观。然后硬件电路连接好之后,加载编写的程序,进行系统的整体调试,
并且解决调试中出现的问题,直至达到设计调试结果正确无误。
sbit RW=P2^1; //读写选择位,将 RW 位定义为 P2.1 引脚
sbit E=P2^2; //使能信号位,将 E 位定义为 P2.2 引脚
sbit BF=P0^7; //忙碌标志位,,将 BF 位定义为 P0.7 引脚
unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字
RW=1;
E=1;
//E=1,才允许读写
_nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间
result=BF; //将忙碌标志电平赋给 result
E=0;
//将 E 恢复低电平
return result;
}
/********函数功能:将模式设置指令或显示地址写入液晶模块***/
单片机及 DSP 课程设计报告
数字电压表设计与虚拟仿真
友情提示:本文旨在分享设计思路,希望读 者真正理解并设计属于自己的作品,而不是 直接下载使用。
专 业:
电子信息
班 级:
信息 102 班
姓 名:
学 号:
指导教师:
时 间: 2013-06-17~28
通信与电子工程学院
1
数字电压表设计与虚拟仿真
摘要:
for(i=0;i<n;i++)
delay1ms();
}
/**********函数功能:判断液晶模块的忙碌状态
返回值:result。result=1,忙碌;result=0,不忙********/
unsigned char BusyTest(void)
{
bit result;
RS=0;
//根据规定,RS 为低电平,RW 为高电平时,可以读状态
_nop_();
_nop_();
//空操作两个机器周期,给硬件反应时间
P0=dictate;
//将数据送入 P0 口,即写入指令或地址
_nop_(); _nop_(); _nop_(); _nop_();
E=1;
//E 置高电平
_nop_(); _nop_(); _nop_(); _nop_();
9