




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简易数字电压表设计报告姓名:何绍金班级:自动化1202学号:201203870408指导教师:贾立新2014年11月26日设计题目采用C8051F360单片机最小系统设计一个简易数字电压表,实现对0~3.3V直流电压的测量。二.设计原理模拟输入电压通过实验板PR3电位器产生,A/D转换器将模拟电压转换成数字量,并用十进制的形式在LCD上显示。用一根杜邦实验线将J8口的0~3.3V输出插针与J7口的P2.0插针相连。注意A/D转换器模拟输入电压的范围取决于其所选择的参考电压,如果A/D转换器选择内部参考电压源,其模拟电压的范围0~2.4V,如果选择外部电源作为参考电压,则其模拟输入电压范围为0~3.3V。原理框图如图1所示。图1简易数字电压表实验原理框图设计方案1.设计流程图如图2所示。图2简易数字电压表设计A/D转换和计时流程图2.实验板连接图如图3所示。图3简易数字电压表设计实验板接线图3.设计步骤(1)编写C8051F360和LCD初始化程序。(2)AD转换方式选用逐次逼近型,A/D转换完成后得到10位数据的高低字节分别存放在寄存器ADCOH和ADC0L中,此处选择右对齐,转换时针为2MHZ。(3)选择内部参考电压2.4V为基准电压(在实际单片机调试中改为3.311V),正端接P2.0,负端接地。四、测试结果在0V~3.3V中取10组测试数据,每组间隔约为0.3V左右,实验数据如表1所示:显示电压(V)0.2060.5040.8051.0541.406实际电压(v)0.2100.5100.8121.0611.414相对误差(%)1.9051.1760.8620.6590.565显示电压(V)2.0502.3832.6522.9353.246实际电压(v)2.0612.3912.6602.9433.253相对误差(%)0.4210.3340.3010.2720.215表1简易数字电压表设计实验数据(注:其中显示电压指LCD显示值,实际电压指高精度电压表测量值)五.设计结论1.LCD显示模块的CPLD部分由FPGA充当,芯片本身自带程序,所以这个部分不用再通过quartus软件进行编程。2.在参考电压选择过程中发现,单片机实际最大电压并不是2.4V而是3.3V,则在转换中将3.3V替换2.4V即可。3.开始时发现调节电阻之后,实际电压值改变但LCD显示电压值并没有发生改变,原因是:EC6仿真器没有开启并且每次KEIL重新开启后,要重新输入相应解码。附录:程序源代码(C语言)/*简易数字电压表*/#include<C8051F360.H>#defineucharunsignedchar#defineuintunsignedint#defineWCOMADDR 0xC008//写命令寄存器的地址#defineWDATADDR 0xC009//写数据寄存器的地址#defineRCOMADDR 0xC00A//读命令寄存器的地址#defineRDATADDR 0xC00B//读数据寄存器的地址#defineKEYCS0xC00Cucharcodehanzi[]="简易数字电压表";ucharcodekeynum[]="键值";ucharcodekeyc[]="次数";uinttime=0;floatvolt;uintv[4];uintAT,voltage;ucharkeyn,keycode;voidOscInit(); //内部振荡器初始化 voidPortIoInit();//I/O端口初始化voidXramInit();//外部数据存储器接口初始化voidPcaInit(); //PCA初始化(设置看门狗定时器的工作状态)voidInitDevice();//内部资源初始化voidCheckLcd(); //检查LCD是否空闲子程序voidWriteCom(ucharn); //Lcd写指令子程序voidWriteData(ucharm); //Lcd写数据子程序voidInsitiLcd(); //Lcd初始化子程序voidDispHan(ucharcode*a,ucharm,uchark);//显示汉字子程序voidTimerInit();//定时器初始化voidInterruptsInit();//中断系统初始化voidADC_init();//ADC0初始化详见书本P144voidInt0Init();//外部中断初始化voidmain(){uchari;InitDevice(); //F360初始化InsitiLcd(); //LCD模块初始化ADC_init();DispHan(hanzi,0x90,0x0e); //显示“键盘显示测试程序”AD0BUSY=1;while(1){if(TF0==1){ TF0=0; TL0=0xf0; TH0=0xd8;//重置时间常数10ms time++; } if(time>=49) { time=0; AT=ADC0H*256+ADC0L; volt=AT*0.003234; voltage=volt*1000; for(i=0;i<4;i++) { v[i]=voltage%10; voltage=voltage/10; } WriteCom(0x8d); WriteData(v[3]+0x30); WriteData(0x2e); WriteData(v[2]+0x30); WriteData(v[1]+0x30); WriteData(v[0]+0x30); TR0=1; AD0BUSY=1; }}}voidReadKey()interrupt0{ ucharxdata*addr; ucharc1,c2; addr=KEYCS; keycode=*addr; keycode&=0x0F; keyn++; DispHan(keynum,0x88,0x04); WriteCom(0x8b); if(keycode<10) { WriteData(0x30); WriteData(keycode+0x30); } else { c1=keycode%10; c2=keycode/=10; WriteData(c2+0x30); WriteData(c1+0x30); } DispHan(keyc,0x98,0x04); WriteCom(0x9b); if(keyn==10) keyn=0; WriteData(keyn+0x30); }voidInt0Init(){ EA=1; IT01CF=0x05; EX0=1; IT0=1; }voidOscInit(void) //内部振荡器初始化 { SFRPAGE=0x0f; //选择特殊功能寄存器页地址 OSCICL=OSCICL+4; OSCICN=0xc2; //允许内部振荡器,频率除2作为SYSCLK=12MHz CLKSEL=0x00; //选择内部振荡器 SFRPAGE=0x00; }voidADC_init() { ADC0CF=0x28;//选择内部参考电压2.4V为基准 ADC0CN=0x80;//正端接P2.0 AMX0P=0x08;//负端接地 AMX0N=0x1F;//右对齐,转换时针为2MHZ REF0CN=0x08;//写AD0BUSY启动A/D转换器 }voidTimerInit() { TMOD=0x01; TH0=0xd8; TL0=0xf0; TR0=1; }voidInterruptsInit(void) { EA=1; ET0=1; EX0=1; PX0=1; IE0=0; }voidPortIoInit(void) //I/O口初始化{ SFRPAGE=0x0f; P0MDIN=0xe7; //P0.3、P0.4模拟量输入 P0MDOUT=0x83; //P0.0、P0.1、P0.7推拉式输出 P0SKIP=0xf9; //P0.1、P0.2被交叉开关跳过 P1MDIN=0xff; //P1设置为数字量输入 P1MDOUT=0xff; //P1设置为推拉式输出 P1SKIP=0xff; //P1被交叉开关跳过 P2MDIN=0xff; //P2设置为数字量输入 P2MDOUT=0xff; //P2设置为推拉式输出 P2SKIP=0xff; P3MDIN=0xff; //P3设置为数字量输入 P3MDOUT=0xff; //P3设置为推拉式输出 P3SKIP=0xff; P4MDOUT=0xff; //P4.5设为OC输出,其余推拉式输出 XBR0=0x01; //使能UART XBR1=0xC0; //禁止弱上拉,交叉开关允许 SFRPAGE=0x00; return; }voidXramInit(void) //外部数据储存器初始化 { SFRPAGE=0x0f; EMI0CF=0x07; //引脚复用方式 SFRPAGE=0x00; return; }voidPcaInit(void) //PCA初始化 { PCA0CN=0x40; //允许PCA计数器/定时器 PCA0MD=0x00; //禁止看门狗定时器 return; }voidInitDevice(void) { OscInit(); PortIoInit(); XramInit(); //SmbInit(); //UartInit(); ADC_init(); TimerInit(); InterruptsInit(); Int0Init(); PcaInit(); return; }voidCheckLcd(){uchartemp=0x00; ucharxdata*addr; while(1) { addr=RCOMADDR; temp=*addr; temp&=0x80;if(temp==0x00) break; }}voidWriteCom(ucharn){ ucharxdata*addr; CheckLcd(); addr=WCOMADDR; *addr=n;}voidWriteData(ucharm){ ucharxdata*addr; CheckLcd(); addr=WDATADDR; *addr=m;}voidInsitiLcd() { WriteCom(0x30);//设为基本指令集 WriteCom(0x01); //清屏 WriteCom(0x0c); //开整体显示 }voidDispHan(ucharcode*a,ucharm,uchark) // 书本177页有详细解释{ uchardat,i,j,length; length=k/2; WriteCom(m);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农职大的新质生产力
- 建筑设计中的新质生产力
- 初中学校庆祝教师节主题班会方案年
- 圆轴扭转横截面上的内力
- 2025年康复医学康复方案设计验收答案及解析
- 2025年感染性疾病防控院内感染防治模拟考试卷答案及解析
- 2025年肿瘤放疗后护理指导案例分析试卷答案及解析
- 2025年放射治疗技术操作规范模拟考试卷答案及解析
- 2025年全科医生每日一题模拟考试答案及解析
- 2025年影像学磁共振成像基本原理考核答案及解析
- 振动型式试验报告范本
- 草木染色的工艺及步骤
- 网络传播概论(彭兰第5版) 课件全套 第1-8章 网络媒介的演变-网络传播中的“数字鸿沟”
- 蚂蚁搬家游戏活动方案设计
- 配电终端功能构造
- 融资风险评估报告
- 画法几何及土木工程制图课件
- 第2课 树立科学的世界观《哲学与人生》(高教版2023基础模块)
- 2023免拆底模钢筋桁架楼承板图集
- 云计算技术基础应用教程(HCIA-Cloud)PPT完整全套教学课件
- 成人学士学位英语1000个高频必考词汇汇总
评论
0/150
提交评论