数字电压表作业.docx

上传人:scccc 文档编号:12246163 上传时间:2021-12-02 格式:DOCX 页数:11 大小:630.57KB
返回 下载 相关 举报
数字电压表作业.docx_第1页
第1页 / 共11页
数字电压表作业.docx_第2页
第2页 / 共11页
数字电压表作业.docx_第3页
第3页 / 共11页
数字电压表作业.docx_第4页
第4页 / 共11页
数字电压表作业.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《数字电压表作业.docx》由会员分享,可在线阅读,更多相关《数字电压表作业.docx(11页珍藏版)》请在三一文库上搜索。

1、.20162017学年第2学期嵌入式控制系统设计数字电压表 专业班级 姓 得分评人一、 技术要求1、约束性指标:数字显示采用8段数码管,字符高度14.2mm,红色;显示电压范围05V,显示分辨率5mV;显示位数:4位,显示结果要紧凑;显示形式:X.XXX,即小数点位于第一位之后。2、扩展性指标:数字电压表具有与PC机通讯功能;用8位晶体管显示电压数值。二、 方案设计1、 总体方案设计利用AW60开发板设计一个四位数字电压表,设计中使用到AW60MUC中的AD转化模块、串口通信模块以及PWM模块。设计实现了显示电压范围05V,显示分辨率5mV的数字电压表,实现了8为数码管的动态显示以及PC机的实

2、时通信连接功能。设计方案原理图如图1.图1 方案原理图2、四位数字电压表显示硬件连接按照如下表格对应接插点连接。表1 晶体管段选连接PORTPTE7PTE6PTE5PTE4PTE3PTE2PTA1PTA0MCU portSCKMOSIMISOSSTICH1TICH0PA1PA0DisplayDPGFEDCBA表2 晶体管位选连接PORTCPORTC3PORTC2PORTC1PORTC0MCU portPORTC3PORTC2PORTC1PORTC0DisplayL1L2L3L4表3 参考电压及AD输入接口PowerPower+Power+A/D 05VMCU portVREFHVREFLPB0

3、原理图图2 四位数码管显示原理图AD转换程序见附录。PCB图图3 PCB原理图实验结果利用编写的程序以及设计的电路,可以完成四位数字电压表的要求。实验结果如图4。图4 数字显示结果3、8段数码管显示硬件连接按照如下表格对应接插点连接。表4 8段数码管显示PORTPORTD0PORTD1PORTD2PORTD3PORTG0PORTG1PORTG2PORTG3MCUPD0PD1PD2PD3PG0PG1PG2PG3OUTL7L6L5L4L3L2L1L0原理图图4 8段晶体管显示原理图程序运行程序见附录。PCB图图5 PCB原理图显示结果显示结果如图6.图6 8段晶体管显示结果4、串口通信利用BDM仿

4、真器连接实验板和PC机,编写程序实现实验板和PC级的通讯功能。原理图图7 串口通信原理图实验结果图7 串口通信结果(3.660V)三、 显示精度测试表5 测试结果(由低到高)表6 测试结果(由高到低)四、 基于STC89C51的方案设计原理框图图8 C51方案原理框图两种方案对比 使用STC89C51单片机,需要使用外部ADC转换模块AD8040。增加了硬件电路的复杂性和成本,增加了单片机设计工作量,同时降低了系统的可靠性。ADC8040模块使用的是8位ADC转换,精度比使用AW60内ADC模块的精度低。五、附录主程序#include <hidef.h> /* for Enable

5、Interrupts macro */ #include "derivative.h" /* include peripheral declarations */ /* Def Variable*/ unsigned char LED4=0x01,0x02,0x03,0x04; unsigned char NUM=0;unsigned char LEDBuffer;unsigned char LEDBuffer1; const char LEDTable4=0xF7,0xFB,0xFD,0xFE; const char SGT10=0xC0, 0xF9, 0xA4, 0xB

6、0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90; unsigned short ADCTEMP,ADCTEMP1; unsigned char GRAPH(unsigned char LEDBuffer1); const unsigned char LEDtraD9=0xFF,0xFE,0xFC,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0; const unsigned char LEDtraG9=0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0;unsigned char NUMtra=0;unsigned c

7、har j=0;void main(void) DisableInterrupts; /* Disable Interrupts*/ /*Initial_ICG*/ ICGC1=0x78; /*Enable the External Crystal=4MHz,Bus Frequency=4MHz*/ ICGC2=0x22; while(ICGS1&0x08)=0) _RESET_WATCHDOG(); /*Check FLL LOCK=1?*/ /*Initial_TPM2*/ TPM2SC=0x06; /*Set TPM2'clock is Bus rate clock, P

8、rescale Divisor is 64 */ TPM2MODH=0x00; /*Set Time =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=0x

9、FF; PTADD=0xFF; /*Initial_ADC1*/ ADC1CFG=0x18; ADC1SC2=0x00; APCTL1=0x01; APCTL2=0x00; ADC1SC1=0x60; /*Initial_SCI1*/ SCI1BDL=0X1A; SCI1C2=0X08; TPM2SC=TPM2SC|(0x48); /*Enable TPM2 Overflow Interrupt Enable TPM2*/ /TPM2SC=TPM2SC|(0x08); EnableInterrupts; /* enable interrupts */ /* include your code

10、here */ for(;) _RESET_WATCHDOG(); /* feeds the dog */ /* loop forever */ /* please make sure that you never leave main */ /*def function*/ unsigned char GRAPH(unsigned char LEDBuffer1) return(SGTLEDBuffer1); void interrupt tpm2ovf(void) /unsigned char GRAPH(unsigned char LEDBuffer1); TPM2SC_TOF=0; P

11、TFD_PTFD4=PTFD_PTFD4; /*Display*/ PTCD=0xFF; LEDBuffer=GRAPH(LEDNUM); if(NUM=0) LEDBuffer=LEDBuffer&0x7F; PTED=LEDBuffer; PTAD=LEDBuffer; PTCD=LEDTableNUM; NUM+=0x01; if(NUM>=4) NUM=0x00; void interrupt adc1(void) /AD转换程序 ADC1SC1_COCO=0; /*Conversion*/ unsigned char i=0; ADCTEMP=ADC1R; ADCTEM

12、P=ADCTEMP/205; LEDi=(char)ADCTEMP; i+; _RESET_WATCHDOG(); /* feeds the dog */ ADCTEMP=ADC1R%206; ADCTEMP1=ADCTEMP; ADCTEMP=ADCTEMP/21; if(char)ADCTEMP>=0x0A) LEDi=0; i-; LEDi=LEDi+1; i+; else LEDi=(char)ADCTEMP; i+; _RESET_WATCHDOG(); /* feeds the dog */ ADCTEMP1=ADCTEMP1%21; ADCTEMP=ADCTEMP1/2;

13、if(char)ADCTEMP>=0x0A) LEDi=0; i-; LEDi=LEDi+1; i+; else LEDi=(char)ADCTEMP; i+; _RESET_WATCHDOG(); /* feeds the dog */ LEDi=(char)ADCTEMP%2*5; i+; if(i=4) i=0; NUMtra=ADC1R/ 114; /晶体管显示程序 PTDD=LEDtraDNUMtra; PTGD=LEDtraGNUMtra; /串口通信程序 for(j=0;j<4;j+) while(SCI1S1&0X80)=0) _RESET_WATCHDOG(); /* feeds the dog */ SCI1D=LEDj+48; 中断向量VECTOR ADDRESS 0xFFE2 tpm2ovf VECTOR ADDRESS 0xFFD0 adc1;.

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1