简易数字电压表 实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简易数字电压表设计

实验报告

姓名陈秀秀

学号 201203870404

指导教师贾立新

专业班级电气1202 学院信息工程学院

一.实验要求

采用C8051F360单片机最小系统设计一简易数字电压表,实现对0~3.3V直流电压的测量,原理框图如图3-1所示。模拟输入电压通过一只1 kΩ电位器产生,ADC0将模拟电压转换成数字量后换算成电压值,用十进制的形式在LCD上显示。进一步,将单片机最小系统与PC通过RS-232通信电缆连接,将A/D转换的数字量在PC终端显示。

图3-1

二.实验设计

设计方案:由主程序、T0中断服务程序、ADC0中断服务程序组成。具体流程图如下图3-2所示。

图3-2

三.具体设计

1.简易数字电压表设计F360初始化及LCD初始化(详细程序代码见附录)

①内部振荡器初始化:OscInit()

②I/O端口初始化:PortIoInit()

③外部数据存储器接口初始化:XramInit()

④定时器初始化:TimerInit()

⑤中断系统初始化:Int0Init()

⑥ADC0初始化:ADC_Init()

⑦PCA初始化:PcaInit()

2.电压转换方式(将电压转换为十进制)

ADCDAT=ADC0H*256+ADC0L;

VOLT=ADCDAT*2.4/1024=ADCDAT*0.002344;

VOLTOUT=VOLT*1000;

for(i=0;i<4;i++)

{

VOLTBCD[i]=VOLTOUT%10;

VOLTOUT=VOLTOUT/10;

}

3.LCD显示程序设计

①检查LCD是否空闲子程序

void CheckLcd()

{

uchar temp=0x00;

uchar xdata *addr;

while(1)

{

addr=RCOMADDR;

temp=*addr;

temp&=0x80;

if(temp==0x00)

break;

}

}

②电压值显示

WriteCom(0x9C);

WriteData(VOLTBCD[3]+0x30);

WriteData(0x2E);

WriteData(VOLTBCD[2]+0x30);

WriteData(VOLTBCD[2]+0x30);

WriteData(VOLTBCD[0]+0x30);

WriteData(0x56);

4.实验中AD转换方式选用逐次逼近型,A/D转换完成后得到10位数据分为高低字节存放在寄存器ADCOH和ADC0L中,此处选择右对齐,转换时针为

2MHZ。

5.选择内部参考电压2.4伏为基准(在实际单片机调试中改为3.311伏),正端接P2.0,负端接地。

四.实验数据测量

V(测量) 0.000 0.372 0.523 0.724 0.980 1326 1.792 2.220 V(实际) 0.00 0.38 0.53 .073 0.99 1.33 1.79 2.23 结论:校准后,测量数据与实际电压误差小于0.01,符合实验精度要求.

五.代码附录

#include

#define uchar unsigned char

#define uint unsigned int

#define WCOMADDR 0xC008 //写命令寄存器的地址

#define WDATADDR 0xC009 //写数据寄存器的地址

#define RCOMADDR 0xC00A //读命令寄存器的地址

#define RDATADDR 0xC00B //读数据寄存器的地址

#define KEYCS 0xC00C //读键盘的地址

uchar code hanzi[]=

{0xbc,0xf2,0xd2,0xd7,0xca,0xfd,0xd7,0xd6,0xb5,0xe7,0xd1,0xb9,0xb1,0xed};//“简易数字电压表”

uchar code keynum[]="键值";

uchar code keyc[]="次数";

uchar time=0; //软件计数器

float VOLT;

uint VOLTBCD[4];

uint ADCDAT,VOLTOUT;

uchar keyn,keycode;

void OscInit(); //内部振荡器初始化

void PortIoInit(); //I/O端口初始化

void XramInit(); //外部数据存储器接口初始化

void PcaInit(); //PCA初始化(设置看门狗定时器的工作状态)void InitDevice(); //内部资源初始化

void CheckLcd(); //检查LCD是否空闲子程序

void WriteCom(uchar n); //Lcd写指令子程序

void WriteData(uchar m); //Lcd写数据子程序

void InsitiLcd(); //Lcd初始化子程序

void DispHan( uchar code *a,uchar m,uchar k); //显示汉字子程序

void TimerInit(); //定时器初始化

void InterruptsInit(); //中断系统初始化

void ADC_init(); //ADC0初始化

相关文档
最新文档