单片机最小系统概况Word文档格式.docx

上传人:b****6 文档编号:17185284 上传时间:2022-11-28 格式:DOCX 页数:29 大小:377.06KB
下载 相关 举报
单片机最小系统概况Word文档格式.docx_第1页
第1页 / 共29页
单片机最小系统概况Word文档格式.docx_第2页
第2页 / 共29页
单片机最小系统概况Word文档格式.docx_第3页
第3页 / 共29页
单片机最小系统概况Word文档格式.docx_第4页
第4页 / 共29页
单片机最小系统概况Word文档格式.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

单片机最小系统概况Word文档格式.docx

《单片机最小系统概况Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机最小系统概况Word文档格式.docx(29页珍藏版)》请在冰豆网上搜索。

单片机最小系统概况Word文档格式.docx

关键字:

单片机最小系统矩阵键盘Protueskeil

Abstract

MCUminimumsystem,regardlessofthesinglechipnovicestafforstaffdevelopment,whocanuseminimumsystemprogramforindustrialcontrol,hasveryimportantsense.MCUminimumsystemboardintheMCUdevelopmarketandcollegestudentselectronicdesignisverypopular.Thecurriculumdesign,includingSTC89S52MCUminimumsystem(includingaresetandclockcircuitandpowersupplysystem),4x4matrixkeyboard,theindependent6LEDdigitaltubedisplaycircuitandaDS18B20temperaturesensor.Usingcircuitdesignsoftwareschematicdesign,usingKeilsoftwareandProtuessoftwaresimulation,weconsolidatetheMCUapplication,analogcircuit,digitalcircuitcourseandlearnallkindsofengineeringsoftwareuse.

KeyWords:

MCUminimumsystemmatrixkeyboardKeilProtues

1.任务要求及说明

(1)键盘

一个4X4的矩阵键盘,其中,10个按键是0~9数字键;

另外6个是功能键,用于功能选择和控制,如“数据输入”、“数据显示”、“串行通信”功能选择键,以及“回车”、“清除”、控制键。

(2)显示电路

由6个7段LED数码管组成的显示电路。

(3)串口串行通信

利用51的串口实现串行通信接口电路。

完成ISP下载电路的设计、焊接

完成系统软件的设计,包括程序结构设计、流程图绘制、程序设计,实现如下功能

(1)功能选择

通过功能选择键,使得单片机处于不同的工作状态并通过LED显示相应的内容;

可选择的功能包括:

数据输入;

数据显示;

串口通信

(2)数据输入

通过功能选择键选择“数据输入”后,可分次输入10个4位十进制数据,并将输入的数据保存在内部RAM中。

数据输入要求:

1)第一步输入序号0~9,表明输入的是第几个4位十进制数据;

2)第二步按下回车键,完成序号输入;

3)第三步输入最多4位的十进制数据;

4)第四步按下回车键,完成数据输入;

5)重复第一步,开始新数据的输入;

6)输入数据的显示格式是:

最左边是序号,然后是空格,之后是从右到左的最多4位十进制数;

7)若在输入过程中(第一步或第三步)出现错误,按“清除”键,重新从第一步开始输入数据。

或者,自己设计10个十进制数的输入及显示方式。

(3)数据显示

通过功能选择键选择“数据显示”后,可显示之前输入的10个4位十进制数据中的任一个,要求:

1)第一步输入序号0~9,表明显示的是第几个4位十进制数据;

2)第二步显示相应的数据;

3)重复第一步、第二步,显示其他的数据;

4)数据的显示格式是:

最左边是序号,然后是空格,之后是要显示的数据,从右到左最多4位十进制数。

或者,自己设计数据的显示方式。

(4)数据通信

将两个单片机最小系统通过串口连接起来,其中一个作为主系统,另一个作为辅系统。

当通过功能选择键选择“串行通信”后,当在主系统上按下数字键后主系统的LED按从左向右移东的方式显示按键输入的数字,同时辅系统的LED上显示与主系统同样的内容。

(5)利用仿真软件完成系统仿真工作

(6)在单片机最小系统硬件上实现任务3中规定的功能

2.硬件电路原理与设计

2.1硬件电路原理

2.1.1最小系统

单片机最小系统包括振荡器电路,复位电路,单片机EA端接高电平(Vcc),

P0口需要接上拉电阻(10K)。

振荡器电路选用12MHz晶振,两个30pf电容,振荡器电路接单片机XTAL1和XTAL2引脚。

单片机最小系统原理图如下。

图1单片机最小系统

1、MCU控制器简介

STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash 

存储器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:

8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,2个16位 

定时器/计数器,一个6向量2级中断结构,全双工串行口。

另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

最高运作频率35MHz,6T/12T可选。

2.复位电路

单片机的置位和复位,都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。

单片机复位电路原理是在单片机的复位引脚RST上外接电阻和电容,实现上电复位。

当复位电平持续两个机器周期以上时复位有效。

复位电平的持续时间必须大于单片机的两个机器周期。

具体数值可以由RC电路计算出时间常数。

复位电路由按键复位和上电复位两部分组成。

上电复位

STC89系列单片及为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC充放电回路保证单片机在上电时RST脚上有足够时间的高电平进行复位,随后回归到低电平进入正常工作状态,这个电阻和电容的典型值为10K和10uF。

按键复位

按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。

电路图如图2所示

图2按键复位电路

3.振荡电路

单片机系统里都有晶振,在单片机系统里晶振作用非常大,全称叫晶体振荡器,它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。

  在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。

高级的精度更高。

有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。

晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。

单片机晶振的作用是为系统提供基本的时钟信号。

通常一个系统共用一个晶振,便于各部分保持同步。

有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。

晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。

如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。

STC89C51使用11.0592MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。

其电路原理图如3所示。

图3晶体振荡电路

2.2数码管显示电路

LED数码管显示是利用半导体发光制成条形的发光二极管,封装在一起组成数字或其他符号形状。

数码管根据公共端不同,分为共阴极和共阳极两种形式。

根据设计需要,本次选用共阴极数码管。

由于一个数码管不能实现多位数显示,同时从节省I/O端口考虑,结合数电知识,利用两片74HC573扩展单片机的IO口,两片74HC573的输出分别接6位7段共阴数码管的段选端和公共端。

74HC573是8数据锁存器。

主要用于数码管、按键等等的控制,其输出受输出允许端OE和锁存允许端LE的控制,当LE为高时锁存器输出为高阻态,当OE为低,LE也为低时,输入端的信号输出到输出端。

图4数码管显示电路图

2.3串口通信电路

串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线UniversalSerialBus或者USB混淆)。

大多数计算机包含两个基于RS232的串口。

串口同时也是仪器仪表设备通用的通信协议;

很多GPIB兼容的设备也带有RS-232口。

同时,串口通信协议也可以用于获取远程采集设备的数据。

串口通信的概念非常简单,串口按位(bit)发送和接收字节。

尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

它很简单并且能够实现远距离通信。

比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;

而对于串口而言,长度可达1200米。

典型地,串口用于ASCII码字符的传输。

通信使用3根线完成:

地线、发送、接收。

由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。

其他线用于握手,但是不是必须的。

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。

单片机使用的是TTL电平,而计算机使用的是RS-232电平,要实现把电脑中的程序能下载到单片机上,就需要实现RS-232电平与TTL电平之间的转换。

实现这一功能的芯片有很多,本次课设所使用的芯片为MAX232及电容元件构成RS232电平与TTL电平转换的串行口电路。

MAX232是电平转换芯片。

1970年,美国电气学会规定“RS232”串口通信协议。

规定逻辑“1”,-5—-15V;

逻辑“0”,+5—+15V。

噪声容限为2V。

要实现利用串口与单片机进行通信,就要进行电平转换,把标准转化成单片机可以识别的。

MAX220–MAX249都是电平转换芯片,本次设计中就使用MAX232。

其电路原理图如图5所示。

图5串口电路图

2.4矩阵键盘电路

矩阵键盘检测的原理和方法:

矩阵键盘每个按键两端都与单片机I/O口相连,因此在检测时需人为通过单片机I/O口送出低电平。

检测时,先送一列为低电平,其余几列全为高电平(此时确定了列数),然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电平(这是有确定了行数),则便可以确认当前被按下的键是哪一列哪一行,用同样方法轮流送各列一次低电平,再轮流检测一次各行是否变为低电平,这样既可检测完所有的按键,当有键按下时便可判断出按下的是哪一个键。

其工作原理是从0列开始顺序行扫描即该行输出为0。

每扫描一行读入列线数据从0开始列检查找该行输出为0的列若无则顺序扫描下一行并检查其各列若找到某列线为0则该列与检查行交叉的按键为被按下的键。

从0行0列开始顺序将按键编号就可以按扫描的值得到按键的值。

本设计使用的是4个独立按键其功能设置为时间的显示、时间的设置、温度的显示和数字频率的显示。

此外还需要消除按键在闭合或断开时的抖动。

消抖的方法可采用消抖电路(RS触发器时锁电路硬件消除抖动),也可采用延时方式软件消除抖动(延时后再重读,以跳过抖动期),本设计采用软件消抖方式。

本设计中主要使用了独立键盘,故电路图中简要的画出了4*4的矩阵键盘,其电路原理图如图6所示

图6矩阵键盘原理图

3软件设计

3.1软件介绍

3.1.1程序编写软件Keil

KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

本次设计编程主要使用Keil软件进行编程。

3.1.2仿真软件Proteus

Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,在编译方面,它也支持IAR、Keil和MPLAB等多种编译。

本次设计采用的是Proteus进行仿真。

3.2软件设计

本次设计的要求是完成键盘扫描、单片机控制数码管动态显示数据、串口通信等功能,且有具有功能选择键。

选择数据输入时,可以输入序号,再输入相应的不超过四位的数据,再选择数据显示功能,按下相应的序号按键就能显示你所输入的数据。

串口通信时进行键盘扫描,当相应的按键被按下时,在主系统和辅系统的六位数码管上同步依次显示按键值,且后键入的数字在左端,之前键入的数字移向下一个数码管。

同时还设置了清零功能键,当该按键被按下时,所有的数码管全部熄灭。

故设计思想为首先进行各模块的程序编写,使其个模块的程序能够单独运行成功。

之后将各模块设计成子函数,在主函数中进行调用,当功能键被按下时,执行相应的子程序。

3.2.1数码管显示设计

该程序分为键盘扫描和数码管显示两部分,其程序流程图如7所示:

图7数据输入流程图

3.2.2串行通信接收程序

由于要实现两个单片机之间的通信,在接收单片机上要写与发送程序相对应的接收程序,两者应设定相同的波特率。

对应的接收程序流程图如图8所示。

图8接收程序流程图

4.仿真与调试

4.1数据输入与显示仿真结果

(a)

(b)

图9仿真电路总图

4.2数字移位和串口仿真结果

(a)

图10数字移位与串口仿真图

5.小结与体会

本次实习是对所学的单片机知识的一次综合运用,本次设计要求完成键盘扫描显示,数据输入与数据显示,串口通信等内容。

首先,要求能够熟练的运用Protues进行单片机的仿真,由于以前没用过这个软件,仿真一开始就成了难题,这对于没怎么用过这个软件的我来说是一大挑战。

不过,通过一两天的摸索,总算是把它的一些基本操作弄清楚了,最终也成功绘制出具有基本扩展电路的单片机系统。

接下来是在Keil上进行程序的编写,但是又由于对单片机知识没有很好的掌握,所以程序的编写变成了整个实习的难处。

不断的查找资料,和同学讨论最总才写出了正确的程序,实现了要求的功能。

在本次实习中学到了很多,熟悉了Protues软件的使用,程序的编写也让我对单片机的认识又加深了一步。

通过本次实习让我对以前所学知识有了一个更深刻的认识,学会了将所学的知识运用到实际中去,同时也让我意识到了理论与实际的差距,在实习中遇到了各种各样的问题,往往看是简单的一件事到实际去做的时候才发现有好多的东西没考虑过。

由于实验中没能实现串行通信的功能,让我认识到自己知识的薄弱,让我认识到自己还有很多不足,在以后的学习中,更加努力学习,弥补不足,让自己的编程能力有所提高。

6.参考文献

[1]谢自美.电子线路设计·

实验·

测试(第三版).武汉:

华中科技大学出版社

[2]李群芳.单片微型计算机与接口技术(第3版).电子工业出版社,2008

[3]刘教瑜.单片机原理及应用.武汉理工大学出版社,2011

[4]张东亮.单片机原理与应用.人民邮电出版社,2009

[5]郭天祥.51单片机C语言教程.电子工业出版社

C语言源程序

发送机主程序:

#include<

reg52.h>

//此文件中定义了51的一些特殊功能寄存器

#defineKEY_PORTP1//键盘硬件接口

#defineDISPLAY_PORT1P0//数码管硬件接口1

#defineDISPLAY_PORT2P2//数码管硬件接口2

unsignedcharcodetable1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

//从左到右的数码管012345

unsignedcharcodetable2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//0~9

unsignedcharkey;

unsignedcharkey_temp[6];

unsignedcharcount=0;

unsignedcharfun3_flag=0;

longnum[10];

//用来装载输入的数据

voiddelayms(unsignedintxms);

voidinit_usart(void);

voiddelay(unsignedcharx);

voidkeyscan(void);

unsignedcharkeydown(void);

voidfun3_display(void);

voidsend_data(void);

unsignedcharmenu_select(void);

voiddisplay(unsignedchardata_order,intnum);

voiddisplay_data(void);

voidinput_data(void);

voidmain(void)

{

unsignedcharmenu;

init_usart();

while

(1)

{

menu=menu_select();

//选择功能

switch(menu){

case10:

input_data();

break;

case11:

display_data();

case12:

fun3_flag=0;

while(fun3_flag!

=2)

{

if(fun3_flag==1)

fun3_display();

send_data();

}

default:

}

/***发送数据****/

voidsend_data(void)

{

if(keydown())

{

SBUF=key;

//SUBF接受/发送缓冲器

while(TI==0);

//当发送标志位为0,即未完成发送,则一直等待,直到发送完成

TI=0;

//发送完成之后,将发送中断标志TI置0

if(key==13)

fun3_flag=2;

else

fun3_flag=1;

if(key<

10)

key_temp[(count++%6)]=key;

if(count==7)

count=1;

/************************************************************************

延时子程序

***************************************************************************/

voiddelayms(unsignedintxms)

unsignedinti,j;

for(i=xms;

i>

0;

i--)

for(j=110;

j>

j--);

voidinit_usart(void)

SCON=0x50;

//REN=1允许串行接受状态,串口工作模式2

TMOD|=0x20;

//定时器工作方式2

PCON|=0x80;

//波特率提高一倍

//TH1=0xFD;

//baud*2/*reloadvalue19200、数据位8、停止位1。

效验位无(11.0592)

TH1=0xF3;

////baud*2/*波特率4800、数据位8、停止位1。

效验位无(12M)

TL1=0xF3;

TR1=1;

//开启定时器1

ES=1;

//开串口中断

EA=1;

//开总中断

//IE=0x0;

SBUF=16;

//告诉从机准备接受了

/*延时子程序*/

voiddelay(unsignedcharx)

unsignedcharj;

while((x--)!

=0)

{for(j=0;

j<

125;

j++)

{;

/*键扫描子程序*/

voidkeyscan(void)

unsignedchartemp;

temp=KEY_PORT;

//读P1口

temp=temp&

0x0F;

temp=~(temp|0xF0);

if(temp==1)

key=0;

elseif(temp==2)

key=1;

elseif(temp==4)

key=2;

elseif(temp==8)

key=3;

key=16;

KEY_PORT=0xF0;

//高四位输入

delay

(1);

//

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1