设计说明书数字电压表设计.docx
- 文档编号:18517849
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:22
- 大小:151.82KB
设计说明书数字电压表设计.docx
《设计说明书数字电压表设计.docx》由会员分享,可在线阅读,更多相关《设计说明书数字电压表设计.docx(22页珍藏版)》请在冰点文库上搜索。
设计说明书数字电压表设计
湖南科技大学
单片机课程设计
题目基于单片机的数字电压表设计
姓名杨德钊
学院机电电工程学院
专业测控技术与仪器
学号1003030304
指导教师
成绩
二〇一三年七月十五日制
目录
第一章设计题目与要求1
第二章ADC0809简介1
第三章硬件电路设计4
第四章系统程序设计与调试6
第五章结论16
参考文献17
第一章设计题目与目的
1.1设计题目
基于单片机的ADC0809模数转换电路及1602显示电路
1.2设计目的
1、掌握模数转换的方法及基本转换芯片的用法;
1、为了对单片机有更深入的了解;
2、锻炼动手能力,提升经验。
第二章ADC0808简介
逐次逼近型A/D转换器属于直接型A/D转换器,它能把输入的模拟电压直接转换为输出的数字代码,而不需要经过中间变量。
主要由比较器、环形分配器、控制门、寄存器与D/A转换器组成。
1、主要技术指标和特性
(1)分辨率:
8位。
(2)总的不可调误差:
ADC0808为±
LSB,ADC0809为±1LSB。
(3)转换时间:
取决于芯片时钟频率,如CLK=500kHz时,TCONV=128μs。
(4)单一电源:
+5V。
(5)模拟输入电压范围:
单极性0~5V;双极性±5V,±10V(需外加一定电路)。
(6)具有可控三态输出缓存器。
(7)启动转换控制为脉冲式(正脉冲),上升沿使所有内部寄存器清零,下降沿使A/D转换开始。
(8)使用时不需进行零点和满刻度调节。
2、ADC0808引脚功能
图2.1.1ADC0808引脚图
(1)IN0~IN7——8路模拟输入,通过3根地址译码线ADDA、ADDB、ADDC来选通一路。
(2)D7~D0——A/D转换后的数据输出端,为三态可控输出,故可直接和微处理器数据线连接。
8位排列顺序是D7为最高位,D0为最低位。
(3)ADDA、ADDB、ADDC——模拟通道选择地址信号,ADDA为低位,ADDC为高位。
地址信号与选中通道对应关系如表所示。
(4)VR(+)、VR(-)——正、负参考电压输入端,用于提供片内DAC电阻网络的基准电压。
在单极性输入时,VR(+)=5V,VR(-)=0V;双极性输入时,VR(+)、VR(-)分别接正、负极性的参考电压。
表2.1.1地址信号与选中通道的关系
地址
选中通道
ADDC
ADDB
ADDA
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
(5)ALE——地址锁存允许信号,高电平有效。
当此信号有效时,A、B、C三位地址信号被锁存,译码选通对应模拟通道。
在使用时,该信号常和START信号连在一起,以便同时锁存通道地址和启动A/D转换。
(6)START——A/D转换启动信号,正脉冲有效。
加于该端的脉冲的上升沿使逐次逼近寄存器清零,下降沿开始A/D转换。
如正在进行转换时又接到新的启动脉冲,则原来的转换进程被中止,重新从头开始转换。
(7)EOC——转换结束信号,高电平有效。
该信号在A/D转换过程中为低电平,其余时间为高电平。
该信号可作为被CPU查询的状态信号,也可作为对CPU的中断请求信号。
在需要对某个模拟量不断采样、转换的情况下,EOC也可作为启动信号反馈接到START端,但在刚加电时需由外电路第一次启动。
(8)OE——输出允许信号,高电平有效。
当微处理器送出该信号时,ADC0808/0809的输出三态门被打开,使转换结果通过数据总线被读走。
在中断工作方式下,该信号往往是CPU发出的中断请求响应信号。
3、ADC0808内部结构图
逐次逼近型A/D转换器ADC0808由八路模拟开关、地址锁存与译码器、比较器、D/A转换器、寄存器、控制电路和三态输出锁存器等组成。
其内部结构如图所示。
图2.1.2ADC0808内部结构
4、工作时序与使用说明
图2.1.3ADC0808工作时序
ADC0808/0809的工作时序如图所示。
当通道选择地址有效时,ALE信号一出现,地址便马上被锁存,这时转换启动信号紧随ALE之后(或与ALE同时)出现。
START的上升沿将逐次逼近寄存器SAR复位,在该上升沿之后的2μs加8个时钟周期内(不定),EOC信号将变低电平,以指示转换操作正在进行中,直到转换完成后EOC再变高电平。
微处理器收到变为高电平的EOC信号后,便立即送出OE信号,打开三态门,读取转换结果。
第三章系统设计
3.1系统软件设计
从以上分析可知。
ADC0808有8个模拟通道,本文的模拟量从0通道输入,由ADC0808的模拟通道地址表可知,电路中应当把ADDC、ADDB、ADDA三个引脚全部接高电平。
根据ADC0808的工作时序图可知,START引脚在一个高电平后启动A/D转换,当EOC引脚出现一个低电平时转换结束,然后由OE引脚控制,从并行输出端读取一个字节的转换结果。
转换后的结果为0x00-0xFF,转换过程中芯片所需的时钟信号由单片机定时器中断子程序提供。
具体硬件结构图如图所示:
图3.1系统硬件连接图
3.2系统软件设计
根据需要,可将系统软件按照功能划分为3个模块,分别是主程序模块、A/D转换模块、液晶显示模块。
编写系统软件时,可首先编写各模块的底层驱动程序,而后是系统联机调试,最后编写上层主程序。
主程序设计
主程序主要负责初始化工作:
设置定时器、寄存器的初值,启动A/D转换,读取转换结果,处理量程转换响应,控制液晶实时显示等,其流程图如图3.2所示。
图3.2主程序流程图
2、A/D转换程序
图3.3A/D转换程序流程图
A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。
当系统设置好后,单片机扫描转换结束管脚P3.6的输入电平状态,当输入为高电平则转换完成,将转换的数值转换并显示输出。
若输入为低电平,则继续扫描。
程序流程图如图3.3所示。
第四章系统程序设计与调试
在设计的过程中考虑到单片机的灵活性,设计了最小系统,然后接上扩展排针,用杜邦线连接,便于以后再重复利用。
设计的时候考虑到有时候没有1602LCD显示模块,又设计了四位一体共阳极数码管显示程序,双程序备份,方便以后操作,更通用,更经济实惠。
1、共阳极数码管显示原程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitCS0=P2^0;
sbitCS1=P2^1;
sbitCS2=P2^2;
sbitCS3=P2^3;
sbitCLK=P3^1;
sbitSTART=P3^7;
sbitEOC=P3^6;
sbitOE=P3^0;
uintdate,temp;
uchardispbuf[4];
ucharcodedispvolt[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/*****************延时函数*******************/
voiddelay(ucharms)
{
uchari;
while(ms--)
{
for(i=40;i>0;i--);
}
}
/*****************读取ADC转换结果************/
voidADC_read()
{
START=0;
START=1;
_nop_();
START=0;//初始化ADC0808
while(!
EOC);//判断是否转换完成
OE=1;
delay(4);
date=P1;
OE=0;
}
/***************数据处理*********************/
voidADC_volt()
{
temp=date*5000.0/256;
dispbuf[0]=temp%10;
dispbuf[1]=temp%100/10;
dispbuf[2]=temp%1000/100;
dispbuf[3]=temp/1000;
}
/***************数码管显示子函数*************/
voiddisp_volt()
{
CS0=1;CS1=0;CS2=0;CS3=0;
P0=dispvolt[dispbuf[3]]&0x7f;//第一个管子显示
delay(5);
P1=0xff;//消抖
CS0=0;CS1=1;CS2=0;CS3=0;
P0=dispvolt[dispbuf[2]];//第二个管子显示
delay(5);
P0=0xff;//消抖
CS0=0;CS1=0;CS2=1;CS3=0;
P0=dispvolt[dispbuf[1]];//第三个管子显示
delay(5);
P0=0xff;//消抖
CS0=0;CS1=0;CS2=0;CS3=1;
P0=dispvolt[dispbuf[0]];//第四个管子显示
delay(5);
P0=0xff;//消抖
}
/***************中断子程序**************/
voidTimer0()interrupt1
{
CLK=~CLK;
}
/************主函数******************/
voidmain()
{
TMOD=0x02;//定时器T0模式2
TH0=0x10;
TL0=0x10;
TR0=1;
EA=1;
ET0=1;
P2=0xff;
while
(1)
{
ADC_read();
ADC_volt();
disp_volt();
}
}
显示效果
2用LCD1602显示
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitCLK=P3^1;
sbitSTART=P3^7;
sbitEOC=P3^6;
sbitOE=P3^0;
sbitrs=P2^0;//LCD的数据/命令选择端
sbitrw=P2^1;//LCD的读写选择端
sbite=P2^2;
sbitwarning=P3^2;//LED-RED端
sbitK1=P3^4;//设定键加
sbitK2=P3^5;//LCD的使能信号端
uchardis1[]={"vlot=V"};
uchardis2[]={"max=V"};
uintdate,temp,wdata=300;
/*****************延时函数*******************/
voiddelay(ucharms)
{
uchari;
while(ms--)
{
for(i=40;i>0;i--);
}
}
/*****************读取ADC转换结果************/
voidADC_read()
{
START=0;
START=1;
_nop_();
START=0;//初始化ADC0808
while(!
EOC);//判断是否转换完成
OE=1;
delay(4);
date=P1;
OE=0;
}
/***************中断子程序**************/
voidTimer0()interrupt1
{
CLK=~CLK;
}
/***************测试LCD忙碌**************/
ucharBusy_check(void)
{
ucharLCD_Status;
rs=0;
rw=1;
e=1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_Status=P0&0x80;
e=0;
returnLCD_Status;
}
/***************写数据到LCD**************/
voidlcd_wcmd(ucharcmd)
{
while(Busy_check());
rs=0;
rw=0;
e=0;
_nop_();
_nop_();
P0=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
e=1;
_nop_();
_nop_();
_nop_();
_nop_();
e=0;
}
voidlcd_pos(ucharpos)
{
lcd_wcmd(pos|0x80);
}
voidlcd_wdat(uchardat)
{
while(Busy_check());
rs=1;
rw=0;
e=0;
P0=dat;
_nop_();
_nop_();
_nop_();
_nop_();
e=1;
_nop_();
_nop_();
_nop_();
_nop_();
e=0;
}
voidLCD_disp(void)
{
uchari;
lcd_pos
(1);
i=0;
while(dis1[i]!
='\0')
{
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(0x41);
i=0;
while(dis2[i]!
='\0')
{
lcd_wdat(dis2[i]);
i++;
}
}
voidlcd_init(void)
{
lcd_wcmd(0x38);
delay
(1);
lcd_wcmd(0x0e);
delay
(1);
lcd_wcmd(0x06);
delay
(1);
lcd_wcmd(0x01);
delay
(1);
}
voidADC_volt()
{
temp=date*125.0/64;
dis1[10]=(temp%10+'0');
dis1[9]=(temp%100/10+'0');
dis1[8]=('.');
dis1[7]=(temp/100+'0');
dis2[10]=(wdata%10+'0');
dis2[9]=(wdata%100/10+'0');
dis2[8]=('.');
dis2[7]=(wdata/100+'0');
}
/*********************报警******************/
voiddeep(void)
{
uinti;
for(i=0;i<500;i++)
{
warning=1;
delay
(1);
warning=0;
delay
(2);
}
}
voidwarning_volt()
{
if(temp>wdata)
deep();
if(temp<=wdata)
warning=0;
}
/********************键盘扫描******************/
voidkey()
{
if(K1==0)
{
delay(15);
if(K1==0)
{
wdata+=10;
while(!
K1);
}
}
if(K2==0)
{
delay(15);
if(K2==0)
{
wdata-=10;
while(!
K2);
}
}
}
/************主函数******************/
voidmain()
{
TMOD=0x02;//初始化
TH0=0x10;
TL0=0x10;
TR0=1;
EA=1;
ET0=1;
lcd_init();//LCD初始化
while
(1)
{
ADC_read();//读取AD
ADC_volt();//数据处理
key();//键盘扫描
warning_volt();//报警
LCD_disp();//LCD显示
}
}
显示效果
第五章结论
这这一段时间的学习的亲自动手制作的过程中我学习的了很多。
许多东西看起来简单,做起来就没有那么简单。
凡事要亲自动手做做。
只有动手做了才知道自己的能力有多少,才知道自己学到了多少,还有多少没有学会。
动手实践是最检验自己的缺点的最好的途径。
在这几天的学习中,每个模块看起来似乎很简单,电路的设计也很容易实现,但是在写程序进行仿真调试的时候就是不能实现功能,这时候一定要有耐心一点点的去检查,改一点再编译调试,哪些语句有问题可以先试试把这句语句注释掉在继续编译一下。
有时候遇到不认识的错误可以利用网络,看看高手是怎么说的,这样能很快发现错误,及时改正。
有时候遇到实在不能解决的问题,不要再那里卡死了,也不要一遇到问题就向别人请教,一定要自己好好想想,发现问题的所在,自己先试着去解决。
如果自己还是不能解决这时候可以尝试想别人请教,过后自己一定要想清楚问什么,是怎么一回事。
这几天的动手练习让我学到了很多焊接电路的方法与技巧。
在遇到怎样布线的问题时,我及时到网上找相关的视频教学,通过几下练习,自己也马上上手。
焊的第一板子自己不知道是哪里的问题,检查不出,又重新焊接一个。
做第二个的时候我就有了经验了,先一个模块一个模块的做,每个模块做好了检查一遍看是不是好的,能用了再做下一个模块。
这样可以及时发现错误,也方便检查。
以后再继续用每一个模块也很方便的找出了。
在编写程序的时候,在资料上找了很多参考,基本上思路是一样的,多看看别人的编程思想控制方法和编程风格,为自己增加经验。
现在我还学的是基础的东西,基础最重要,一定要把基础打扎实,以后的路才好走。
单片机是智能控制的基础,这也是我很感兴趣的方面。
在这上面我仅仅话这点时间是不够的,要想把单片机搞通搞透彻,我以后的学识时间里必须还要再继续努力多下功夫。
现在多学习一点,以后我们的就业之路就好走一点。
所以现在珍惜有限的时间,多学习一点知识,增加自己的知识储备,多学习一点大多数人都没有学习的东西,以后自己就业的时候就比别人多一点点优势。
为了将来的幸福,现在一定要好好争取,把能抓的住的尽量抓住。
参考文献
[1]张毅坤,陈善久,裘雪红.单片微型计算机原理及应用[M].西安:
西安电子科技大学出版社,1998年;
[2]李学礼.基于Proteus的8051单片机实例教程[M].北京:
电子工业出版社,2008年;
[3]李华.单片机通用接口技术[M].北京:
北京航空航天大学出版社,1999;
[4]陈伯时.电力拖动自动控制系统[M].北京:
机械工业出版社,2003:
103—107;
[5]张毅刚彭喜元.MCS-51单片机应用设计[M].哈尔滨工业大学出版社.2003年;
[6]全润,张亚凡,邓洪敏.传感器原理及应用[M].北京:
清华大学出版社,2008年;
[7]冯雷星.基于单片机高性价比频率计的设计与实现[J].微计算机信息,2007,20(7):
85-86;
[8]杨宁王吴田蔚风等.高精度飞轮控制系统方案分析研究[J].航天控制,2004,22(3):
50一53;
[9]彭为,黄科,雷道仲.单片机典型系统设计实例精讲[M].北京:
电子工业出版社.2007年;
[10]周航慈.单片机应用程序设计技术[M].北京航空航天大学出版社,2002(11);
[11]徐爱钧.单片机原理实用教程—基于Proteus虚拟仿真[M].北京:
电子工业出版社.2009年;
[12]赵家贵主编.新编传感器电路设计手册.中国计量出版社.2002.9;
[13]余发山主编.单片机原理及应用技术.中国矿业大学出版社.2003.12.21-32;
[14]丁杰元主编.单片机微机原理及应用.机械工业出版社.1998.8;
[15]沙占友等主编.单片机外围电路设计.电子工业出版社.2003.1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 说明书 数字 电压表