01 数字电压表设计 - 副本.doc_第1页
01 数字电压表设计 - 副本.doc_第2页
01 数字电压表设计 - 副本.doc_第3页
01 数字电压表设计 - 副本.doc_第4页
01 数字电压表设计 - 副本.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西安建筑科技大学课程设计(论文)任务书专业班级: 电子信息工程1201班 学生姓名: 杨超 指导教师(签名): 1、课程设计(论文)题目数字电压表设计2、本次课程设计(论文)应达到的目的课程设计的基本教学目的是培养学生综合运用所学的基础理论、专业知识和基本技能,提高分析与解决实际问题的能力以及科技写作或设计能力。要求学生在做课程设计的过程中要有意识地培养自己的实际能力。通过本次课程设计的实践,了解单片机工作的原理及应用技术,掌握根据硬件电路设计软件的方法,了解设计过程中的各个基本环节,也为今后的实际应用奠定基础。3、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等) 设计任务:以单片机为核心,设计一个数字电压表。完成原理图设计,软件编制及设计报告。具体要求如下:1) 对1路模拟信号连续采集16次,取平均值。2) 分别设定每一路的上限值,如采集的平均值超过上限值,则对应通道的指示灯闪烁10次后一直亮,并发出声音以示警告。设计步骤:1) 按照任务书的要求完成系统需求分析及功能定义。2) 完成原理图设计。3) 完成软件设计。4) 完成代码编写。5) 进行系统仿真调试。6) 撰写设计报告。4、应收集的资料及主要参考文献 1)单片机原理及应用 西安电子科技大学出版社 李建忠2)基于Proteus的单片机应用技术 电子工业出版社 江世明5、审核批准意见教研室主任(签字) 第 23 页 共 23 页 摘要在电子器件设计中,以单片机作为控制核心的系统得到了广泛的应用,尤其以MCS-51最为普遍。而数字电压表的基本原理是对直流电压进行模数转换,并将其结果用数字直接显示出来。为以单片机为控制核心实现数字电压表的设计,结合了模数转换技术,段码显示以及液晶显示,并结合ADC0809芯片及74HC573,进而实现了对5V以内的直流电压的准确测量,并在数码管以及液晶显示屏上同时显示。并进一步扩展,实现了最多可以对八路电压同时进行测量。而且对于超出测量范围的电压能够以LED灯的闪烁实现报警。关键词:MSC-51,ADC0809,数字电压表,数模转换 LCD目录 1、总体方案与设计思路-6 2、原设计Proteus原理图-6 3、电路原理图-7 4、PCB版图-7 5、软件设计-8 6、课程设计总结心得体会-22 7.收集的资料及主要参考文献-231、总体方案与设计思路:系统主要功能:1、ADC转换;2、数据处理,包括乘除法;3、格式转换,二进制转十进制;4、LCD显示。电路设计思路:本次课程设计使用的单片机为STC12C5A60S2增强型单片机,带有ADC转换器,为8路电压输入型。输入口为P1口。P1口既可以设为I/O口,又可以设为A/D转换口。本次设计使用P1.0做为AD转换输入口,输入电压经一个10K限流电阻连接P1.0口,输入电压为系统电压,经一滑动变阻器接接到P1.0口。 LCD的数据/命令输入端口接下单片机的P0口,P0口接上一个1K的排阻作为上拉电阻。LCD的RS(数据/命令选择端4引脚)、RW(读写选择端5引脚)、E(使能信号端6引脚)分别接于P2的P2.0、P2.1、P2.2。四个轻触开关分别接在P2的4、5、6、7口。2、原设计Proteus原理图在以上电路中必须加入3.5mm电源插座和电源开关。3、电路原理图;4、PCB版图;5、软件设计:1)系统框图:输入电压ADC转换数据处理并送LCD显示 ADC转换:本次使用的单片机是带ADC转换的逐次比较型的ADC,ADC换口在P1口(P1.7-P1.0),有8路10位高速转换器。本次设计使用P1.0口作模拟电压输入,ADC将模拟电压转化为相应的数字量。 数据处理并LCD显示:ADC转换得到的二制数只是二进制数,还需要进一步处理得到十进数,并且进行精度处理,也就是课题要求的四位有效数据。对数据的处理按下工式式中D为ADC的转换的二进数,V为显示的数据。V设为浮点型数,乘以1000后强制转换为整型。则得到四位有效数据。再依次除于1000取商则得个位,取余除于100取商则得十分位,再取余除10则得百分位,取余则得千分位。将各位加0x30转化为ASCII码后送LCD显示。2)软件流程图子程序流程图主程序的流程图 Write_com()LCD写命令函数 write_data()LCD写数据函数Initlcd()LCD初始化函数 Initadc()ADC初始化函数 get_data()ADC启动函数 开始Resl=ADC_RESresl=(resl2)+ADC_RESLvin=resl*5.0/1023resl=( uint(vin*1000)分别取出现resl的个位、十位、百位、千位 转化成ASCII码并送LCD显示结果float vinuint resluchar ichange_data()数据处理并显示函数 delay()延时函数开始Resl=ADC_RESresl=(resl0x=zx0结束y-x-YNYN源程序#include#defineuchar unsigned char#define uint unsigned intsbit lcdrs=P20; /LCD数据/命令选择端sbit lcdrw=P21; / LCD读写控制端sbit lcden=P22;/LCD使能信号端uchar code table1=channel 0 (0-5V);/LCD第一行显示uchar code table2=voltage:0;/LCD第二行显示void delay(uint z);/函数声明void write_com(uchar com);void write_data(uchar date);void initlcd();void initadc();void get_data();void change_data();void main()/主函数EA=0;initlcd();initadc();while(1)get_data();P3=ADC_RES;change_data(); void delay(uint z)/延时函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-); void write_com(uchar com)/ LCD写命令函数lcdrs=0;P0=com;delay(10);lcden=1;delay(10);lcden=0;void write_data(uchar date)/LCD写数据函数 lcdrs=1; P0=date; delay(10); lcden=1; delay(10); lcden=0;void initlcd()/LCD初始化函数uchar num;lcden=0;lcdrw=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num16;num+)write_data(table1num);write_com(0x80+0x40);for(num=0;num9;num+)write_data(table2num);P3=0;void initadc()/ADC转换器初始化函数P1ASF = 0x01; ADC_RES=0;ADC_RESL=0; ADC_CONTR = 0x00;delay(5);AUXR1=0x00;void get_data()/ADC启动函数ADC_CONTR = 0x80;delay(5);ADC_CONTR |= 0x08;delay(5); while (!(ADC_CONTR &0x10 );ADC_CONTR=ADC_CONTR&0xef;delay(5); void change_data() /数据处理并显示函数 float vin;uint resl;uchar i;resl=ADC_RES;resl=(resl2)+ADC_RESL;vin=resl*5.0/1023;resl=(uint)(vin*1000);i=(uchar)(resl/1000);resl=resl%1000;i=i+0x30;write_com(0x80+0x48);write_data(i);write_data(.);i=(uchar)(resl/100);resl=resl%100;i=i+0x30;write_data(i);i=(uchar)(resl/10);i=i+0x30;write_data(i);i=(uchar)(resl%10);i=i+0ORG 0x30;write_data(i); MAIN:MOV DPTR,#TAB MOV R5,#71H LOOP:MOV A,#00H MOVC A,A+DPTR MOV P3,A ACALL DELAY ACALL DELAY INC DPTR DJNZ R5,LOOP LJMP MAINDELAY:MOV R7,#00H MOV R6,#00H DE:DJNZ R7,$ DJNZ R6,DE RET TAB:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH DB 0FFH,7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH DB 0FEH,0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H DB 80H,00H,80H,0C0H,0E0H,0F0H,0F8H,0FCH DB 0FEH,0FFH,7FH,3FH,1FH,0FH,07H,03H DB 01H,00H,01H,03H,07H,0FH,1FH,3FH DB 7FH,0FFH,7EH,3CH,18H,00H,18H,3CH DB 7EH,0FFH,0FEH,0FCH,0FCH,0F9H,0F3H,0E7H DB 0CFH,9FH,3FH,7FH,0FFH,7FH,3FH,9FH DB 0CFH,0E7H,0F3H,0F9H,0FCH,0FEH,0FFH DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H DB 80H,40H,20H,10H,08H,04H,02H,01H,00H DB 01H,02H,04H,08H,10H,20H,40H,80H,00H DB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH END2)LCD测试;编写LCD驱动程序,让LCD显示一段字符测试程序#include#define uchar unsigned char#define uint unsigned intuchar code table=lizhongmin;uchar code table1sbit lcdrs=P20; /LCD数据/命令选择端sbit lcdrw=P21;/读写控制端sbit lcden=P22;/使能控制端uchar num;void delay(uint z) /延时函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-); void write_com(uchar com)/LCD写命令函数lcdrs=0;P0=com;delay(10);lcden=1;delay(10);lcden=0;void write_data(uchar date) /LC写数据函数lcdrs=1;P0=date;delay(10);lcden=1;delay(10);lcden=0; void init() /LCD初始化lcden=0;lcdrw=0;write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01);write_com(0x80);void main() /主函数init();for(num=0;num10;num+)/显示第一行write_data(tablenum);delay(20); write_com(0x80+0x40);/显示第二行for(num=0;num11;num+)write_data(table1num);delay(20);while(1);测试结果:LCD第一行显示“oumeiqing”,第二行显示。3)数据处理:给一个二进制,代入计算公式转成电压送LCD显示。测试程序#include#define uchar unsigned char#define uint unsigned intsbit lcdrs=P20;sbit lcdrw=P21;sbit lcden=P22;void delay(uchar z) /延时函数uchar x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com) /LCD写命令函数lcdrs=0;P0=com;delay(10);lcden=1;delay(10);lcden=0;void write_data(uchar date) /LCD写数据函数lcdrs=1;P0=date;delay(10);lcden=1;delay(10);lcden=0;void initlcd() /LCD初始化 lcden=0; lcdrw=0; write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x01); write_com(0x80); void main() /主函数 float vin;uint resl;uchar i;initlcd();/LCD初始化resl=1023; /设一个十位二进制数vin=resl*5/1023.0;resl=(uint)(vin*1000);i=(uchar)(resl/1000);resl=resl%1000;i=i+0x30;write_com(0x80);write_data(i);write_data(.);i=(uchar)(resl/100);resl=resl%100;i=i+0x30;write_data(i);i=(uchar)(resl/10);i=i+0x30;write_data(i);i=(uchar)(resl%10);i=i+0x30; write_data(i);测试结果:当resl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论