单片机原理及应用 课程设计报告书
题 目:简易数字电压表的设计 姓 名: 汪 剑
专 业:电气工程及其自动化 设计时间:2012 年 11 月
电子与信息工程学院
目 录
1. 引 言 ................................................. 1
1.1. 设计意义 ........................................ 1
1.2. 系统功能要求 .................................... 1
2. 方案设计 .............................................. 2
2.1. 功能要求及设计目标 ................................. 1
2.2. 系统设计方案 .................................... 1
3. 硬件设计 .............................................. 5
4. 软件设计 .............................................. 6
5. 系统调试 .............................................. 7
6. 设计总结 .............................................. 8
7. 附 录A;源程序 ....................................... 9
8. 附 录B;作品实物图片 ................................. 12
9. 主要参考文献 ......................................... 13
简易数字电压表的设计 单片机原理及应用课程设计
简易数字电压表的设计
1. 引 言
1.1. 设计意义 目前,单片机已经在测控领域中获得了广泛的应用,它除了可以测量电信以外,还可以用于温度、电压的测量,能独立工作的单片机电压测量、控制系统已经广泛应用很多领域。
单片机是一种特殊的计算机,它是在一块半导体的芯片上集成了CPU,存储器,
RAM,ROM,及输入与输出接口电路,这种芯片称为:单片机。由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便的优点,使它迅速的得到了推广应用,目前已成为测量控制系统中的优选机种和新电子产品中的关键部件。单片机已不仅仅局限于小系统的概念,现已广泛应用于家用电器,机电产品,办公自动化用品,机器人,儿童玩具,航天器等领域。 本次课程设计,就是用单片机实现电压测量,传统的电压测量工具读取数据误差大,本次采用ADC0809A/D模数转换系统来实现基于52单片机的数字电压表的设计。
传统的数字电压表读数麻烦、测量精度不高、误差大等缺点而下面利用集成A/D数模转换设计并制作了一款基于STC89C52的4位数码管显示的数字电压表,其电路简单,软硬件结构模块化,易于实现。
1.2. 功能要求
简易数字电压表可以测量0~5V范围内的8路输入电压值,并在4位LED数码管上轮流显示或者单路选择显示。 测量最小分辨率为 0.02V。
1
简易数字电压表的设计 单片机原理及应用课程设计
2. 方案设计 2.1功能要求及设计目标
采用STC89C52作MCU,ADC0809(或其他芯片)进行AD转换,测量电压
的范围为直流0-5V电压,四位数码管显示。
2.2系统设计方案
(1)STC89C52主要具有如下特点:
1. 增强型 8051 单片机,6 时钟/机器周期和 12 时钟/机器周期可以任 意选择,
指令代码完全兼容传统 8051.
2. 工作频率范围:0~40MHz,相当于普通 8051 的 0~80MHz,实际工 作频
率可达 48MHz 3. 通用 I/O 口 (32 个) 复位后为: , P1/P2/P3/P4 是准双向口/弱上拉, P0
口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需
加上拉电阻。
4. ISP(在系统可编程)/IAP(在应用可编程) ,无需专用编程器,无 需专用仿
真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片
5. 外部中断 4 路,下降沿中断或低电平触发电路,Power Down 模式可 由外部
中断低电平触发中断方式唤醒
6. 通用异步串行口(UART) ,还可用定时器软件实现多个 UART
按系统功能实现要求,决定选择STC89C52单片机作为数字电压表设计的控制
系统。
2
简易数字电压表的设计 单片机原理及应用课程设计
STC89C52单片机引脚图
(2)数模转换芯片: ADC0809是采样分辨率为8位的、以逐次逼近原理进行模—数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换,转换时间为100μs。采用ADC0809作为数模转换芯片。
3
简易数字电压表的设计单片机原理及应用课程设计ADC0809 引脚图(3)系统硬件设计 1 选择 STC89C52 作为控制芯片 2 选择 ADC0809 芯片来进行模数转换 3 选择 GEM5461GE 四位一体的共阳数码管来显示数字 4 用 9012 三极管来作为驱动电路,使 GEM5461GE 四位一体的共阳数码工作. 5 用 SW1 按键作为复位按键,实现复位电路的功能。 根据功能要求,设计出如下数字系统方案方框图。上电复位串口通信4位LED显示 电源电路数字电压表系统设计方案框图4
简易数字电压表的设计 单片机原理及应用课程设计
3. 硬件系统设计
硬件设计各模块电路图及原理描述;
(1)硬件设计原理:电阻R11上的电压经过ADC0809芯片进行模数转换后,STC89C52芯片的P1口连接到驱动电路,当驱动电路工作使数码管显示前面转换过来的数字。
(2)复位电路和晶振电路的设计:在接通电源后,当按下SW1后STC89C52不工作,使数码管全部变暗,当SW1一松开后STC89C52工作,数码管又变亮。晶振电路中的两个30pF的电容具有微调的作用。
(3)A/D转换由集成电路ADC0809完成。ADC0809具有8路模拟输入端口,地址线(第23~25脚)可决定对哪一路模拟输入作A/D转换。
(4)单片机的P1、p3.0~p3.3端口作为4位LED数码管显示控制。P3.5端口用作单路显示/循环显示转换按钮,p3.6端口用作单路选择显示的通道。P0端口用作A/D转换数据读入。P2端口用作ADC0809的A/D转换控制
5
简易数字电压表的设计 单片机原理及应用课程设计
4. 软件设计
4.1软件设计流程图
图一.主程序流程图
图二.A/D转换测量子程序流程图
6
简易数字电压表的设计 单片机原理及应用课程设计
4.2软件设计描述
4.2.1 初始化程序
系统上电时,初始化程序主要用来执行70H~77H内存单元清0和P2口置0等准备工作。
4.2.2 主程序
在刚上电时,系统默认为循环显示8个通道的电压值状态。当进行一次测量时,将显示每一通道的A/D转换值,每个通道的数据显示时间在1s左右。主程序在调用显示子程序与测量子程序之间循环。
主程序流程图如上图一所示。
4.2.3 显示子程序
显示子程序采用动态扫描法实现4位数码管的数值显示。测量所得的A/D转换数据放在70H~77H内存单元中,测量数据在显示时须经过转换为十进制BCD码放在78H~7BH单元中,其中7BH存放通道标志数。寄存器R3用作8路循环控制,R0用作显示数据地址指针。
4.2.4 A/D转换测量子程序
A/D转换测量子程序用来控制对ADC0809的8路模拟输入电压的A/D转换,并将对应的数值移入70H~77H内存单元。
A/D转换测量子程序程序流程图如上图二所示。
5. 系统调试
介绍所设计的系统调试过程、在调试中遇到的问题及解决的办法。
采用Wave或Keil C51编译器进行源程序编译及仿真调试,同时进行硬件电路板的设计制作,烧录好程序后进行软硬件联调,最后进行端口电压的对比测试。测试对比表如下所示。
简易数字电压表与“标准”电压表对比测试表
7
简易数字电压表的设计 单片机原理及应用课程设计
从上表中可以看出,简易数字电压表与“标准”数字电压表测得的绝对误差均在0.02V以内,这与采用8位A/D转换器所能达到的理论误差精度相一致,在一般的应用场合可无、安全满足要求。
硬件调试比较简单,首先检查电路的焊接是否正确,然后用万用表测试。软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、从程序的编写和调试。
6. 设计总结 在这次对简易数字电压表设计中,让我了解和学习到了设计硬件电路的过程和软件程序的编写,也让我了解了关于电压表的原理与设计理念,。通过这次学习,让我对各种电路都有了大概的了解以及提高了我对单片机的学习,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。除了学会了许多专业知识外,还教会了我如何学习。在硬件的连接和软件的编写中,遇到遇到困难时,首先是想了想,是在不懂的就积极地去请教我的指导老师,也得到了很多经验,当然,我也看现有的教材、去图书馆查阅资料、去网上搜索相关信息,以这些方式,来大大增强了自我的自学能力和独立能力。更重要的是,一次设计性实验,却大大我拓展了我的思路,开阔了我的视野,活跃了我的思想。
而且还让我认识到了 这次课程设计不仅使我们对相关专业知识有了更深的理解,
理论知识对工作实践的重大意义,学会理论联系实际是一种很好的学习方法。课程设计要求我们完全依靠自己的能力去学习和设计,而不是像以往课程那样一切由教材和老师安排。因此,它给了我更大的发挥空间,可以让我发挥主观能动性独立的查阅资料、寻找数据、设计实验方案,并将理论知识应用到实践中去。同时,让我懂得红外线在生活中的广泛应用。通过这次设计提高了我认识问题、分析问题、解决问题的能力。总之,这次设计既是对我课程知识的考核,又是对我思考问题、解决问题能力的考核,更是对我学儿而所用的一种考验,让我从中学到了许多东西 。
致谢:
这次能顺利按时而且可以很好的完成课程设计,非常感谢我的指导老师和我的搭档,是他们的耐心指导和讲解,使我能够顺利的完成课程设计。在我的设计工作中无不倾注着你们辛勤的汗水和心血。老师的严谨治学态度、渊博的知识、无私的奉献精神使我深受启迪。从尊敬的老师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。在此我要向我的导师说声“老师您辛苦了!”最后我致以最衷心的感谢和深深的敬意.
8
简易数字电压表的设计 单片机原理及应用课程设计
7. 附 录A:源程序
源程序代码(主要语句要有注释)。
/*使用AT89C52单片机,12MHZ晶振,P0口读入AD值,P2口作AD控制,用共阳LED数码管
P1口输出段码,P3口扫描,最高位指示通道(0-7)。*/
#include "reg52.h" //52系列单片机定义文件
#include "intrins.h" //调用_nop_();延时函数用
#define ad_con P2 //AD控制口
#define addata P0 //AD数据计入读入口
#define Disdata P1 //显示数据段码输出口
#define uchar unsigned char//无符号字符(8位)
#define uint unsigned int //无符号整数(16位)
sbit ALE=P2^3; //锁存地址控制位
sbit START=P2^4; //启动一次转换位
sbit OE=P2^5; //0809输出数据控制位
sbit EOC=P3^7; //转换结束标志位
sbit DISX=Disdata^7; //LED小数点
//
//
uchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/* 共阳七段LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" */ uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //四位列扫描
控制字
uchar data ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//定义8个数据内
存单元
uint data dis[5]={0x00,0x00,0x00,0x00,0x00}; //定义4个显示数据单元、1个数据
暂存单元
//
//
/********1毫秒延时子函数**********/
delay1ms(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
9
简易数字电压表的设计 单片机原理及应用课程设计
//
//
/***********显示扫描子函数**********/
scan()
{
uchar k,n;
int h;
dis[3]=0x00; //通道初值为0
for(n=0;n<8;n++) //每次显示8个数据
{
dis[2]=ad_data[n]/51; //测得值转换为三位BCD码,最大为5.00V
dis[4]=ad_data[n]%51; // 余数暂存
dis[4]=dis[4]*10; //计算小数第一位
dis[1]=dis[4]/51; //
dis[4]=dis[4]%51; //
dis[4]=dis[4]*10; //计算小数第二位
dis[0]=dis[4]/51; //
for(h=0;h<500;h++) //每个通道值显示时间控制(约1秒)
{
for(k=0;k<4;k++) //四位LED扫描控制
{
Disdata=dis_7[dis[k]];
if(k==2){DISX=0;}
P3=scan_con[k];delay1ms(1);P3=0xff;
}
}
dis[3]++; //通道值加1
}
}
//
//
/*******0809AD转换子函数***********/
test()
{
uchar m;
uchar s=0x00;
ad_con=s;
for(m=0;m<8;m++)
{
ALE=1;_nop_();_nop_();ALE=0; //转换通道地址锁存
START=1;_nop_();_nop_();START=0; //开始转换命令
_nop_();_nop_();_nop_();_nop_(); //延时4微秒
while(EOC==0); //等待转换结束
OE=1;ad_data[m]=addata;OE=0;s++;ad_con=s;//取AD值,地址加1
10
简易数字电压表的设计 单片机原理及应用课程设计
}
ad_con=0x00; //控制复位
}
//
//
/**************主函数****************/
main()
{
P0=0xff; //初始化端口
P2=0x00;
P1=0xff;
P3=0xff;
while(1)
{
scan(); //依次显示8个通道值一次
test(); //测量转换一次
}
}
//
//
//*********************结束**************************//
11
简易数字电压表的设计 单片机原理及应用课程设计
8. 附 录B:作品实物图片
图一 简易数字电压表不通电时的情况
12
简易数字电压表的设计 单片机原理及应用课程设计
图二 简易数字电压表通电时的情况
9. 附 录C:电子元器件清单
13
简易数字电压表的设计 单片机原理及应用课程设计
10. 参考文献
[1] 刘欣铭,张广斌.LED显示屏技术综述[J].黑龙江电力,2003, 25(4):294-296.
[2] 阳进.基于单片机的LED显示屏的汉字显示[J].中国科技信息,2005,(12):112.
[3] Mark Nelson著.潇湘工作室译.串行通信开发指南[M].中国水利水电出版社,2002.
[4] 王宜怀.单片机原理及其嵌入式应用教程[M].北京希望电子出版社,2002.
[5] 韩润萍,陈小萍.点阵LED显示屏控制系统[J].微计算机信息,2003,19(10):50-51.
[6] 康华光.电子技术基础 模拟部分(第五版)高等教育出版社,2006.1
[7] 康华光.电子技术基础 数字部分(第五版)高等教育出版社,2006.1
14