单片机课程设计报告格式Word格式.docx
- 文档编号:21503892
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:17
- 大小:297.85KB
单片机课程设计报告格式Word格式.docx
《单片机课程设计报告格式Word格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告格式Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
本设计AT89S52单片机的一种电压测量电路,该电路采用ADC0809本文介绍一种基于A/D转换电路,测量范围直流0~5V的8路输入电压值,并在四位LED数码管上轮流显示或单路选择显示。
测量最小分辨率为0.02V,测量误差约为正负0.02V。
1.2.系统功能要求
设计简易数字电压表可以测量0~5V范围内的8路输入电压值,并在4
LED数码管上轮流显示或丹炉选择显示。
其测量最小分辨率为0.02V。
2.方案设计
按系统功能实现要求,决定控制系统采用AT89S52。
单片机,A/D转换采用ADC0809。
系统除能确保实现要求的功能外,还可以方便地进行8路其他A/D转换的测量和远程测量结果传送等扩展功能。
数字电压表系统设计方案如图:
框图简要介绍:
有单片机控制AD0809对电压信号进行采样,AD0809将采样结果传送到单片机有单片机对数据进行处理将结果通过4位LED显示出来。
3.硬件设计
硬件设计各模块电路图及原理描述;
3.1AT89S52介绍:
AT89S52是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89S52是一种带4K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器。
AT89S52单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图3-2所示。
AT89S52的引脚介绍:
89S52单片机多采用40只引脚的双列直插封装(DIP)方式,下面分别简单介绍。
(1)电源引脚
电源引脚接入单片机的工作电源。
Vcc(40引脚):
+5V电源。
GND(20引脚):
接地。
(2)时钟引脚
XTAL1(19引脚):
片内振荡器反相放大器和时钟发生器电路的输入端。
XTAL2(20引脚):
片内振荡器反相放大器的输出端。
图3-3电源接入方式
(3)复位RST(9引脚)
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
(4)
/Vpp(31引脚)
为外部程序存储器访问允许控制端。
当它为高电平时,单片机读片内程序存储器,在PC值超过0FFFH后将自动转向外部程序存储器。
当它为低电平时,只限定在外部程序存储器,地址为0000H~FFFFH。
Vpp为该引脚的第二功能,为编程电压输入端。
(5)ALE/
(30引脚)
ALE为低八位地址锁存允许信号。
在系统扩展时,ALE的负跳沿江P0口发出的第八位地址锁存在外接的地址锁存器,然后再作为数据端口。
为该引脚的第二功能,在对片外存储器编程时,此引脚为编程脉冲输入端。
(6)
(29引脚)
片外程序存储器的读选通信号。
在单片机读片外程序存储器时,此引脚输出脉冲的负跳沿作为读片外程序存储器的选通信号。
(7)pin39-pin32为P0.0-P0.7输入输出脚,称为P0口。
P0是一个8位漏极开路型双向I/O口。
内部不带上拉电阻,当外接上拉电阻时,P0口能以吸收电流的方式驱动八个LSTTL负载电路。
通常在使用时外接上拉电阻,用来驱动多个数码管。
在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,不需要外接上拉电阻。
(8)Pin1-Pin8为P1.0-P1.7输入输出脚,称为P1口,是一个带内部上拉电阻的8位双向I/0口。
P1口能驱动4个LSTTL负载。
(9)Pin21-Pin28为P2.0-P2.7输入输出脚,称为P2口。
P2口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash程序存储器编程时,接收高8位地址和控制信息。
在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。
而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(10)Pin10-Pin17为P3.0-P3.7输入输出脚,称为P3口。
P3口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能。
对内部Flash程序存储器编程时,接控制信息。
3.2ADC0809原理介绍:
ADC0809是8位的A/D转换器。
当输入电压为5.00V时,输出的数据值为255(0FFH),因此最大分辨率为0.02(5/255)。
ADC0808具有8路模拟量输入端口,通过3位地址输入端能从8路中选择一路进行转换。
如每隔一段时间依次轮流改变3位地址输入端的地址,就能依次对8路输入电压进行测量。
LED数码管显示采用软件译码动态显示。
通过按键选择可对8路循环显示,也可单路显示,单路显示可通过按键选择显示的通道数。
ADC0809采用逐次比较的方法完成A/D转换,由单一的+5V电源供电。
片内带有锁存功能的8路选1的模拟开关,由A、B、C的编码来决定所选的通道。
ADC0809完成一次转换需100μs左右,它具有输出TTL三态锁存缓冲器,可直接连接到AT89C51的数据总线上。
通过适当的外接电路,ADC0809可对0~5V的模拟信号进行转换。
3.3LED数码管的控制显示:
3.3.1LED数码管的模型
LED数码管模型如图3-6所示。
3.3.2LED数码管的接口简介
LED的段码端口A~G分别接至AT89S52的P1.0~P1.7口,位选端1~4分别接至P3.3、P3.2、P3.1、P3.0,如图3-7所示。
4.软件设计
软件设计流程图及描述
4.1主程序
主程序包含初始化部分、调用A/D转换子程序和相应外部0中断显示电压数值程序,初始化部分包含存放通道的缓冲区初始化和显示缓冲区初始化。
另外,对于单路显示和循环显示,系统设置了一个标志位00H控制,初始化时00H位设置为0,默认为循环显示,当它为1时改变为单路显示控制,00H位通过单路、循环按键控制。
流程图如图4-1所示。
4.2A/D转换子程序
A/D转换子程序用于对ADC0808的4路输入模拟电压进行A/D转换,并将转换的数值存入4个相应的存储单元中,A/D转换子程序每隔一定时间调用一次,即隔一段时间对输入电压采样一次,如图4-2所示。
4.3显示程序
设计中采用循环显示的方式来读取转换完成的数据能节省CPU的资源
当系统设置好后,数据转换完成,便会进入显示子,处理数据并送数码管显示输出。
LED数码管采用软件译码动态扫描的方式。
在中断程序中包含多路循环显示程序和单路显示程序,多路循环显示程序把4个存储单元的数值依次取出送到4个数码管上显示,每一路显示一秒。
单路显示程序只对当前选中的一路数据进行显示。
每路数据显示时需经过转换变成十进制BCD码,放于4个数码管显示缓冲区中。
单路或多路循环显示通过标志位00H控制。
在显示控制程序中加入了对单路或多路循环按键的判断。
5.系统调试
单片机焊好后进入了调试阶段。
调试中我遇到了很大的问题,由于源程序中没有添加按键程序所以我对源程序进行了修改,我第一次修改后整体现象是正确的但是按键没有反应。
之后我想在按键中添加中断来实现运行是按键后出现错乱。
为了达到预期的效果我只好再次对程序进行修改经过不断的修改最终实现了预期的效果(我将按键程序前加入80s的延迟用以提示进行按键!
)。
6.设计总结
经过一周的努力终于设计成功,LED的显示结果和直接用数字电压表测试模拟量输入所得结果几乎一致,误差完全在合理的范围之内。
由于仪器误差,LED显示最大值只能是4.9V,离标准最大值5.0V已经不远,达到预期目的,设计成功。
本设计参考了教材上第十一章89S52与ADC0809转换的接口连线,设计出电路图的连线,从并中理解了许多基本的知识和接线方法,在程序的设计与电压表调试的过程中中遇到了很多的问题,刚开始时四个数码管根本不显示,后来发现用的是共阳极的数码管,而自己用的是共阴极的,更换后数码管终于显示,但问题又出现了,单路显示和循环显示的开关不能控制电路的单路显示和循环显示,经过仔细地检查电路和修改程序,将按键电路进行了修改每按一下变量Z(0-1)之间跳变一次转换的模拟通道相应的加一,如果按下循环按键就返回循环显示的程序,功夫不负有心人,最后终于调试成功。
在此再次向带领我们这次课程设计的老师说声:
谢谢!
源程序
#include<
reg52.h>
//52系列单片机定义文件
intrins.h>
//调用_nop_();
延时函数用
#definead_conP2//AD控制口
#defineaddataP0//AD数据计入读入口
#defineDisdataP1//显示数据段码输出口
#defineucharunsignedchar//无符号字符(8位)
#defineuintunsignedint//无符号整数(16位)
sbitALE=P2^3;
//锁存地址控制位
sbitSTART=P2^4;
//启动一次转换位
sbitOE=P2^5;
//0809输出数据控制位
sbitEOC=P3^7;
//转换结束标志位
sbitDISX=Disdata^7;
//LED小数点
sbitda_xun=P3^5;
sbittongdao=P3^6;
ucharz,q;
ucharcodedis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/*共阳七段LED段码表"
0"
"
1"
2"
3"
4"
5"
6"
7"
8"
9"
不亮"
*/
ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};
//四位列扫描控制字
uchardataad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//定义8个数据内存单元
uintdatadis[5]={0x00,0x00,0x00,0x00,0x00};
//定义4个显示数据单元、1个数据暂存单元
/********1毫秒延时子函数**********/
voiddelay1ms(uintt)
{
uinti,j;
for(i=0;
i<
t;
i++)
for(j=0;
j<
120;
j++)
;
}
voidt0(void)interrupt1using3
{
CLK=~CLK;
}
test()
ucharm;
uchars=0x00;
ad_con=s;
for(m=0;
m<
8;
m++)
{
ALE=0;
_nop_();
ALE=1;
//转换通道地址锁存
START=1;
_nop_();
START=0;
//开始转换命令
//延时4微秒
while(EOC==0);
//等待转换结束
OE=1;
ad_data[m]=addata;
OE=0;
s++;
//取AD值,地址加1
}
ad_con=0x00;
scan(uchari)
uchark,n,m;
inth;
m=i;
dis[3]=0x00;
//通道初值为0
if(m==0)
{
for(n=0;
n<
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[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
};
if(n==8)
n=0;
k=0;
}
if(m==1)
dis[3]=dis[3]+q;
dis[2]=ad_data[q]/51;
dis[4]=ad_data[q]%51;
delay1ms(3);
}
key()
if(da_xun==0)
delay1ms
(1);
if(da_xun==0)
z=z++;
if(z==2)
{
z=0;
}
while(!
da_xun);
if(tongdao==0)
if(tongdao==0)
q++;
if(q>
7)
q=0;
}
tongdao);
/**************主函数****************/
voidmain()
P0=0xff;
//初始化端口
P2=0x00;
P1=0xff;
P3=0xff;
z=1;
q=0;
while
(1)
{delay1ms(800);
key();
test();
//控制复位
scan(z);
作品实物图片
9.参考文献
[1].彭介华,《电子技术课程设计指导》,高等教育出版社,1996;
[2].梁宗善,《电子技术基础课程设计》,华中理工大学出版社,1995;
[3].阎石,《数字电子技术基础》,高等教育出版社,1989;
[4].赵淑范王宪位,《电子技术实验与课程设计》,清华大学出版社,2006;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 报告 格式