




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计题目:基于MSP430数字式电压表院系:电子与信息工程学院班级:学生姓名:学号:指导老师:2016年7月6日Msp430数字电压表设计目标采用MSP430单片机来实现数字电压表的功能,本数字电压表由MSP430F5529作为主控器件,A/D转换器采用MSP430自带转换器,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现数字电压表的硬件电路和软件设计。利用外部硬件电路对不同档位的输入电压进行处理,使电压达到单片机测量范围,实现基本的数字电压表功能,使其可以测量0~16.5V的电压值,并且误差控制在0.02v以内,最后在AY-SEBModule板的液晶屏上显示。该系统的数字电压表电路元件较少,成本低,调节工作简单等优点。在电压测量中有较强的实用性。器件1.MSP430F5529LP开发板2.AY-SEBModule核心板3.测试前端(电阻分压和电压跟随器组成)三、原理分析测试前端包括电阻分压和电压跟随器,即输入电压前接电阻分压电路和LM358运算放大器组成的电压跟随器,电阻分压能增大测量量程(可通过改变两个电阻比值而改变量程)。运算放大器同时起到增加输入阻抗的作用,使得电阻分压得到的电压更稳定,避免影响被测量的电压值。用MSP430F5529开发板P6.0(A0)通道采用中断方式,不//**************************数字电压表程序**************************//MSP430F5529LP-MSP-EXP430F5529LP+AY-SEBModule核心板//描述:P60(A0)通道采用中断方式,不间断连续采集输入电压,再经液晶屏显示。//*******************************************************************#include<msp430.h>#include"grlib.h"#include"LCD_driver/Template_Driver.h"#include"images/images.h"#include"driverlib.h"//*****************************************************************************//变量来存储振荡器故障标志的状态//*******************************************************************uint16_tstatus;#defineNum_of_Results16#defineADC_REF 1500 //adc基准参考电压(1.5V与2.5V)#defineADC_RANGE 4095 //adc转换位数volatileuint16_tresults[Num_of_Results];volatileuint16_tadc_filter;Graphics_Contextg_sContext;#ifdefined(__IAR_SYSTEMS_ICC__)int16_t__low_level_init(void){//StopWDT(WatchDogTimer)WDTCTL=WDTPW+WDTHOLD;return(1);}#endiftContextg_sContext;externvoidGrStringNumberCentered(consttContext*pContext,int16_tNumber, uint8_tui8Dot,uint8_tui8X,uint8_tui8Y);voidmain(void){ volatileunsignedinti; volatileunsignedintvin_mv; _system_pre_init();//设置LCDTemplate_DriverInit();Graphics_initContext(&g_sContext,&g_sTemplate_Driver);Graphics_setForegroundColor(&g_sContext,ClrBlack);//设置前景为白色Graphics_setBackgroundColor(&g_sContext,ClrWhite); //设置背景为黑色Graphics_setFont(&g_sContext,&g_sFontCm16b); //设置字体Graphics_clearDisplay(&g_sContext);//清空显示页面 //绘制LCD界面 GrStringDraw(&g_sContext,"=shuzidianya=",AUTO_STRING_LENGTH,5,17,OPAQUE_TEXT); GrStringDraw(&g_sContext,"zhi:v",AUTO_STRING_LENGTH,5,34,OPAQUE_TEXT); GrFlush(&g_sContext);//打开全局中断__bis_SR_register(GIE); while(1) { //转换成电压值(单位:mv)并乘于电阻分压倍数11,得到电阻分压电压,在加上射级跟随电压0.707,最后得到检测电压。 vin_mv=(adc_filter*1.0*11)/ADC_RANGE*ADC_REF+707;//擦除旧的LCD显示数据 GrStringDrawCentered(&g_sContext,"",AUTO_STRING_LENGTH,70,40,OPAQUE_TEXT); //显示电压并把电压换算成V(1V=1000mV) GrStringNumberCentered(&g_sContext,vin_mv,3,70,40); GrFlush(&g_sContext); }}//====================数字转字符串函数=========================voidNum2String(int16_ti16Number,uint8_tui8Dot,uint8_t*p){ int8_ti=0,ds=0; uint8_tpos=0,m=0; uint8_tDispBuff[11]={0}; uint8_ttempBuff[11]={0}; if(i16Number<0) { i16Number=-i16Number; //处理负数 DispBuff[0]='-'; //显示负号 m=1; //跟踪缓存位置 } else m=0; //等效为-清除负号 for(i=m;i<11;i++) //拆分数字 { DispBuff[i]=(i16Number%10); i16Number/=10; } for(i=10;i>=0;i--) //消隐无效"0" { if(DispBuff[i]==0)DispBuff[i]=0; else { pos=i; //保存当前第一个有效值 break; } } tempBuff[0]=DispBuff[0]; //保存对应的符号位 for(i=10;i>=m;i--) //高低位数据转换存储位置,高位在前,符号位不变 { if(i<=pos) { tempBuff[pos-i+m]=DispBuff[i]+0x30; } else tempBuff[i]=32; //空格(ASCII) } if(ui8Dot>0) { if(ui8Dot<pos+1-m) //pos+1-m为当前数组数据位数 { for(i=pos;i>=pos-(ui8Dot-1);i--) { tempBuff[i+1]=tempBuff[i]; } tempBuff[pos-(ui8Dot-1)]=0x2e; //小数点 } else//if(ui8Dot>pos+m) { ds=ui8Dot-(pos+1-m); //移位距离(既需要增加几个0) for(i=pos;i>=m;i--) { tempBuff[i+ds+2]=tempBuff[i]; //这里+2是为了增加前置:“0.” } for(i=0;i<ds;i++) { tempBuff[m+2+i]=0x30; //这里小数点后“补0操作” } tempBuff[m]=0x30; //添加前置 “0.” tempBuff[m+1]=0x2e; } } for(i=0;i<7;i++) { if(tempBuff[i]!='') { *p=tempBuff[i]; *p++; } else break; }}//-------------------//GrStringDraw(consttContext*pContext,constchar*pcString,longlLength,longlX,longlY,unsignedlongbOpaque)voidGrStringNumberCentered(consttContext*pContext,int16_tNumber,uint8_tui8Dot,uint8_tui8X,uint8_tui8Y){ uint8_tString[8]={0}; Num2String(Number,ui8Dot,String); GrStringDrawCentered(pContext,(constchar*)String,AUTO_STRING_LENGTH,ui8X,ui8Y,OPAQUE_TEXT);}#ifdefined(__TI_COMPILER_VERSION__)||defined(__IAR_SYSTEMS_ICC__)#pragmavector=ADC12_VECTOR__interrupt#elifdefined(__GNUC__)__attribute__((interrupt(ADC12_VECTOR)))#endifvoidADC12ISR(void)//adc12a中断函数{staticuint8_tindex=0;volatileuint8_ti;switch(__even_in_range(ADC12IV,34)){case0:break;//矢量0: 无case2:break;//矢量2: ADC溢出case4:break;//矢量4: ADC时序溢出case6://矢量6: ADC12IFG0//Moveresultsresults[index]=ADC12_A_getResults(ADC12_A_BASE,ADC12_A_MEMORY_0);index++;if(index==Num_of_Results){ adc_filter=0; for(i=0;i<Num_of_Results;i++) adc_filter+=results[i]; adc_filter>>=4;index=0;}case8:break;//Vector8:ADC12IFG1case10:break;//Vector10:ADC12IFG2case12:break;//Vector12:ADC12IFG3case14:break;//Vector14:ADC12IFG4case16:break;//Vector16:ADC12IFG5case18:break;//Vector18:ADC12IFG6case20:break;//Vector20:ADC12IFG7case22:break;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 语文高考知识点
- XXXX-10情商与领导力1
- 药品生物技术专业大纲+样卷+参考答案
- 速写课件文案范文
- CPSM文化建设试题及答案探讨
- 2025年煤炭行业发展前景分析:构建统一数据标准体系
- 2025年离婚协议书两儿一女模板
- 第三单元 统计 平均数的应用(教案)五年级上册数学沪教版
- 2025年度无房产证房产交易资金监管买卖合同
- 二零二五年度工地食堂员工福利保障承包协议
- 护理学专业教师与学生
- 人工智能设计伦理知到智慧树章节测试课后答案2024年秋浙江大学
- 钢制内浮盘施工方案
- 招聘与录用(第3版)课件 第6章 面试
- 成人脑室外引流护理-中华护理学会团体 标准
- 我国刑事诉讼法第四次修改的基点与面向
- 机台验收报告模板
- 智能化钢筋加工施工方案研究
- 急诊与灾难医学第四章呼吸困难
- 《平台经济从业者职业伤害保障制度研究》
- 讴歌改革开放的现代诗词
评论
0/150
提交评论