多按键花样流水灯设计实习报告.docx
《多按键花样流水灯设计实习报告.docx》由会员分享,可在线阅读,更多相关《多按键花样流水灯设计实习报告.docx(16页珍藏版)》请在冰豆网上搜索。
多按键花样流水灯设计实习报告
中国电子科技大学
实习总结报告
实习类型生产实习
实习单位电子科学学院实习基地
实习起止时间201X年7月X日至202X年6月X日
指导教师
所在院(系)电子科学学院
班级电信X班
学生姓名
学号
202X年6月20日
多按键花样流水灯设计
一、设计目的与要求
通过学习51单片机开发软件及其实验箱掌握51单片机与外部扩展芯片连接方式和外部芯片的初始化编程方法。
进一步学习掌握8031内部计数器的使用和编程方法。
进一步掌握中断处理程序的编程方法。
利用74LS273扩展8031的I/O口通过编程实现流水灯实验。
1、设计目的
(1)掌握51系列单片机的基本硬件结构及工作原理;
(2)掌握51系列单片机的汇编语言及基本程序设计方法;
(3)学习并掌握使用51系列单片机开发控制系统的基本步骤及方法。
2、设计要求
(1)选择一个I/O口控制八只流水灯。
(2)设置四个按键K1—K4,按下K1跑马灯,K2流水灯,K3鸳鸯戏水,K4则循环三种控制方式。
(3)跑马灯:
共8个LED逐次点亮,每隔100ms点亮一个LED,点亮100ms后关闭。
(4)流水灯:
共8个LED逐次点亮,每隔100ms点亮一个LED,点亮100ms后下一个LED点亮,当所有LED灯全部点亮后,延时100ms,然后全灭;然后继续上次操作。
(5)鸳鸯溪水灯:
共8个LED,第一次1、3、5、7号灯点亮,延时100ms,关闭,延时100ms,2、4、6、8号灯点亮,延时100ms,关闭,延时100ms。
然后继续上次操作。
二、单片机开发板原理
整个系统工作由软件程序控制运行,根据需要,可以上电后系统经过初始化,进入用户设定模式状态。
基于AT89C52单片机的彩灯控制方案,实现对LED彩灯的控制。
本方案以AT89C52单片机作为主控核心,与驱动等模块组成核心主控制模块。
在主控模块上设有晶振电路和8个LED显示二极管,根据需要编写若干种亮灯模式,根据各种亮灯时间的不同需要,在不同时刻输出灯亮或灯灭的控制信号。
1、单片机板原理图
图1单片机实验板原理图
2、AT89C52单片机的硬件结构
一个8位CPU;
一个时钟电路;
4Kbyte程序存储器;
128byte数据存储器;
两个16位定时/计数器;
64Kbyte扩展总线控制电路;
四个8-bit并行I/O端口;
一个可编程串行接口;
五个中断源,其中包括两个优先级嵌套中断
3、STC89C52结构示意图
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0不具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外接上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX)。
在flash编程和校验时,P1口接收低8位地址字节。
P1.0T2(定时器/计数器T2的外部计数输入),时钟输出。
P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)。
P1.6MISO(在系统编程用)。
P1.7SCK(在系统编程用)。
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
在访问外部程序存储器或用16位地址读取外部数据存储器时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
P3口亦作为特殊功能(第二功能)使用,在flash编程和校验时,P3口也接收一些控制信号。
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INTO(外中断0)
P3.3INT1(外中断1)
P3.4TO(定时/计数器0)
P3.5T1(定时/计数器1)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST——复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
图2AT89C52
花样流水灯是一个带有八个发光二极管的单片机小应用系统,由发光二极管,晶振,复位,电源等电路和必要的软件组成的单个单片机。
若让接在P1.0口的LED1亮起来,只要把P1.0口的电平变为低电平就可以了;相反,若要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
4、主要引脚功能
(1)电源引脚Vcc和Vss
Vcc:
电源端,接+5V。
Vss:
接地端。
通常在Vcc和Vss引脚之间接0.1μ高频滤波电容。
(2)时钟电路引脚XTAL1和XTAL2
XTAL1:
接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,若使用外部TTL时钟时,该引脚必须接地。
XTAL2:
接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出,若使用外部TTL时钟时,该引脚为外部时钟的输入端。
(3)地址锁存允许ALE
在系统扩展时,ALE用于控制地址锁存器锁存P0口输出的低8位地址,从而实现数据与低位地址的复用。
当单片机上电正常工作后,ALE端就周期性地以时钟频率的1/6的固定频率向外输出正脉冲信号,ALE的负载能力为8个LSTTL器件。
(4)外部程序存储器读选通信号PSEN
PSEN是读外部程序存储器的选通信号,低电平有效。
CPU从外部存储器取指令时,它在每个机器周期中两次有效。
(5)程序存储器地址允许输入端EA/VPP
当EA为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FFFH时,将自动转向执行片外程序存储器指令。
当EA为低电平时,CPU只执行片外程序存储器指令。
对于8031,由于其无片内ROM,故EA必须接低电平。
(6)复位信号RST
该信号高电平有效,在输入端保持两个机器周期的高电平后,就可以完成复位操作。
此外,该引脚还有掉电保护功能,若在该端接+5V备用电源,在使用中若Vcc掉电,可保护片内RAM中信息不丢失。
(7)输入/输出口引脚P0、P1、P2和P3
P0口(P0.0~P0.7):
该端口为漏极开路的8位准双向口,负载能力位8高LSTTL负载,它为8位地址线和8位数据线的复用端口。
P1口(P1.0~P1.7):
它是一个内部带上拉电阻的8位准双向I/O口,P1口的驱动能力为4个LSTTL负载。
P2口(P2.0~P2.7):
它为一个内部带上拉电阻的8位准双向I/O口,P2口的驱动能力也为4个LSTTL负载。
在访问外部程序存储器时,它作存储器的高8位地址线。
P3口(P3.0~P3.7):
P3口同样是内部带上拉电阻的8位准双向I/O口,P3口除了作为一般的I/O口使用之外,其还具有特殊功能。
5、复位电路
当要对晶片重置时,只要按此开关就能完成LED和开关的重置。
复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
单片机的RST管脚为主机提供了一个外部复位信号输入口。
复位信号是高电平有效,高电平有效的持续时间为2个机器周期以上。
单片机的复位方式可由手动复位方式完成。
RST引脚是复位信号输入端,复位信号为高电平有效,其有效时间应持续24个振荡周期以上才能完成复位操作,若使用6MHz晶振,则需持续4μS以上才能完成复位操作。
图2.10中,在通电瞬间,由于RC的充电过程,在RST端出现一定宽度的正脉冲,只要该正脉冲保持10ms以上,就能使单片机自动复位
6、震荡电路
为彩灯循环系统提供稳定频率波在由多片单片机组成的系统中,为了各单片机之间时钟信号的同步,引入唯一的外部脉冲信号作为各单片机的振荡脉冲。
这时外部的脉冲信号是经单片机89C51的XTAL2引脚注入的;在MCS-51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容C1、C2形成反馈电路,可构成稳定的自激振荡器,振荡频率范围通常是1.2~12MHz。
晶体振荡频率高,则系统的时钟频率也高,单片机的运行速度也就快。
由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。
晶体振荡器的振荡信号从XTAL2端送入内部时钟电路,它将该振荡信号二分频,产生一个两相时钟信号P1和P2供单片机使用。
时钟信号的周期称为状态时间S,它是振荡周期的2倍,P1信号在每个状态的前半周期有效,在每个状态的后半周期P2信号有效。
CPU就是以两相时钟P1和P2为基本节拍协调单片机各部分有效工作的。
振荡电路产生的振荡脉冲并不直接使用,而是经分频后再为系统所用。
振荡脉冲在片内通过一个时钟发生电路二分频后才作为系统的时钟信号。
片内时钟发生电路实质上是一个二分频的触发器,其输入来自振荡器,输出为二相时钟信号,即状态时钟信号,其频率为fosc/2;状态时钟三分频后为ALE信号,其频率为fosc/6;状态时钟六分频后为机器周期,其频率为fosc/12。
7、硬件调试
在单片机开发过程中,从硬件设计到软件设计几乎是开发者针对本系统特点亲自完成的。
这样虽然可以降低系统成本,提高系统的适应性,但是每个系统的调试占去了总开发时间的2/3,可见调试的工作量比较大。
单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。
但通常是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。
可见硬件的调试是基础,如果硬件调试不通过,软件设计则是无从做起。
在逻辑这类故障往往由于设计和加工制板过程中工艺性错误所造成的。
主要包括错线、开路、短路。
排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。
应特别注意电源系统检查,以防止电源短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或与其它信号线路短路。
必要时利用数字万用表的短路测试功能,可以缩短排错时间。
这类故障往往由于设计和加工制板过程中工艺性错误所造成的。
主要包括错线、开路、短路。
排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。
应特别注意电源系统检查,以防止电源短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或与其它信号线路短路。
必要时利用数字万用表的短路测试功能,可以缩短排错时间。
8、联机仿真调试
(1)编译程序
①打开Keil软件,建立新的工程,选定所需的89C52芯片
②新建文件,输入测试程序,保存为.c格式。
③将新保存的文件加入工程中。
④在工程设置选项中选定“自动生成hex文件”。
⑤点击“全编译”选项,编译解释后对话框下部会提示程序中是否有错误。
若有,按提示改正,直至再编译时无错误结束。
(2)烧写程序
打开STC-ISP软件,选定芯片及编译好的hex文件,确认单片机串口线、电源连接完好,点击开始下载后打开单片机电源,此时可观察到下载进度,下载完毕后,单片机会执行所编写程序的功能。
三、软件开发
1、程序框图
图3程序框图
2、程序
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeledpao[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
ucharcodeledliu[8]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};voidkey();
sbitK1=P3^2;
sbitK2=P3^3;
sbitK3=P3^4;
sbitK4=P3^5;
voidDelay(uintdel)
{
uinti,j;
for(i=0;ifor(j=0;j<1827;j++);
}
voidpao()
{
uinti;
for(i=0;i<8;i++)
{
P0=ledpao[i];
Delay(10);
P0=0xff;
key();
}
}
voidliu()
{
uintj;
for(j=0;j<8;j++)
{
P0=ledliu[j];
Delay(10);
key();
if(j==8)
{
Delay(10);
P0=0xff;
}
}
}
voidyuan()
{
P0=0x55;
Delay(10);
P0=0xff;
Delay(10);
P0=0xaa;
Delay(10);
P0=0xff;
Delay(10);
key();
}
voidxunhuan()
{
pao();
liu();
yuan();
}
voidkey()
{
if(K1==0)
{
while
(1)
{pao();}
}
if(K2==0)
{
while
(1)
{
liu();
}
}
if(K3==0)
{
while
(1)
{
yuan();
}
}
if(K4==0)
{
while
(1)
{
xunhuan();
}
}
}
voidmain(void)
{
while
(1)
{
key();
}
}
四、总结及体会
随着单片机应用的推广普及,微控制技术必将不断发展、日益完善和更加充实。
在各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。
通过本实习不但可以掌握单片机软、硬件的综合调试方法,而且可以熟练掌握电路原理图,激发对单片机智能性的探索精神,提高学生的综合素质,培养了我们应用单片机实现开发与调试的能力,在设计过程中使我懂得在设计程序之前,务必要对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源:
懂得设计的关键是要有一个清晰的思路和一个完整的软件流程图。
在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”是程序设计的必经之路。
要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你思路,这样也为资料的保存和交流提供了方便。
整个设计的过程中,还是碰到了一些问题。
比如,对于键盘的延时防抖问题不能较好的解决;对于编程的顺序及各模块程序调用掌握得还不够好;对于一些相关的应用软件没能熟练掌握。
通过这几天的反复思考,以及参考网上的程序,最终还是完成了设计。
设计中我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识
指导教师评语及成绩评定:
成绩:
指导教师签字:
年月日