资源描述:
《简易数字电压表实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、简易数字电压表设计实验报告姓名陈秀秀学号201203870404指导教师贾立新专业班级电气1202学院信息工程学院•实验要求采用C8051F360单片机最小系统设计一简易数字电压表,实现对0~3・3V直流电压的测量,原理框图如图3-1所示。模拟输入电压通过一只1kQ电位器产生,ADCO将模拟电压转换成数字量后换算成电压值,用十进制的形式在LCD上显示。进一步,将单片机最小系统与PC通过RS-232通信电缆连接,将A/D转换的数字量在PC终端显示。lkQ图3-1二.实验设计设计方案:曲主程序、TO中断服务程序、ADCO中断服务程序组成。具
2、体流程图如下图3-2所示。图3-2三•具体设计1.简易数字电压表设计F360初始化及LCD初始化(详细程序代码见附录)①内部振荡器初始化:Osclnit()②I/O端口初始化:Portlolnit()③外部数据存储器接口初始化:Xramlnit()④定时器初始化:Timerlnit()⑤中断系统初始化:IntOInit()@ADC0初始化:ADC_Init()⑦PCA初始化:Pcalnit()2.屯压转换方式(将电压转换为十进制)ADCDAT二ADC0H*256+ADC0L;VOUT=ADCDAT*2.4/1024=ADCDAr*0.0
3、02344;VOETOUT=VOET*1000;for(i=0;i<4;i++){VOLTBCD[i]=VOLTOUT%10;voutout=voutout/io;}3.LCD显示程序设计①检查LCD是否空闲子程序voidCheckLcd(){uchartemp=0x00;ucharxdata*addr;while(l){addr=RCOMADDR;temp=*addr;temp&=0x80;if(temp==OxOO)break;②电压值显示WriteCom(0x9C);WriteData(VOLTBCD⑶+0x30);WriteDa
4、ta(0x2E);WriteData(VOLTBCD[2]+0x30);WriteData(VOETBCD[2]+0x30);WriteData(VOLTBCD
5、0
6、+0x30);WriteData(0x56);4•实验屮AD转换方式选用逐次逼近型,A/D转换完成后得到10位数据分为高低字节存放在寄存器ADCOH和ADC0L中,此处选择右对齐,转换时针为2MHZo5.选择内部参考电压2.4伏为基准(在实际单片机调试中改为3.311伏),止端接P2.0,负端接地。四•实验数据测量V(测量)0.0000.3720.5230.7240.980
7、13261.7922.220V(实际)0.000.380.53.0730.991.331.792.23结论:校准后,测量数据与实际电压误差小于0.01,符合实验精度要求.五.代码附录#include#defineucharunsignedchar〃写命令寄存器的地址〃写数拯寄存器的地址〃读命令寄存器的地址#defineuintunsignedint#defineWCOMADDR0xC008#defineWDATADDR0xC009#defineRCOMADDROxCOOA#defineRDATADDROxCOO
8、B#defineKEYCSOxCOOC〃读数据寄存器的地址〃读键盘的地址ucharcodehanzi[]={0xbc,0xf2,0xd2,0xd7,0xca,0xfd,0xd7,0xd6,0xb5,0xe7,0xd1,0xb9,0xb1,Oxed};〃“简易数字屯压表"ucharcodekeynum[]="键值";〃软件计数器ucharcodekeyc[]="次数”;uchartime=();floatVOLT;uintVOLTBCD[4];uintADCDAT,VOLTOUT;ucharkeyn,keycode;voidOsclnit
9、();〃内部振荡器初始化voidPortlolnit();//I/O端口初始化voidXramlnit();〃外部数拯存储器接口初始化voidPcalnit();//PCA初始化(设置看门狗定时器的工作状态)voidInitDevice();〃内部资源初始化voidCheckLcd();〃检查LCD是否空闲子程序voidWriteCom(ucharn);//Led写指令子程序voidWriteData(ucharm);//Led写数拯子程序voidInsitiLcd();//Led初始化子程序voidDispHan(ucharcode*
10、a,ucharm,uchark);〃显示汉字了程序voidTimerlnit();〃定时器初始化voidInterruptslnit();〃屮断系统初始化voidADC_init();//ADC0初始化〃外