2016年北京市电子设计竞赛试题 一、任务:在给定的MSP平台上设计制作一数字表; 二、具体任务:数字表有下列功能: 1. 测量直流电压(30分) (1)范围:5mV-100mV; (2)误差不大于1%; (3)有显示功能; (4)具有自动换量程功能,显示有效位3位; 2. 测量直流电流(20分) (1)范围:5mA-40mA; (2)具有自动换量程功能,显示有效位3位; (3)误差不大于1%; 3. 测量交流电压有效值(20分) (1)电压范围(有效值):5mV-80mV; (2)频率范围:100Hz-5KHz; (3)具有自动换量程功能,显示有效位3位; (4)误差不大于5%; 4. 测量交流电压的频率(30分) (1)频率范围:100Hz-5KHz;输入信号电压(有效值)为20mV; (2)具有自动换量程功能,显示有效位3位; (3)误差不大于1%; (4)有显示单位功能;[用第4个数码管显示,如“1”代表Hz,“2”代表KHz];
竞赛采用“FPGA最小系统单元+MSP-EXP430G2开发板单元+万用板单元”的架构模式,FPGA最小系统和MSP-EXP430G2开发模块均可以独立使用,也可以相互配合组合设计使用。万用板单元采用标准的2.54mm间距焊接孔组成,用于搭建焊接比赛时所设计的应用电路。 MSP430代码见附件! - #include "msp430g2553.h"
- #define uchar unsigned char
- #define uint unsigned int
- /****************************************第四题***********************/
- unsigned long TimeBase=0;
- //8M时钟,如果数据不准微调这里
- #define SYSTEMCLOCK 1000000
- // 看门狗分频的时钟中断
- #pragma vector = WDT_VECTOR
- __interrupt void watchdog_timer(void) //
- {
- TimeBase++;
- }
- unsigned long TA0_Frequency=0; //TA0计数方式测量的频率值(HZ单位)
- unsigned long TA0_Flowover_Time=0; //上次溢出时的时间点
- #pragma vector = TIMER0_A1_VECTOR
- __interrupt void Timer_A0C1 (void)
- {
- TA0CTL &= ~TAIFG;//清除中断标志
- TA0R=0xffff-4096;//累计8192个
- TA0_Frequency=(TimeBase-TA0_Flowover_Time);//时间差值
- TA0_Frequency=(unsigned long)(SYSTEMCLOCK)/TA0_Frequency/2;//累计速度乘在这里SYSTEMCLOCK*X
- TA0_Flowover_Time=TimeBase; //当前时间更新为上次溢出时间
- }
- /*****串口发送数据函数*****/
- void Send_Byte4(unsigned char data)
- {
- while(!(IFG2 & UCA0TXIFG));//发送寄存器空的时候发送数据
- UCA0TXBUF = data;
- }
- /*****串口发送,数码管显示******/
- void displayHZ(unsigned int dis)
- {
- unsigned char shi,ge,bai,qian;
- ge = dis % 10;
- shi = (dis / 10) % 10;
- bai = (dis / 100) % 10;
- qian = (dis / 1000) % 10;
- if (dis>=5500) return;
- if (dis>=1000) {
- Send_Byte4(2|0x10);//第四位数码管显示1
- Send_Byte4(qian|0x20);//第三位数码管显示qian位
- Send_Byte4(0x2b);//第二位数码管显示小数点
- Send_Byte4(bai|0x40);//第二位数码管显示百位
- Send_Byte4(shi|0x80);//第一位数码管显示十位
- } else {
- Send_Byte4(1|0x10);//第四位数码管显示1
- Send_Byte4(bai|0x20);//第三位数码管显示bai位
- Send_Byte4(shi|0x40);//第二位数码管显示位
- Send_Byte4(ge |0x80);//第一位数码管显示位
-
- }
- }
- /****************************************第四题end***********************/
- /****************************************第一题 main外部分***********************/
- uint a[4];
- /*****串口发送,数码管显示******/
- void display(uint dis)
- {
- uchar shi,ge,bai,qian;
- ge = dis % 10;
- shi = (dis / 10) % 10;
- bai = (dis / 100) % 10;
- qian = (dis / 1000) % 10;
复制代码 |