单片机课程设计指示灯定时控制系统Word下载.docx

上传人:b****5 文档编号:21156928 上传时间:2023-01-28 格式:DOCX 页数:18 大小:663.68KB
下载 相关 举报
单片机课程设计指示灯定时控制系统Word下载.docx_第1页
第1页 / 共18页
单片机课程设计指示灯定时控制系统Word下载.docx_第2页
第2页 / 共18页
单片机课程设计指示灯定时控制系统Word下载.docx_第3页
第3页 / 共18页
单片机课程设计指示灯定时控制系统Word下载.docx_第4页
第4页 / 共18页
单片机课程设计指示灯定时控制系统Word下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机课程设计指示灯定时控制系统Word下载.docx

《单片机课程设计指示灯定时控制系统Word下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计指示灯定时控制系统Word下载.docx(18页珍藏版)》请在冰豆网上搜索。

单片机课程设计指示灯定时控制系统Word下载.docx

四、系统软件12

4.1程序设计内容12

4.2程序框图14

4.4程序功能扩展17

五、系统调试20

PROTEUS仿真20

六、系统功能21

总结21

参考文献22

附录22

作品实物图22

前言

在单片机里面,经常需要用到定时器来获取我们需要的时间,MCS-51单片机内部有两个16为定时/计数器,简称定时器0(T0)和定时器1(T1),他们均可用做定时器或者计数器,为单片机系统提供计数和定时功能,还可作为串行口的波特率发生器,这些功能都可以通过软件来设定、修改与控制。

定时器是单片机里最“活跃”的部件之一,很多程序、应用系统都离不开定时器。

定时器是单片机应用中解决某类复杂问题的最为有效的方法,应用很广泛。

对于简单的应用场合,时间要求较长,不算很精确的场合,用起来相对比较简单。

我们本次课程设计基于定时器设计指示灯定时控制系统,希望通过这次课程设计,可以很好的掌握定时器的原理和应用方法。

一、课题介绍

1.1课题设计内容:

用AT89S51的定时/计数器T0产生2秒钟的定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2秒,也就是说,开始L1指示灯以0.2秒的速率闪烁,当2秒定时到来之后,L2开始以0.2秒的速率闪烁,如此循环下去。

0.2秒的闪烁速率也由定时/计数器T0来完成。

二、整体方案设计

采用40脚、片内带8kBFlashROM的AT89S51单片机作为控制核心,通过定时器产生定时来控制P1口的4个LED灯,一旦按下P3.2的按键便可实现暂停闪烁,再按一次接着进行闪烁,按键服务通过查询的方式实现。

指示灯定时控制系统结构框图

三、系统硬件设计

指示灯定时控制系统分别由控制模块,LED灯显示模块,按键模块组成。

3.1控制模块

主控制器采用AT89S51。

AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

AT89S51具有如下特点:

40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

AT89S51中的并行I/O口P0~P3引脚:

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为低八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口除了作为普通I/O口,还有第二功能:

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(T0定时器的外部计数输入)

P3.5T1(T1定时器的外部计数输入)

P3.6/WR(外部数据存储器的写选通)

P3.7/RD(外部数据存储器的读选通)

其中,我们选用P1.0~P1.3作为我们LED的输出端口,P3.0和P3.1作为读入写入程序的端口,用ISP下载器烧录程序。

AT89S51的晶振及复位电路按典型电路设计,元器件参数如图,晶振频率选为12MHz。

PDIP封装的AT89S51管脚图控制模块原理图

3.2LED灯显示模块

通过共阳极接入到P1.0~P1.3口,每个LED灯加上分压电阻,防止电流过大损坏LED元件,原理图如下:

LED灯显示模块原理图

3.3按键模块组成

通过P3.2口接入,按键另一端接地。

按键模块原理图

3.4电路原理图

本电路需要+5V电压,直接用USB座口通过电源适配器供电,电路图如下:

DXP制作的电路图

PCB印刷图:

3.5元件清单

序号

元件

数量

1

STC51单片机

2

晶振

3

30pF电容

4

LED灯

5

1k电阻

6

220Ω电阻

7

10k电阻

8

10uF极性电容

9

USB母座接口

10

自锁开关

11

四引脚按键

12

排针

13

铜板

四、系统软件

4.1程序设计内容

我们运用汇编语言来设计程序。

汇编语言(AssemblyLanguage)是面向机器的程序设计语言。

在汇编语言中,用助记符(Memoni)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,如此就增强了程序的可读性并且降低了编写难度,象这样符号化的程序设计语言就是汇编语言,因此亦称为符号语言。

使用汇编语言编写的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转换成机器指令。

汇编程序将符号化的操作代码组装成处理器可以识别的机器指令,这个组装的过程称为组合或者汇编。

因此,有时候人们也把汇编语言称为组合语言。

AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。

只要通过设置特殊功能寄存器TMOD,即可完成。

定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。

定时/计数器方式选择寄存器(TMOD)----TMOD寄存器是一个专用寄存器,用于控制两个定时计数器的工作方式,TMOD可以用字节传送指令设置其内容,但不能位寻址。

TMOD主要是用于选定定时器的工作方式;

TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。

当定时器工作在计数方式时,外部事件通过引脚T0(P3.4)和T1(P3.5)输入。

现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的0.2秒和2秒的定时,因此,我们必须通过软件来处理这个问题,我们设定取T0的定时为50ms,即要定时0.2秒需要经过4次的50ms的定时,需要2秒需要经过40次50ms的定时,通过这样来实现我们的时间需要。

通过查阅资料:

TMOD寄存器结构

D7

D6

D5

D4

D3

D2

D1

D0

GATA

M1

M0

←T1方式字段→

←T0方式字段→

M1M0

模式

说明

00

13位定时(计数)器,TH高8位和TL的低5位

01

16位定时/计数器

10

自动重装入初值的8位定时/计数器

T0分成两个独立的8位计数器,T1没有模式3

根据上表,设定TMOD初值为00000001B,即TMOD=01H。

给T0定时/计数器的TH0,TL0装入预置初值

0.05=(65536-T0初值)×

1/12000000×

T0初值=15536=3CB0H

TH0=3CHTL0=B0H

4.2程序框图

4.2.1T0中断服务程序框图

4.2.2主程序流程图

主程序主要是通过定时器产生50ms的定时,然后用循环的次数来达到我们所需要的0.2s和2s定时,然后在不同的LED灯进行不断的取反达到闪烁的目的。

其中,我们加入了暂停功能,用查询方式实现,只要查询到按键有信号就暂停,查询到第二次的信号就返回主程序。

4.3汇编程序源程序

TIME2SEQU30H;

TIME2S等价于30H,用于计算2s的时间

TIME02SEQU31H;

TIME02S等价于31H,用于计数是否达到4个50ms,即0.2s

NUMEQU32H;

NUM等价于32H,NUM用于标记led的号数

FLAGEQU33H;

FLAG等价于33H,用于标记按键信号

ORG00;

程序存放在存储器00H开始的单元

CPLP1.0;

将P1.0的高电平取反变为低电平,准备执行主程序

LJMPSTART;

跳转到START标号地址执行程序

ORG0BH;

定时器0的矢量地址

LJMPINT_T0

START:

MOVTIME2S,#00H;

赋予TIME2S的初值为0

MOVTIME02S,#00H;

赋予TIME02S的初值为0

MOVNUM,#00H;

赋予NUM的初值为0

MOVTMOD,#01H;

设置工作模式1

MOVTH0,#03CH;

赋定时器的初值,定时时间为50ms

MOVTL0,#0B0H

SETBTR0;

启动定时器0

SETBET0;

打开中断

SETBEA;

打开CPU中断

SJMP$;

等待中断

INT_T0:

重新装入定时器初值

INCTIME2S;

TIME2S计数

MOVA,TIME2S

CJNEA,#40,NEXT;

TIME2S没有达到40次就跳转到NEXT,否则按顺序执行

重新赋0

INCNUM;

NUM计数

MOVA,NUM

CJNEA,#04H,NEXT;

NUM没有达到4次就跳转到NEXT

重新赋0

NEXT:

LCALLSCAN;

调用按键扫描子程序,用查询方式

INCTIME02S;

TIME02S计数

MOVA,TIME02S

CJNEA,#4,DONE;

如果TIME02S没有达到4次,即4×

50ms=0.2s,就跳转到DONE

MOVTIME02S,#00H;

重新赋0,以便计算下一个0.2s

MOVA,NUM

CJNEA,#00H,CH1;

NUM为0,将P1.0的led灯不断取反,以便其可以闪烁

CPLP1.0

SJMPDONE

CH1:

CJNEA,#01H,CH2;

NUM为0,将P1.1的led灯不断取反,以便其可以闪烁

CPLP1.1

CH2:

CJNEA,#02H,CH3;

NUM为1,将P1.2的led灯不断取反,以便其可以闪烁

CPLP1.2

CH3:

CJNEA,#03H,CH4;

NUM为2,将P1.3的led灯不断取反,以便其可以闪烁

CPLP1.3

CH4:

DONE:

RETI;

返回中断

SCAN:

MOVP3,#0FFH;

先将P3的端口全部置1

MOVFLAG,#00H;

把标记置0

JNBP3.2,TT0;

如果按键端口P3.2检测不到低电平,就返回到主程序

RET

START1:

如果按键按下,即低电平,跳转到TT0

AJMPSTART1

TT0:

LCALLD1MS;

调用延时子程序,

如果检测不到高电平,则继续等待按键松开

INCFLAG;

按键松开,FLAG标记为1,表示按键一次完成

MOVA,FLAG

CJNEA,#01H,GOBACK;

如果FLAG标记为1,则返回到START1,继续检测按键,检测到第二次按键的时候,FLAG标记为2,程序跳转到GOBACK,通过该子程序返回到主程序继续运行,从而起到按键一次暂停,再按一次继续运行的作用

AJMPSTART1;

D1MS:

MOVR7,#10;

延时5ms,进行按键消抖

D1:

MOVR6,#250;

DJNZR6,$;

DJNZR7,D1;

RET;

GOBACK:

END

4.4程序功能扩展

4.4.1按键程序设计

把按键设计在P3.2,用于检测按键是否按下,按键另一端接地,按键按下时为低电平,我们通过检测P3.2口是否为低电平作为按键按下的信号,延时5ms后继续检测按键是否为高电平,若为高电平证明此次按键已经松开,一次按键完成,用FLAG标志为1。

如果FLAG=1,按键扫描程序SCAN继续等待P3.2的下一次低电平,即第二次按键,如果检测到第二次按键完成,FLAG=FLAG+1=2,如果FLAG≠1,立即返回到主程序继续运行,否则继续扫描按键状态,从而起到暂停的作用。

4.4.2按键的消抖

根据查阅相关资料,我们获悉,其实,作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说,当我们按下一个按键时,总希望某个命令只执行一次,而在按键按下的过程中,不要有干扰进来,因为,在按下的过程中,一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。

因此在按键按下的时候,要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况下,我们可以采用电容来滤除掉这些干扰信号,但实际上,会增加硬件成本及硬件电路的体积,这是我们不希望,总得有个办法解决这个问题,因此我们可以采用软件滤波的方法去除这些干扰信号,一般情况下,一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。

具体的一个按键从按下到释放的全过程的信号图如上图所示。

从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时5ms以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程。

从而提高了系统的可靠性。

由于要求每按下一次,命令被执行一次,直到下一次再按下的时候,再执行一次命令,因此从按键被识别出来之后,我们就可以执行这次的命令,所以要有一个等待按键释放的过程,显然释放的过程,就是使其恢复成高电平状态。

所以我们在程序中加入D1MS的延时子程序,起到消抖的作用。

延时程序机器周期

MOVR7,#101

MOVR6,#2501

DJNZR6,$2

DJNZR7,D12

RET2

程序中:

内循环一次所需机器周期数=2个

内循环共循环250次的机器周期数=2×

250=500个

外循环一次所需机器周期数=(2×

250+1+2)=503个

外循环共循环10次,所以该延时程序总机器周期=(503×

10+1+2)=5033个

即延时5033μs≈5ms

五、系统调试

打开KeiluVision2,新建一个工程,并且新建一个文本,把以上程序粘贴进去,保存为以”.ASM”后缀的文件,添加到工程的”SourceGroup1”中,设置目标”target1”属性,选择输出选项卡,勾选”生成HEX文件(如图),确定。

选择工程→重新构造所有目标,状态框没有错误之后,生成HEX文件成功。

HEX文件在工程的目录下。

PROTEUS仿真

把生成的HEX文件放入到PROTEUS中的电路图仿真,与预期效果一样。

如图:

六、系统功能

下载好程序之后,插上电源,打开自锁开关,开始L1指示灯以0.2秒的速率闪烁,当2秒定时到来之后,L2开始以0.2秒的速率闪烁,如此循环下去。

按下按键时,闪烁暂停,再按一次按键,继续从断点处闪烁。

总结

单片机课程设计不仅是学习书本的内容,也需要从实践中掌握知识。

这门课程确实让我们受到了很多的启发,并学到了很多的知识。

我在本次课程设计中主要担任程序的编写,包括扩展功能按键的程序实现方式。

加深了我对单片机指令系统中汇编语言各种基本语句的意义及汇编语言程序设计的基本知识和方法,以及单片机与其他设备相连接的输入输出中断等接口技术的理解。

使我们从硬件软件的结合上理论联系实际,提高动手能力,从而全面掌握单片机的应用。

课设过程中,由于是第一次做单片机,遇到了很多的问题。

但是我们敢于面对,团结合作,问题都得到了很好的解决方法。

加强了团队合作的精神。

在焊接电路过程中,我们需要互相学习焊接技巧,互相帮助、互相鼓励。

在编写程序的时候,善于把自己好的算法给大家分享,不会的时候虚心向同学和老师请教。

虽然收获很多,但是仍然发现自己很多的不足,例如对接口技术不够了解,对模拟电路的掌握不够。

这次课程设计,提高了我的自主学习能力和动手能力,更加清楚认识我自己的不足,让我受益匪浅。

参考文献

[1]赵全利.单片机原理及应用教程.北京:

机械工业出版社

[2]徐建军.MCS-51系列单片机应用及接口技术.北京:

人民邮电出版社

[3]夏继强.单片机实验与实践教程.第2版.北京:

北京航空航天大学出版社

附录

作品实物图

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

当前位置:首页 > 总结汇报 > 学习总结

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

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