完整版基于8051单片机的简易数字电压表毕业设计论文.docx

上传人:b****5 文档编号:2899443 上传时间:2022-11-16 格式:DOCX 页数:10 大小:55.91KB
下载 相关 举报
完整版基于8051单片机的简易数字电压表毕业设计论文.docx_第1页
第1页 / 共10页
完整版基于8051单片机的简易数字电压表毕业设计论文.docx_第2页
第2页 / 共10页
完整版基于8051单片机的简易数字电压表毕业设计论文.docx_第3页
第3页 / 共10页
完整版基于8051单片机的简易数字电压表毕业设计论文.docx_第4页
第4页 / 共10页
完整版基于8051单片机的简易数字电压表毕业设计论文.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

完整版基于8051单片机的简易数字电压表毕业设计论文.docx

《完整版基于8051单片机的简易数字电压表毕业设计论文.docx》由会员分享,可在线阅读,更多相关《完整版基于8051单片机的简易数字电压表毕业设计论文.docx(10页珍藏版)》请在冰豆网上搜索。

完整版基于8051单片机的简易数字电压表毕业设计论文.docx

完整版基于8051单片机的简易数字电压表毕业设计论文

基于8051单片机的简易数字电压表设计

姓名:

吴建亮班级:

电信1202学号:

摘要

电压表应用十分广泛,但大部分是模拟电压表,而由于其特性,反应速度慢,读数麻烦并且误差较大,所以为适应不断快速发展的高速信号领域,已经广泛使用数字电压表。

本实验设计是基于51单片机开发板ESDM-3A实现的一种数字电压表系统。

该设计采用8051单片机作为控制核心,以ADC0为模数转换数据采样,实现被测电压的数据采样,外部采用LCD12864液晶显示电压表的电压值。

1.设计任务和要求

1.1设计任务

设计制作一个简易直流电压表,该直流电压表能测量直流电压。

各硬件模块如图1.1所示。

图1.1硬件框图

1.2设计要求

(1)ADC0的工作方式设置如下:

采用单端输入,模拟输入电压从P2.0输入;选择作为参考电压源;转换时钟频率设置为2MHz;采用写“AD0BUSY”启动AD转换。

(2)采用定时器中断每隔0.5s启动一次AD转换;通过ADC0中断服务程序读取转换值。

2.设计方案

2.1硬件电路

硬件模块如上图1.1所示。

输入电压由开发板上J8接口的第2脚0~5.0V接跳线至单片机扩展接口J7的第4脚P2.0,调节电位器RP3实现不同电压的输入。

AD转换器、单片机、液晶屏在开发板已经连接好。

下面简单介绍所用的器件。

C8051F360单片机主要模拟和数字资源包括:

(1)高速8051微控制器内核。

(2)10位逐次逼近型AD转换器。

(3)10位电流输出DA转换器。

(4)两个模拟电压比较器CP1和CP0。

(5)片内锁相环PLL。

(6)扩充中断处理系统。

(7)存储器,256字节内部RAM;1024字节XRAML;32字节闪存存储器。

(8)数字资源,多达39个IO引脚,全部为三态双向口,允许与5V系统接口。

(9)时钟源,2个内部振荡器;80kHz低频低功耗振荡器。

(10)片内调试电路。

液晶屏HGB功能和接口。

1:

VSS

接地端

2:

VDD

电源正,接+5V

3:

VO

对比度调整,接电位器

4:

DI(CS*)

片选,也叫使能,接+5V

5:

RW(SID*)

数据输入端

6:

E(SCLK*)

时钟输入端

7~14:

DB0~DB7

并行数据总线

15:

PSB

串并模式选择,串行模式下接地,并行模式下接+5V

16:

NC

空引脚,不需要连接

17:

RSTB

复位端,低电平有效,一般接+5V

18:

VEE

对比度调整,接电位器

19:

BLA

背光正极,接+5V

20:

BLK

背光负极,接地

表2.1液晶屏引脚接法

12864液晶屏引脚按表2.1所示与单片机连接,在开发板上已经连接好,只需要配置好相应的寄存器即可。

HGB内部有三种不同RAM,DDRAM,CGRAM和GDRAM,其自带汉字字库,提供8192个中文字形,这些字可以字符串的形式直接显示。

2.2程序设计

程序的编写使用C语言,利用KeilμVision4进行程序的编写和烧录。

程序执行时所对应的流程如下图2.1所示。

图2.1程序执行流程图

下面简单介绍各模块的设计思路。

(1)时钟和定时器:

选用内部24MHz振荡器,频率除2作为SYSCLK;定时器选择定时器1工作方式1,TMOD=0X10,采用循环的方法,定时器定时50ms,循环10次得0.5s,装入初值TH1=()256,TL1=()%256。

(2)ADC0:

通过置“AD0BUSY”启动AD转换,采用10位采集通道,电压的最大值为3.3V,通过转换器的到的数值为AD_data=ADC0H×256+ADC0L,得到的实际电压为volt=AD_data×3.31023,通过AD0INT位,判断AD转换是否结束。

(3)液晶屏LCD12864:

液晶屏操作分指令操作和数据操作,每次写指令或数据前先确认内部动作是否完成,通过读取忙碌状态进行确认。

读、写指令或数据通过读或写4个内部寄存器WCOMADDR,WDATADDR,RCOMADDR和RDA

TADDR来完成。

详细代码请见附录。

3.测试结果分析

组数

电压表显示(V)

单片机显示(V)

误差

1

0.449

0.445

0.89%

2

1.080

1.074

0.56%

3

1.653

1.651

0.12%

4

2.570

2.567

0.12%

5

3.100

3.096

0.13%

表3.1测试结果

根据表3.1的分析看,本次设计的数字电压表的符合要求,误差控制在1%内。

4.总结

本次的设计和实验采用了KeilμVision4进行C语言的编写和烧录,熟悉了Keil的操作,对8051单片机的定时器、AD转换器、LCD12864液晶屏等模块有了一定的了解和认识。

在程序的编写的过程和实际电路操作时遇到了种种问题,通过查阅大量的资料解决了问题,为以后的学习和实际应用奠定了基础。

附录:

本次设计实验的C语言代码:

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineLEDENCS0xC004LCD模块背光控制片选信号

#defineWCOMADDR0xC008写命令寄存器的地址

#defineWDATADDR0xC009写数据寄存器的地址

#defineRCOMADDR0xC00A读命令寄存器的地址

#defineRDATADDR0xC00B读数据寄存器的地址

uintnum=0;

ucharLEDCON=0x00;*LCD模块背光控制字,最低位为0时关LED背光,最低位为1时开启LED背光,*

sbitSTART=P3^0;

sbitSW0=P3^1;

sbitSW1=P3^3;

ucharcode);Lcd写指令子程序

voidWriteData(ucharm);Lcd写数据子程序

voidInsitiLcd();Lcd初始化子程序

voidDispHan(ucharcode*a,ucharm,uchark);显示汉字子程序

voidDispShu(uinta,ucharm);数字显示程序

*********************************************

主函数

**********************************************

voidmain()

{

ucharxdata*addr;

InitDevice();

InsitiLcd();

addr=LEDENCS;

LEDCON=~LEDCON;

*addr=LEDCON;

DispHan(;

}

voidXramInit(void)外部数据储存器初始化

{

SFRPAGE=0x0f;

EMI0CF=0x07;引脚复用方式

SFRPAGE=0x00;

return;

}

voidSmbInit(void)I2C总线初始化

{

SMB0CF=0xc1;定时器T1溢出作为时钟

return;

}

voidUartInit(void)异步串口通信接口初始化

{

SCON0=0x00;10位UART

return;

}

voidDacInit(void)DA转化器初始化

{

IDA0CN=0xf2;IDA0使能,写IDA0H触发DAC输出更新,2mA满度输出

return;

}

voidAdcInit(void)AD初始化

{

ADC0CN=0X80;adc0一直跟踪,AD0BUSY写“1”启动

ADC0CF=0x28;转换率2Mhz,右对齐

REF0CN=0X08;选择Vdd做基准电压

AMX0P=0X08;单端输入P2.0

AMX0N=0X1F;

EIE1=0x08;允许ADC中断

return;

}

voidInt0Init(void)外部中断初始化

{

IT01CF=0x05;选择P0.5为INT0

IT0=1;INT0下降沿触发

return;

}

voidPcaInit(void)PCA初始化

{

PCA0CN=0x40;允许PCA计数器定时器

PCA0MD=0x00;禁止看门狗定时器

return;

}

voidInterruptsInit(void)中断系统初始化

{

IE0=0;清INT0中断标志

EX0=1;

PX0=0;

ET0=1;

ET1=1;

EA=1;

return;

}

voidInitDevice(void)

{

OscInit();

PortIoInit();

XramInit();

SmbInit();

UartInit();

DacInit();

AdcInit();

Int0Init();

PcaInit();

InterruptsInit();

TimeInit();

return;

}

*************************************************

检查LCD是否空闲子程序

*************************************************

voidCheckLcd()

{

uchartemp=0x00;

ucharxdata*addr;

while

(1)

{

addr=RCOMADDR;

temp=*addr;

temp&=0x80;

if(temp==0x00)

break;

}

}

*************************************************

Lcd写指令子程序

*************************************************

voidWriteCom(ucharn)

{

ucharxdata*addr;

CheckLcd();

addr=WCOMADDR;

*addr=n;

}

*************************************************

Lcd写数据子程序

*************************************************

voidWriteData(ucharm)

{

ucharxdata*addr;

CheckLcd();

addr=WDATADDR;

*addr=m;

}

*************************************************

Lcd初始化子程序

*************************************************

voidInsitiLcd()

{

WriteCom(0x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1