数字电压表作业.docx
《数字电压表作业.docx》由会员分享,可在线阅读,更多相关《数字电压表作业.docx(17页珍藏版)》请在冰豆网上搜索。
数字电压表作业
2016—2017学年第2学期
《嵌入式控制系统设计》
数字电压表
专业班级
姓
得分
评人
一、技术要求
1、约束性指标:
⑴数字显示采用8段数码管,字符高度14.2mm,红色;
⑵显示电压范围0~5V,显示分辨率5mV;
⑶显示位数:
4位,显示结果要紧凑;
⑷显示形式:
X.XXX,即小数点位于第一位之后。
2、扩展性指标:
⑴数字电压表具有与PC机通讯功能;
⑵用8位晶体管显示电压数值。
二、方案设计
1、总体方案设计
利用AW60开发板设计一个四位数字电压表,设计中使用到AW60MUC中的AD转化模块、串口通信模块以及PWM模块。
设计实现了显示电压范围0~5V,显示分辨率5mV的数字电压表,实现了8为数码管的动态显示以及PC机的实时通信连接功能。
设计方案原理图如图1.
图1方案原理图
2、四位数字电压表显示
①硬件连接
按照如下表格对应接插点连接。
表1晶体管段选连接
PORT
PTE7
PTE6
PTE5
PTE4
PTE3
PTE2
PTA1
PTA0
MCUport
SCK
MOSI
MISO
SS
TICH1
TICH0
PA1
PA0
Display
DP
G
F
E
D
C
B
A
表2晶体管位选连接
PORTC
PORTC3
PORTC2
PORTC1
PORTC0
MCUport
PORTC3
PORTC2
PORTC1
PORTC0
Display
L1
L2
L3
L4
表3参考电压及AD输入接口
Power
Power+
Power+
A/D0~5V
MCUport
VREFH
VREFL
PB0
②原理图
图2四位数码管显示原理图
③AD转换程序
见附录。
④PCB图
图3PCB原理图
⑤实验结果
利用编写的程序以及设计的电路,可以完成四位数字电压表的要求。
实验结果如图4。
图4数字显示结果
3、8段数码管显示
①硬件连接
按照如下表格对应接插点连接。
表48段数码管显示
PORT
PORTD0
PORTD1
PORTD2
PORTD3
PORTG0
PORTG1
PORTG2
PORTG3
MCU
PD0
PD1
PD2
PD3
PG0
PG1
PG2
PG3
OUT
L7
L6
L5
L4
L3
L2
L1
L0
②原理图
图48段晶体管显示原理图
③程序
运行程序见附录。
④PCB图
图5PCB原理图
⑤显示结果
显示结果如图6.
图68段晶体管显示结果
4、串口通信
利用BDM仿真器连接实验板和PC机,编写程序实现实验板和PC级的通讯功能。
①原理图
图7串口通信原理图
②实验结果
图7串口通信结果(3.660V)
三、显示精度测试
表5测试结果(由低到高)
表6测试结果(由高到低)
四、基于STC89C51的方案设计
①原理框图
图8C51方案原理框图
②两种方案对比
使用STC89C51单片机,需要使用外部ADC转换模块AD8040。
增加了硬件电路的复杂性和成本,增加了单片机设计工作量,同时降低了系统的可靠性。
ADC8040模块使用的是8位ADC转换,精度比使用AW60内ADC模块的精度低。
五、附录
①主程序
#include/*forEnableInterruptsmacro*/
#include"derivative.h"/*includeperipheraldeclarations*/
/*DefVariable*/
unsignedcharLED[4]={0x01,0x02,0x03,0x04};
unsignedcharNUM=0;
unsignedcharLEDBuffer;
unsignedcharLEDBuffer1;
constcharLEDTable[4]={0xF7,0xFB,0xFD,0xFE};
constcharSGT[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsignedshortADCTEMP,ADCTEMP1;
unsignedcharGRAPH(unsignedcharLEDBuffer1);
constunsignedcharLEDtraD[9]={0xFF,0xFE,0xFC,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0};
constunsignedcharLEDtraG[9]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0};
unsignedcharNUMtra=0;
unsignedcharj=0;
voidmain(void)
{
DisableInterrupts;/*DisableInterrupts*/
/*Initial_ICG*/
{
ICGC1=0x78;/*EnabletheExternalCrystal=4MHz,BusFrequency=4MHz*/
ICGC2=0x22;
while((ICGS1&0x08)==0)__RESET_WATCHDOG();/*CheckFLLLOCK=1?
*/
}
/*Initial_TPM2*/
{
TPM2SC=0x06;/*SetTPM2'clockisBusrateclock,PrescaleDivisoris64*/
TPM2MODH=0x00;/*SetTime=2.5ms*/
TPM2MODL=0x9C;
}
/*Initial_PTF*/
{
PTFD_PTFD4=1;
PTFDD_PTFDD4=1;
}
/*Initial_PTC*/
{
PTCD=0xFF;
PTCDD=0xFF;
}
/*Initial_PTE*/
{
PTED=0xFF;
PTEDD=0xFF;
}
/*Initial_PTD*/
{
PTDD=0xFF;
PTDDD=0xFF;
}
/*Initial_PTG*/
{
PTGD=0xFF;
PTGDD=0xFF;
}
/*Initial_PTA*/
{
PTAD=0xFF;
PTADD=0xFF;
}
/*Initial_ADC1*/
{
ADC1CFG=0x18;
ADC1SC2=0x00;
APCTL1=0x01;
APCTL2=0x00;
ADC1SC1=0x60;
}
/*Initial_SCI1*/
{
SCI1BDL=0X1A;
SCI1C2=0X08;
}
TPM2SC=TPM2SC|(0x48);/*EnableTPM2OverflowInterruptEnableTPM2*/
//TPM2SC=TPM2SC|(0x08);
EnableInterrupts;/*enableinterrupts*/
/*includeyourcodehere*/
for(;;){
__RESET_WATCHDOG();/*feedsthedog*/
}/*loopforever*/
/*pleasemakesurethatyouneverleavemain*/
}
/*deffunction*/
unsignedcharGRAPH(unsignedcharLEDBuffer1)
{
return(SGT[LEDBuffer1]);
}
voidinterrupttpm2ovf(void)
{
//unsignedcharGRAPH(unsignedcharLEDBuffer1);
TPM2SC_TOF=0;
PTFD_PTFD4=~PTFD_PTFD4;
/*Display*/
{
PTCD=0xFF;
LEDBuffer=GRAPH(LED[NUM]);
if(NUM==0){
LEDBuffer=LEDBuffer&0x7F;
}
PTED=LEDBuffer;
PTAD=LEDBuffer;
PTCD=LEDTable[NUM];
NUM+=0x01;
if(NUM>=4){
NUM=0x00;
}
}
}
voidinterruptadc1(void)//AD转换程序
{
ADC1SC1_COCO=0;
/*Conversion*/
{
unsignedchari=0;
ADCTEMP=ADC1R;
ADCTEMP=ADCTEMP/205;
LED[i]=(char)ADCTEMP;
i++;
__RESET_WATCHDOG();/*feedsthedog*/
ADCTEMP=ADC1R%206;
ADCTEMP1=ADCTEMP;
ADCTEMP=ADCTEMP/21;
if((char)ADCTEMP>=0x0A)
{
LED[i]=0;
i--;
LED[i]=LED[i]+1;
i++;}
else
LED[i]=(char)ADCTEMP;
i++;
__RESET_WATCHDOG();/*feedsthedog*/
ADCTEMP1=ADCTEMP1%21;
ADCTEMP=ADCTEMP1/2;
if((char)ADCTEMP>=0x0A)
{LED[i]=0;
i--;
LED[i]=LED[i]+1;
i++;
}else
LED[i]=(char)ADCTEMP;
i++;
__RESET_WATCHDOG();/*feedsthedog*/
LED[i]=(char)ADCTEMP%2*5;
i++;
if(i==4)
{i=0;
}
}
NUMtra=ADC1R/114;//晶体管显示程序
PTDD=LEDtraD[NUMtra];
PTGD=LEDtraG[NUMtra];
//串口通信程序
for(j=0;j<4;j++){
while((SCI1S1&0X80)==0)__RESET_WATCHDOG();/*feedsthedog*/
SCI1D=LED[j]+48;
}
}
②中断向量
VECTORADDRESS0xFFE2tpm2ovf
VECTORADDRESS0xFFD0adc1