单片机实习.docx

上传人:b****3 文档编号:3846599 上传时间:2022-11-25 格式:DOCX 页数:39 大小:6.41MB
下载 相关 举报
单片机实习.docx_第1页
第1页 / 共39页
单片机实习.docx_第2页
第2页 / 共39页
单片机实习.docx_第3页
第3页 / 共39页
单片机实习.docx_第4页
第4页 / 共39页
单片机实习.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

单片机实习.docx

《单片机实习.docx》由会员分享,可在线阅读,更多相关《单片机实习.docx(39页珍藏版)》请在冰豆网上搜索。

单片机实习.docx

单片机实习

1实习执行大纲

1.1实习目的

(1)巩固《单片机原理与应用》理论课的理论知识;

(2)熟悉单片机应用系统的硬件设计及软件设计的基本方法;

(3)将《单片机原理与应用》理论课的理论知识应用于实际的应用系统中;

(4)训练单片机应用技术,锻炼实际动手能力。

1.2实习要求

(1)利用PROTEL等软件进行硬件设计;

(2)利用KeiluV2软件完成应用系统软件设计;

(3)利用PROTEUS软件进行仿真设计;

(4)完成单片机最小系统和应用系统电路板的焊接;

(5)对电路进行调试;

(6)利用stc-isp软件完成在系统编程、下载,并完成系统软件调试;

(7)题目由指导教师提供;

(8)要求每个学生单独完成硬件软件设计、仿真、焊接、调试任务;

(9)写出实习报告,实习报告主要包括以下内容:

目录、摘要、关键词、基本原理、方案论证、硬件设计、软件设计(带流程图、程序清单)、仿真结果、实物运行结果照片、结论、参考文献等;

(10)实习完成后通过答辩;

(11)答辩时交实习报告电子文档,通过答辩后根据修改意见修改并打印、装订成册。

1.3基本任务

1)利用上述材料完成包含如下系统功能组件的单片机最小系统的设计、焊接、调试

(1)键盘

一个4X4的矩阵键盘,其中,10个按键是0~9数字键;另外6个是功能键,用于功能选择和控制,如“数据输入”、“数据显示”、“串行通信”功能选择键,以及“回车”、“清除”、控制键。

(2)显示电路

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

(3)串口串行通信

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

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

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

(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上显示与主系统同样的内容。

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

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

2基本原理

2.1STC89C52的介绍

STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

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

具有以下标准功能:

8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。

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

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

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

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

其引脚图及实物图如下图所示:

图2.1STC89C52引脚图图2.2STC89C82实物图

2.2单片机最小系统

51单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短。

51单片机最小系统晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。

51单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好

P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。

其他接口内部有上拉电阻,作为输出口时不需外加上拉电阻。

设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。

计数值N乘以机器周期Tcy就是定时时间t。

设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。

在每个机器周期的S5P2期间采样T0、T1引脚电平。

当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。

由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。

当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2ms。

图2.3单片机最小系统图

2.3矩阵键盘

键盘是计算机系统中不可缺少的输入设备,当键盘较少时可接成线性键盘。

当按键较多时接成矩阵的形式,可以节省口线。

键盘是一组按键的组合。

键通常是一种常开型按钮开关,常态下键的两个触点处于断开状态,按下键时它们才闭合(短路)。

通常,键盘有编码和非编码两种。

矩阵键盘每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。

矩阵键盘的行线和列线分别通过两并行口中,一个输出扫描码,使按键动态接地(称行扫描码),另一个并行口输入按键状态(称回馈信号)。

通过编码识别不同的按键,再通过软件查表,查出该键的功能,转向不同的处理程序。

因此键盘处理程序的任务是:

确定有无键按下;判断哪一个键按下;形成键编码;根据键的功能,转相应的处理程序。

图2.4矩阵键盘

键扫描就是要判断有无键按下,当扫描到有键按下时再进行下一步处理,否则退出键盘处理程序。

独立式键盘扫描只需读取IO口状态,而矩阵式键盘描通常有两种实现方法:

逐行扫描法和线反转法。

(1)逐行扫描法。

依次从第一至最末行线上发出低电平信号,如果该行线所连接的键没有按下的话,则列线所接的端口得到的是全“1”信号,如果有键按下的话,则得到非全“1”信号。

(2)线反转法。

线反转法也是识别闭合键的一种常用方法,该法比行扫描速度快,但在硬件上要求行线与列线外接上拉电阻。

先将行线作为输出线,列线作为输入线,行线输出全“0”信号,读入列线的值,那么在闭合键所在的列线上的值必为0;然后从列线输出全“0”信号,再读取行线的输入值,闭合键所在的行线值必为0。

这样,当一个键被按下时,必定可读到一对唯一的行列值。

再由这一对行列值可以求出闭合键所在的位置。

本次设计采用线反转法。

2.4数码管显示

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

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

本次设计采用共阴极数码管,考虑到六位数显示管显示,本次设计采用了两个三位数码管。

图2.5数码管原理图

2.5串口通信

串行接口SerialInterface是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,并可以利用电话线,从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。

串行通讯的特点是:

数据位传送,传按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。

串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。

51单片机的中断系统中第4个中断就是串口中断,要进行串口通信首先就要打开CPU总中断EA,还要打开串口通信中断ES,这是串口通信的前堤。

串口通信也跟计时器一样有很多的模式,因此我们还要设置SCON寄存器来指定采用哪一种方式进行通信,而在通信的过程中,我们还要设定通信的波特率,不然的话,单片机是没办法进行采样的,这样也不会得到正确的结果了。

51单片机串口波特率由内部定时器1产生,一般要让定时器1工作在自动装载的8位模式,即工作方式2。

串口工作在方式3,即SM0=1,SM1=1,每一帧9位,无奇偶校验。

波特率由定时器1确定,本设计设定为4800bps.

图2.6串口通信帧结构图

 

3硬件设计

3.1仿真软件Proteus的介绍

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

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。

在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。

本次设计,硬件电路的设计以及仿真采用的就是该软件。

3.2单片机最小系统设计

本次设计采用12MHz晶振,复位电路利用10K欧姆电阻以及10uF电解电容,P0口需接上拉电阻。

具体电路图如下:

图3.1单片机最小系统电路图

3.3数码管显示设计

本次设计采用共阴极数码管,利用锁存器代替三极管来加大电流,使数码管亮度较高。

P0口用于段选,P2口用于位选。

具体电路图如下:

图3.2数码管显示电路图

3.4矩阵键盘设计

本次矩阵键盘设计采用线反转法,使扫描速度较快,程序编写也较为简单。

通过单片机的P1口与键盘相连。

具体电路图如下:

图3.3矩阵键盘电路图

3.5串口电路设计

单片机与PC之间进行串行通信必须要用到串口电路,串口电路主要由MAX232芯片,RS232串行接口,以及若干电容组成。

其中,由于单片机与PC机进行通信时,单片机提供的信号电平与RS232的标准不一样,因此要通过MAX232芯片进行电平转换;而为了使MAX232芯片能够正常蓄能,滤除噪声需要对其外围电路至少接上4个电容,电容大小一般为0.1uF或1uF,可用极性或者非极性的。

具体电路图如下所示:

图3.4串口电路图

3.6总电路设计

由于本次设计需要另行配置一个从机,从而与主机配合完成串行通信功能,因此在进行总电路设计时,还需设计从机,从机的单片机最小系统以及数码管显示电路与主机的完全相同,不同之处在于从机不需要矩阵键盘以及串行接口电路。

系统总电路图如下所示:

图3.5系统总电路图

 

4软件设计

4.1编程软件Keil的介绍

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

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

本次设计程序的编写以及HEX文件的生成采用的就是该软件。

KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

用过汇编语言后再使用C来开发,体会更加深刻。

C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51及C51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

4.2程序设计流程图

4.2.1主机程序流程图

图4.1主机程序流程图

4.2.2从机程序流程图

清除RI

计数变量加1,同时数据存储

计数变量是否为7

计数变量置1

接收数据是否为0~9

计数变量清0,退出中断

退出中断

Y

Y

N

N

图4.2从机主程序流程图图4.3从机中断程序流程图

 

5系统功能仿真

5.1选择功能仿真

主机屏幕显示1,2,3分别代表进入数据输入、数据显示及串行通信功能。

图5.1数据输入功能选择图

图5.2数据输出功能选择图

图5.3串行通信功能选择图

5.2功能实现仿真

选择功能1后进入数据输入功能,数据输入可以实现输入1—4位数。

图5.4输入三位数仿真图

图5.5输入四位数仿真图

选择功能2后,输入序号后可以显示出其存储数据的值,若无则不显示,若有则显示出对应的值。

图5.5显示序号1中的数据值

图5.6显示序号0中的数据值

图5.7显示序号3中的数值

选择功能3后,进入串行通信功能,主机上按下数字并显示,同时从机与主机完全同步。

图5.8输入3个数字后主从机显示图

图5.9输入6个数字后主从机显示图

6实物运行结果

6.1选择功能运行结果

图6.1数据输入功能选择

图6.2数据显示功能选择

图6.3串行通信功能选择

6.2功能实现运行结果

选择功能1后进入数据输入功能,数据输入可以实现输入1—4位数。

图6.4输入三位数

图6.5输入四位数

选择功能2后,输入序号后可以显示出其存储数据的值,若无则不显示,若有则显示出对应的值。

图6.6显示序号1中的数据值

图6.7显示序号0中的数据值

图6.8显示序号3中的数据值

选择功能3后,进入串行通信功能,主机上按下数字并显示,同时从机与主机完全同步。

图6.9输入6个数字后主从机显示

7心得体会

通过本次设计,我对单片机系统及其原理有了一个更加深入的理解。

本次单片机课程设计是一个综合性的实验设计,通过本次实验我不仅在硬件仿真及焊接上有了较大的进步,同时也对程序的设计及编写更加得心应手。

在设计中,通过对Proteus以及Keil等软件的应用,使我意识到了这些软件的实用性,同时对这些软件的使用也越发熟练。

此外,程序的编写、调试,硬件电路的焊接、调试,虽然花费了很多时间,虽然其中遇到了很多困难,但经过自己的不懈努力与同学的指导,还是将这些困难一一克服了,当最后成功的那一刻真的是感觉到无比的喜悦与满足。

此外,本次设计使我收获最大的则是我对单片机、嵌入式系统等这一类的应用产生了浓厚的兴趣,在今后的时间里,我会花费更多的时间去对这一领域进行研究探索。

8参考文献

[1]尹勇撒继铭等,单片计算机原理及应用(第1版),科学出版社,2013年

[2]谢自美.电子线路设计·实验·测试(第三版).武汉:

华中科技大学出版社

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

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

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

 

附录一程序源代码

(1)主机程序

#include

#defineucharunsignedchar

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

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

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

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

ucharkey;//按键值,按键13为功能返回键,按键14为清除键,按键15为回车键

uchartemp;//键盘扫描中用作中间变量

uchardata_temp[6];//串口通信功能中用于存储发送的数据

uchardata_in[6];//输入数据时用于存放数据

ucharcount=0;//计数

ucharswi;//串口通信显示开/关标志位

ucharshu[40];//数据存放数组

ucharshuwei[10];//数据位数存放数组

voiddelay(ucharx);//延时

ucharkeydown(void);//判断键盘是否被按下

voidkeyscan(void);//键盘扫描函数

voidfunction(void);//功能选择函数

voidinput(void);//数据输入函数

voidindisplay(void);//数据输入显示函数

voidoutput(void);//数据输出函数

voidoutdisplay(ucharorder);//数据输出显示函数

voidinit(void);//串口初始化函数

voidckdisplay(void);//串口显示函数

voidckcom(void);//串口通信函数

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

*延时

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

voiddelay(ucharx)

{

uchari,j;

for(i=x;i>0;i--)

for(j=120;j>0;j--);

}

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

*键扫描子程序

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

voidkeyscan(void)

{

P1=0x0F;

delay(3);

temp=P1;

temp=temp&0x0F;

temp=~(temp|0xF0);

if(temp==8)

key=1;

elseif(temp==4)

key=2;

elseif(temp==2)

key=3;

elseif(temp==1)

key=4;

P1=0xF0;

delay(3);

temp=P1;

temp=temp&0xF0;

temp=~((temp>>4)|0xF0);

if(temp==8)

key=key+0;

elseif(temp==4)

key=key+4;

elseif(temp==2)

key=key+8;

elseif(temp==1)

key=key+12;

}

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

*判断键是否按下

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

ucharkeydown(void)

{

P1=0xF0;

if(P1!

=0xF0)

{

keyscan();

while(P1!

=0xF0);

}

return(key);

}

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

*功能选择

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

voidfunction(void)

{

ucharchoice;

choice=key;//选择功能

switch(choice)

{

case11:

//按键10实现数据输入功能

P0=0x06;

P2=0;

input();

break;

case12:

//按键11实现数据输出功能

P0=0x5b;

P2=0;

output();

break;

case13:

//按键12实现串口通信功能

init();//串口初始化

P0=0x4f;

P2=0;

swi=0;

count=0;

while(swi!

=2)

ckcom();//发送数据

break;

default:

break;

}

}

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

*数据输入功能

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

voidinput(void)

{

ucharsave;

ucharj=0;

uchari=0;

uchardataorder;

uchara=0;

cou

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

当前位置:首页 > 解决方案 > 商业计划

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

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