数字电压表
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
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库单片机直流数字电压表 - 图文(2)在线全文阅读。
相关推荐: