单片机课程设计设计报告Word格式.docx
- 文档编号:17831172
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:14
- 大小:104.20KB
单片机课程设计设计报告Word格式.docx
《单片机课程设计设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计设计报告Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
3.1软件设计流程………………………………………………….13
3.2源程序代码…………………………………………………….14
第四章课程设计体会…………………………………………………18
第五章参考文献………………………………………………………18
1.10—5V数字电压表的意义
在实验室和日常生活中,电量的测量是最为普遍的,也是设计各种电路的必要步骤,其中以电压量的测量最为经常。
随着电子技术的发展,经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。
传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。
采用单片机实现的数字电压表,采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。
由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特点而得到很广泛的应用。
数字电压表是诸多数字化仪表的核心与基础。
以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。
目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。
最近的几十年来,随着半导体技术、集成电路(IC)和微处理器技术的发展,数字电路和数字化测量技术也有了巨大的进步,从而促使了数字电压表的快速发展,并不断出现新的类型。
数字电压表从1952年问世以来,经历了不断改进的过程,从最早采用继电器、电子管和形式发展到了现在的全固态化、集成化(IC化),另一方面,精度也从0.01%-0.005%。
目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。
本文是以简易数字直流电压表的设计为主要的研究内容,本次课程设计系统主要包括三大模块:
转换模块、数据处理模块及显示模块。
其中,A/D转换采用ADC0809对输入的模拟信号进行转换,控制核心AT89C51再对转换的结果进行运算处理,最后用8279和七段数码管显示数字电压信号。
1.2课程设计所作的工作
第一步是硬件设计,通过设计题目的要求选择元器件:
AT89C1,ADC0809,七段数码管,8279;
参考实验箱的实验的原理图和程序,用protel画出硬件原理图。
其中包括:
单片机最小系统的设计,数据采集通道设计和数据显示电路设计。
第二步是软件设计,首先画出程序流程图,再用C语言编写程序,在实验箱上调试。
其中包括数据采集子程序,显示子程序和整体程序的调试。
1.3系统的主要功能
本设计运用89C51、ADC0809进行A/D转换,转换结束后,采用单片机进行数据处理,用8279和七段数码管显示出所测量的电压值。
该数字电压表测量电压类型是直流,测量范围是0—5V
2.1设计原理框图
ADC0809
8051
启动键
2.2元器件选型说明
单片机芯片
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含有4KB的可反复擦写的只读程序存储器和128字节的随机存储器。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51功能性能:
与MCS-51成品指令系统完全兼容;
4KB可编程闪速存储器;
寿命:
1000次写/擦循环;
数据保留时间:
10年;
全静态工作:
0-24MHz;
三级程序存储器锁定;
128*8B内部RAM;
32个可编程I/O口线;
2个16位定时/计数器;
5个中断源;
可编程串行UART通道;
片内震荡器和掉电模式。
AT89C51提供以下标准功能:
4KB的Flash闪速存储器,128B内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时,AT89C51可降至0Hz静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作,掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有工作直到下一个硬件复位。
AT89C51采用PDIP封装形式,引脚配置如图5所示。
图5AT89C51的引脚图
AT89C51芯片的各引脚功能为:
P0口:
这组引脚共有8条,P0.0为最低位。
这8个引脚有两种不同的功能,分别适用于不同的情况,第一种情况是89C51不带外存储器,P0口可以为通用I/O口使用,P0.0-P0.7用于传送CPU的输入/输出数据,这时输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性;
第二种情况是89C51带片外存储器,P0.0-P0.7在CPU访问片外存储器时先传送片外存储器的低8位地址,然后传送CPU对片外存储器的读/写数据。
P0口为开漏输出,在作为通用I/O使用时,需要在外部用电阻上拉。
P1口:
这8个引脚和P0口的8个引脚类似,P1.7为最高位,P1.0为最低位,当P1口作为通用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。
P2口:
这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用I/O口使用,它的第一功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不是像P0口那样传送存储器的读/写数据。
P3口:
这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表2所示:
表2P3口各位的第二功能
P3口各位
第二功能
P3.0
RXT(串行口输入)
P3.1
TXD(串行口输出)
P3.2
/INT0(外部中断0输入)
P3.3
/INT1(外部中断1输入)
P3.4
T0(定时器/计数器0的外部输入)
P3.5
T1(定时器/计数器1的外部输入)
P3.6
/WR(片外数据存储器写允许)
P3.7
/RD(片外数据存储器读允许)
Vcc为+5V电源线,Vss接地。
ALE:
地址锁存允许线,配合P0口的第二功能使用,在访问外部存储器时,89C51的CPU在P0.0-P0.7引脚线去传送随后而来的片外存储器读/写数据。
在不访问片外存储器时,89C51自动在ALE线上输出频率为1/6震荡器频率的脉冲序列。
该脉冲序列可以作为外部时钟源或定时脉冲使用。
/EA:
片外存储器访问选择线,可以控制89C51使用片内ROM或使用片外ROM,
若/EA=1,则允许使用片内ROM,若/EA=0,则只使用片外ROM。
/PSEN:
片外ROM的选通线,在访问片外ROM时,89C51自动在/PSEN线上产生一个负脉冲,作为片外ROM芯片的读选通信号。
RST:
复位线,可以使89C51处于复位(即初始化)工作状态。
通常89C51复位有自动上电复位和人工按键复位两种。
XTAL1和XTAL2:
片内震荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接89C51片内OSC(震荡器)的定时反馈回路。
ADC0809
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
ADC0809对输入模拟量要求:
信号单极性,电压范围是0-5V,若信号太小,必须进行放大;
输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
8279
Intel8279芯片是一种通用的可编程序的键盘,显示接口器件,单个芯片就能够完成键盘输入和LED显示两种功能。
8279芯片包括键盘输入和显示输出两个部分,此次课程设计用到的是显示部分,按照扫描的方式工作,可以显示8位LED。
2.3单片机最小系统
复位电路和晶振电路
单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。
MCS-51单片机有一个复位引脚RST,采用施密特触发输入。
当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位。
复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入其他工作状态。
单片机的复位方式有上电自动复位和手动复位两种,下图是51系列单片机通常用的复位组合电路,只要Vcc上升时间不超过1ms,它们都能很好的工作[1]。
单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。
CPU执行一条指令的各个微操作所对应时间顺序称为单片机的时序。
MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,但形成时钟电路还需附加其他电路[1]。
本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简,只需要一个晶振和2个电容即可,
2.4电源电路
2.5A/D转换模块
2.68279和LED显示模块
2.7时钟发生电路和按键部分
按键部分由实验箱上一个拨动开关连接到单片机的P1.0口,时钟电路连接到ADC0809和8279,为他们提供时钟。
第三章软件设计
3.1软件设计流程
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和8279显示子程序,这三个程序模块构成了整个系统软件的主程序,
初始化程序
所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等[9]。
A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,
软件设计的流程文字描述如下:
首先进行变量定义和宏声明,定义位变量。
接着是写出延时子程序,8279初始化子程序,中断初始化。
进入主程序:
对8279进行初始化,对中断进行初始化。
判断拨动开关是否拨动到了下方,如果没有,送数据到ADC0809来启动A/D转换,用标志位来检测A/D转换是否结束,如果结束,则首先清零标志位,然后把转换过来的数据进行处理,然后一个一个数码管逐个显示。
如果把拨动开关拨到下方,则数码管立即不显示任何数字,在拨到上方,则继续显示。
3.2源程序代码(程序清单)
//-----头文件引用------
#include<
Reg51.h>
absacc.h>
//-----宏声明-----
#defineA_DPORTXBYTE[0x8100]//0809通道0地址
#defineucharunsignedchar
#defineD8279XBYTE[0xFF80]//8279数据口地址
#defineC8279XBYTE[0xFF82]//8279状态/命令口地址
#defineuintunsignedint
//-----变量定义-----
ucharcodeledseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
//LED显示常数表,小数位
ucharcodeledseg1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed
};
//LED显示常数表,整数位
bitbdatasym=0;
//定义标志位
sbitbt=P1^0;
//定义按键
ucharval;
//-----延时子程序-----
voiddelay()
{
uintx,y;
for(x=0;
x<
100;
x++)
{
for(y=0;
y<
x;
y++);
}
}
//----8279初始化子程序-----
voidinit8279()
C8279=10;
//置8279工作方式
C8279=0x38;
//置键盘扫描速率
C8279=0xd1;
/清除LED显示,总清除命令
delay();
C8279=0x90;
//写显示RAM命令
//-----初始化-----
voidinit(void)
IT0=1;
//中断0请求方式为脉冲触发方式
EX0=1;
//外部中断0
EA=1;
//开总中断
//-----中断-----
voidint_0(void)interrupt0
val=A_DPORT;
//读A_D数据
sym=1;
//置读数标志
//-----主程序-----
main()
floatad_count;
uintad_num;
init();
//初始化
init8279();
//8279初始化
while
(1)
if(bt)
A_DPORT=val;
//启动A/D
while(sym==0);
//等待A/D转换结束
sym=0;
//清零读数标志
ad_count=val/255.0*5.0;
//转换过来的数据表示成显示的数据
ad_num=(int)ad_count;
//取整
C8279=0x82;
//把数据显示在第3个数码管上
D8279=ledseg1[ad_num];
//整数位
ad_count=ad_count*10;
ad_num=ad_num%10;
C8279=0x81;
//把数据显示在第2个数码管上
D8279=ledseg[ad_num];
//第一位小数
C8279=0x80;
//把数据显示在第1个数码管上
//第二位小数
else
D8279=0;
//使3个数码管都不显示数字
第四章课程设计体会
这次的课程设计让我有一些心得和体会,在硬件设计的过程中,首先要做的就是把实验箱上的实验看懂,能够对照它的原理图和程序把实验箱上的实验看懂,由于实验箱上是分块来画原理图的,所以,有一些网络标号在一个实验里只有一个,要看到另外一个,必须结合其他的实验的原理图才行,这样才能知道它的连接。
在画原理图的过程中,遇到了一些问题,8279和数码管的显示模块中,与总线的连接处在电气规则检查时报错,在这里要添加网络标号才能不报错,同时,总线与电线的连接还有走向问题,如果走向出错,也会报错。
在0809的IN0-IN7为模拟量输入线,是从外界采集模拟信号的,在这里可以在引脚出打上叉来避免电气规则检查的报错,因为原理图上没有画出从外界采集模拟信号的部分。
在软件设计中,首先确定一个程序流程图是很重要的,有了程序流程图就有一个清晰的思路,编写程序中也能够充分体会到模块化思维,有些是必须要注意的,要调用子程序必须先对子程序进行声明,放在主程序的前面。
在写数码管的位选时,要考虑整数位的数码管必须把数码管上的点显示出来,以此来表示小数点。
通过本次设计,我对单片机这门课有了进一步的了解。
无论是在硬件连接方面还是在软件编程方面。
在这次课程设计过程中遇到了不少问题,在解决问题的过程中,提高了自己对之前所学知识的理解。
第五章参考文献
[1]胡健.单片机原理及接口技术.北京:
机械工业出版社,2004年10月
[2]王毓银.数字电路逻辑设计.高等教育出版社,2005年12月
[3]于殿泓、王新年.单片机原理与程序设计实验教程.西安电子科技大学出版社,2007年5月
[4]谢维成、杨加国.单片机原理与应用及C51程序设计实例.电子工业出版社,2006年3月
[5]李广弟.单片机基础.北京航空航天大学出版社,2007年5月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)