单片机直流数字电压表 - 图文(2)

2020-05-13 09:02

数字电压表

1 设计任务描述

1.1 设计题目:直流数字电压表

1.2设计要求

1.2.1 设计目的

编写直流数字电压表程序

1.2.2设计要求

(1)能够测量直流电压并显示。(2)能够进行量程选择。

1

数字电压表

2 设计相关思路

此次的课程设计题目是直流数字电压表,要求是能够测量直流电压并显示和进行量程选择。数字电压表的核心控制器是C8051F020单片机,实现的主要功能是模拟电压的采集、A/D转换、量程的通过按键切换、液晶显示器控制等。

经过查阅相关资料以及和同学老师的探讨之后,我基本上确定了数字电压表 的设计思路。

首先,我确定了需要用到的器件,I/O口、A/D转换器、分压器、液晶显示屏以及LED灯。然后根据我选用的器件确定了一些重要的使能和参数设定,当然,因为用到了定时器3,所以我没有忘记把看门狗给关了。器件以及基本参数设定完成之后,就应该是考虑外部模拟信号的输入问题。因为单片机试验箱有一个分压器,所以我就使用这个分压器来调节外部模拟输入信号。当信号输入到单片机之后,就输入到了A/D转换器,然后经过A/D转换,使得模拟信号变成了数字信号。当然了,我们不能直接显示其转换后的数字,因为我使用的A/D转换器是12位的,其转换后的数值是放在ADC0里面的,并且是16进制的数字,如果直接显示的话,那就没有意义了。所以之后还需要接一些数据转换。

数据转换是个难点,刚开始我是一点头绪都没有,后来经过查阅资料以及老师的帮助,最后我确定了数据转换的方法。具体方法在下面会有详细的介绍。

数据转换后就应该是输入到液晶屏上显示了。电压变肯定会有量程切换的,在这次设计中,我设计了两个量程。一个是0-200mv,一个是0-2.4v。量程的切换是利用外部中断来实现的。我还设计了一个待测状态,就是当量程没有确定的时候,液晶屏显示的是DAI_CE字样。不同的量程,数据转换的方法也不尽相同。

当然了,我设计的电压表是可以重复测量的。因为我的A/D转换是有定时器3溢出来启动的,所以可以不断的重复测量。

2

数字电压表

3 各部分程序的设计以及介绍

3.1 主程序

void main(void) {WDTCN=0X0DE; WDTCN=0X0AD; port_init(); LCD_Init(); isr_init(); ADC_Init(); Timer3_Init(); while(1)

{LCD_Init(); data_deal(); } }

主程序是有很多个子程序的调用以及一些基本参数设定组成了。主程序涵盖了所有使用到的子程序,是整个程序的主导。

我在主程序中就关闭了看门狗,然后是调用一些子程序来进行使能以及基本参数的设定。

3.2 LCD_init,液晶屏初始化

void LCD_Init(void) { unsigned long x; P6=0x01;

for(x=0;x<5000;x++); P7=0X38; P6=0X1; P6=0X0;

for(x=0;x<1000;x++); P7=0X0E; P6=0X1; P6=0X0;

for(x=0;x<1000;x++); P7=0X06; P6=0X1; P6=0X0;

for(x=0;x<5000;x++); P7=0X01; P6=0X1;

3

数字电压表

P6=0X0;

for(x=0;x<5000;x++); }

液晶屏的初始化在本程序中是很重要的一个部分,它是通过对p7和p6的不同赋值来选择显示的行数,然后还有开显示、开光标、字符不闪烁、整体显示不移动等等。

3.3模拟信号采集程序

void ADC_Init(void) {

ADC0CN =0x084; //定时器三溢出启动跟踪,右对齐 ADC0CF =0X50; //设定默认增益为1 AMX0CF =0x0; AMX0SL =0x0;

REF0CN =0X03; //设定基准电压,2.4v }

/*--------------------------------------------------*/ /*--------------------------------------------------*/

/*-----------------Timer_3初始化--------------------*/ void Timer3_Init(void) {

TMR3CN=0X06; //不分频,系统时钟,开始计时 TMR3RLL=0XD2; TMR3RLH=0X04; TMR3L=0XcF; TMR3H=0XcF; }

模拟电压信号是由外部分压器提供的,然后外部模拟电压信号输入到了A/D转换器,进过转换后变成了数字信号。所以外部模拟信号的采集是依靠A/D转换器的。然后我又使用了T3定时器的溢出来启动A/D转换,所以又使用到了T3定时器。

上面两个子程序就是设定A/D转换器和T3定时器的相关参数而使用的。确定A/D转换由定时器3溢出启动,并设定基准电压为2.4V,增益为1。T3不分频,初值为oxcfcf,自动重装初值。

4

数字电压表

3.4量程选择

void isr_key3( void) interrupt 18//开始测量,量程是0-200mv { count=2;

ADC0CN =0x084; //定时器三溢出启动跟踪,右对齐 ADC0CF =0X50; //设定默认增益为1 P3IF=P3IF&0XBF; //清中断标志 }

/*--------------------------------------------------*/ /*--------------------------------------------------*/ /*-----------------量程0-2.4 ----------------------*/ void isr_key4(void) interrupt 19 { count=1;

ADC0CN =0x084; //定时器三溢出启动跟踪,右对齐 ADC0CF =0X50; //设定默认增益为1 P3IF &=0X7F; //清中断标志 }

我设计的程序中,当外部信号采集完毕之后,显示屏上第一行会显示2009308108U:

的字样,第二行显示的是DAI_XUAN字样,说明是待测状态,此后就需要选择量程。而我的量程是通过外部中断K3和K4来选择的。K3选择的是0-2.4v的量程,K4选择的是0-200mv的量程。上面两个程序就是k3和k4的参数设定,一定要注意清除中断标志位哦!

3.5数据转换程序

int data_deal (void) { int n;

if(AD0INT==1)

{ TMR3CN=TMR3CN&0XEF; //关闭ADC0转换 voltage=ADC0; TEN=voltage;

QIAN=TEN/0x03e8; TEN%=0x03e8; BAI=TEN/0x64; TEN%=0x64; SHI=TEN/0x0a; TEN%=0x0a;

5


单片机直流数字电压表 - 图文(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:劳动人事工资管理办法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: