基于51单片机的数字电压表实训报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计
数字电压表实训报告姓名:
专业:
班级:
学号:
指导老师:
时间:2012年6月
数字电压表实训报告
一、实训目的
1、设计电路图,根据电路图焊接电路。
2、通过把设计好的程序利用软件将编译得到HEX格式文件加载到单片机芯片中,实
现仿真电路,得到仿真电路结果。
二、实训要求
1、选择课题,独立完成电路的焊接和程序的编写与调试工作。
2、数码管准确显示电压表上电压值,误差允许在+0.05
3、结合理论知识分析在焊接电路和调试程序过程中出现的问题,并及时解决相应问题。
4、可以到图书馆查阅参考资料。
5、认真完成实验课题。
三、实训仪器
电脑,Keil软件,Proteus软件
四、实训器材
晶振、电容、电阻、按键、单片机、数码管、电烙铁、烙铁架、焊锡、电路板、实验配套工具
五、系统概述
(1)本设计基于AT89C51单片机,主要ADC0832芯片来进行电压从模拟量到数字量的转换。ADC0832为A/D转换,AT89C51单片机为控制核心,以LED数码管为显示器件。
(2)利用AT89C51单片机及其外围接口电路,程序控制ADC0832对输入电压进行模数转换,在单片机进行数据处理和转换后,传输指令和转换后的电压代码至LED数码管显示模块。ADC0832能将0~5V的模拟电压量转换为0~255级的数字量,本次制作的数字电压表的量程为0~5V。
本系统主要包括5个模块:
电源,串口通信,A/D转换模块,主控模块,显示模块
六、.A/D转换模块(ADC0832管脚功能)
CS_ 片选使能,低电平芯片使能。
CH0 模拟输入通道0,或作为IN+/-使用。
CH1 模拟输入通道1,或作为IN+/-使用。
GND 芯片参考零电位(地)。
DI 数据信号输入,选择通道控制。
DO 数据信号输出,转换数据输出。
CLK 芯片时钟输入。
Vcc/REF 电源输入及参考电压输入(复用)
七、ADC数据读取程序流程:
八、ADC0832的工作原理:
正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时使用并与单片机的接口是双向的,所以在I/O口资源紧张时可以将DO和DI并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D 转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟(CLK)输入端输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第一个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第二、三个脉冲下沉之前DI端应输入两位数据用于选择通道功能。
九、.ADC0832管脚连接图:
十、程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit ADCS = P3^3;
sbit ADCLK = P3^4;
sbit ADDI = P3^5;
sbit ADDO = P3^5;
sbit wei=P2^7;
sbit duan=P2^6;
uchar code Tab[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Display(uint dat) //显示的数值为毫伏{
uchar shi,bai,qian;
qian = dat/1000%10;
bai = dat/100%10;
shi = dat/10%10;
// ge = dat%10;
wei=1;
P0 = 0x01;
wei=0;
duan=1;
P0 = Tab[qian]&0x7f; //最高位加小数点duan=0;
delay(3);
wei=1;
P0 = 0x02;
wei=0;
duan=1;
P0 = Tab[bai];
duan=0;
delay(3);
wei=1;
P0 = 0x04;
wei=0;
duan=1;
P0 = Tab[shi];
duan=0;
delay(3);
/* wei=1;
P0 = 0xf7;
wei=0;
duan=1;
P0 = Tab[ge];
duan=0;
delay(10);*/ }
uchar ADC0832(bit mode,bit channel) //AD转换,返回结果{
uchar i,dat,ndat;
ADCS = 0;//拉低CS端
_nop_();
_nop_();
ADDI = 1; //第1个下降沿为高电平
ADCLK = 1;//拉高CLK端
_nop_();
_nop_();
ADCLK = 0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADDI = mode; //低电平为差分模式,高电平为单通道模式。
ADCLK = 1;//拉高CLK端
_nop_();
_nop_();
ADCLK = 0;//拉低CLK端,形成下降沿2