标题: MSP430单片机测频率、电压 2016北京市电子设计竞赛题目及代码 [打印本页]

作者: hobcat    时间: 2016-12-30 08:44
标题: MSP430单片机测频率、电压 2016北京市电子设计竞赛题目及代码
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代码见附件!
  1. #include "msp430g2553.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. /****************************************第四题***********************/
  5. unsigned long TimeBase=0;
  6. //8M时钟,如果数据不准微调这里
  7. #define SYSTEMCLOCK 1000000
  8. //                        看门狗分频的时钟中断
  9. #pragma vector = WDT_VECTOR
  10. __interrupt void watchdog_timer(void)        //
  11. {
  12.         TimeBase++;
  13. }
  14. unsigned long TA0_Frequency=0;                //TA0计数方式测量的频率值(HZ单位)
  15. unsigned long TA0_Flowover_Time=0;                //上次溢出时的时间点
  16. #pragma vector = TIMER0_A1_VECTOR
  17. __interrupt void Timer_A0C1 (void)
  18. {
  19.         TA0CTL &= ~TAIFG;//清除中断标志
  20.         TA0R=0xffff-4096;//累计8192个
  21.         TA0_Frequency=(TimeBase-TA0_Flowover_Time);//时间差值
  22.         TA0_Frequency=(unsigned long)(SYSTEMCLOCK)/TA0_Frequency/2;//累计速度乘在这里SYSTEMCLOCK*X
  23.         TA0_Flowover_Time=TimeBase;                                //当前时间更新为上次溢出时间
  24. }
  25. /*****串口发送数据函数*****/
  26. void Send_Byte4(unsigned char data)
  27. {
  28.   while(!(IFG2 & UCA0TXIFG));//发送寄存器空的时候发送数据
  29.   UCA0TXBUF = data;
  30. }

  31. /*****串口发送,数码管显示******/
  32. void displayHZ(unsigned int dis)
  33. {
  34.   unsigned char shi,ge,bai,qian;
  35.   ge = dis % 10;
  36.   shi = (dis / 10) % 10;
  37.   bai = (dis / 100) % 10;
  38.   qian = (dis / 1000) % 10;
  39.   if (dis>=5500) return;
  40.   if (dis>=1000) {
  41.     Send_Byte4(2|0x10);//第四位数码管显示1
  42.     Send_Byte4(qian|0x20);//第三位数码管显示qian位  
  43.     Send_Byte4(0x2b);//第二位数码管显示小数点
  44.     Send_Byte4(bai|0x40);//第二位数码管显示百位      
  45.     Send_Byte4(shi|0x80);//第一位数码管显示十位


  46.   } else {
  47.     Send_Byte4(1|0x10);//第四位数码管显示1  
  48.     Send_Byte4(bai|0x20);//第三位数码管显示bai位  
  49.     Send_Byte4(shi|0x40);//第二位数码管显示位      
  50.     Send_Byte4(ge |0x80);//第一位数码管显示位        
  51.    
  52.   }
  53. }
  54. /****************************************第四题end***********************/

  55. /****************************************第一题 main外部分***********************/
  56. uint a[4];
  57. /*****串口发送,数码管显示******/
  58. void display(uint dis)
  59. {
  60.   uchar shi,ge,bai,qian;
  61.   ge = dis % 10;
  62.   shi = (dis / 10) % 10;
  63.   bai = (dis / 100) % 10;
  64.   qian = (dis / 1000) % 10;

复制代码

作者: innovation_bupt    时间: 2018-3-27 19:35
感谢您!!正需要!!学习一个!!
作者: kelbupt    时间: 2018-3-29 15:50
非常感谢
作者: tiandailan    时间: 2018-4-6 10:17
非常感谢您的分享,现在正需要!
作者: 15021245    时间: 2018-4-6 14:54
哇,感谢楼主,太关键了

作者: CrankRong    时间: 2018-4-7 20:50
感谢!急需
作者: neumann    时间: 2018-4-8 14:57
需要,赞一个
作者: foreverseer    时间: 2018-4-10 13:30
赞一个,正急用,谢谢楼主
作者: foreverseer    时间: 2018-4-10 14:13
太感谢了,我正需要这个
作者: OliveDS    时间: 2018-4-10 17:30
太感谢了!
作者: 嘤嘤嘤哇咔咔    时间: 2018-4-10 19:35
很好,谢谢

作者: miracle123    时间: 2018-4-10 19:42
谢谢楼主

作者: linshizhiyu    时间: 2018-4-10 22:30
谢谢楼主

作者: fuycj    时间: 2019-3-25 09:42
谢谢楼主
作者: liscman    时间: 2019-3-31 00:29
请问有完整的代码吗
全部四道题的
作者: oO机器骑士    时间: 2019-3-31 15:20
方便给出你的430的原理图吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1