《单片机技术》课件项目三 单片机旋转灯与报警器设计_第1页
《单片机技术》课件项目三 单片机旋转灯与报警器设计_第2页
《单片机技术》课件项目三 单片机旋转灯与报警器设计_第3页
《单片机技术》课件项目三 单片机旋转灯与报警器设计_第4页
《单片机技术》课件项目三 单片机旋转灯与报警器设计_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、学习目标1。了解按键识别检测原理。2。掌握蜂鸣器的使用。3。掌握中断的使用。二、学习任务本项目任务分解为具体3个学习任务:任务一外部中断的使用;任务二蜂鸣器的使用;任务三单片机旋转灯与报警器设计。三、任务分解任务一外部中断的使用【任务描述】

单片机系统运行时,通常需要应用输入设备实现人工参与控制。键盘是由若干个按键组成的,是单片机最简单也是最常用的输入设备。操作人员通过键盘输入数据或命令,实现简单的人机对话。本任务要求设计1个独立按键,单按下改键时,对应的LED亮,再一次按下,LED熄灭,如此重复。【任务分析】

当按键被按下时,电平被拉成低电平,此电平作为作为单片机的输入,单片机接收到低电平时,认为产生了按键动作,执行相应的程序。一、中断的概念

CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);

CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。【相关知识】MCS-51单片机的中断系统结构执行主程序主程序继续执行主程序断点中断请求中断响应执行中断处理程序中断返回引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。

随着计算机技术的应用,人们发现中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点:

分时操作。CPU可以分时为多个I/O设备服务,提高了计算机的利用率;实时响应。CPU能够及时处理应用系统的随机事件,系统的实时性大大增强;可靠性高。CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。数据的输入/输出传送方式查询传送方式(LOOKUP):传送前一方先查询另一方的状态,若已经准备好就传送,否则就继续查询/等待中断传送方式(IRQ):一方通过申请中断的方式与另一方进行数据传送无条件传送方式:一方对另一方来说总是准备好的直接存储器存取方式(DMA):双方直接通过总线传送数据,不经CPU中转

数据传送的双方平时各自做自己的工作,一旦甲方要求与乙方进行数据传送,就主动发出信号提出申请,乙方接到申请后若同意传送,安排好当前的工作,再响应与甲方发生数据传送。完事后,回去继续做打断前的工作。中断功能强弱是计算机性能优劣的重要标志

提高CPU效率

解决速度矛盾

实现并行工作

应付突发事件……中断传送方式特点①中断源②中断申请③开放中断④保护现场⑤中断服务⑥恢复现场⑦中断返回中断涉及的几个环节(前面提到的甲方)(甲方发出信号提出申请)(乙方同意传送)(安排好当前的工作)(响应乙方的要求)(完事后,回去……)(继续做打断前的工作)单片机的中断源及TCONCPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。51子系列允许5个(52子系列6个)中断源:

2个外部中断请求:INT0,INT12个片内定时器/计数器T0和T1中断请求:

TF0,TF1,(TF2——52子系列有T2)

1个串行口中断请求:TI/RICPU识别中断申请的依据:定时器控制寄存器TCON(88H)TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0TCONTF0/TF1:定时器溢出中断申请标志位:

=0:定时器未溢出;

=1:定时器溢出申请中断,进中断后自动清零。TR0/TR1:定时器运行启停控制位:

=0:定时器停止运行;

=1:定时器启动运行。TCON:Timer控制寄存器,是管理定时器工作的SFR(其中低4位管外部中断)定时器控制寄存器TCON(88H)TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0TCONIE0/IE1:外部中断申请标志位:

=0:没有外部中断申请;

=1:有外部中断申请。IT0/IT1:外部中断请求的触发方式选择位:

=0:在INT0/INT1端申请中断的信号低电平有效;=1:在INT0/INT1端申请中断的信号负跳变有效.TCON:Timer控制寄存器,低4位管理外部中断

在CPU已经开放了外部中断允许的前提下:

在INT0/INT1引脚输入一个负脉冲或低电平,

TCON寄存器中的IE0/IE1标志位自动变“1”,

检测到IE0/IE1变“1”后,将产生指令:

LCALL0003H(/0013H)执行中断服务程序,

并将IE0/IE1标志位自动清“0”,以备下次申请。外部中断(INT0,INT1)申请过程

PT2PSPT1

PX1

PT0

PX0IP中断优先级控制寄存器IP(0B8H)PX0/PX1:INT0/1优先级控制位:

=0时属低优先级;=1时属高优先级。PT0/PT1/PT2:T0/1/2中断优先级控制位:

=0时属低优先级;=1时属高优先级。PS1:串行口中断优先级控制位:

=0时属低优先级;=1时属高优先级。对同时发生多个中断申请时:☞不同优先级的中断同时申请

——先高后低(很难遇到)☞相同优先级的中断同时申请

——按序执行(很难遇到)☞正处理低优先级中断又接到高级别中断

——高打断低☞正处理高优先级中断又接到低级别中断

——高不理低中断优先级处理原则☞没有同级的中断或更高级别的中断正在处理;在中断源提出了中断申请且CPU此前已经允许中断的前提下,还须满足以下三个条件:☞正在执行的指令必须执行完最后1个机器周期;☞若正在执行RETI,或正在访问IE或IP寄存器,须执行完上述指令和下一条指令以后方能响应中断。

EA—ET2ESET1EX1ET0EX0IE中断允许寄存器IE(0A8H)EX0/EX1/ET1/ET0/ES位:分别是INT0/1,Timer0/1,串行口的中断允许控制位:=0时禁止中断;=1时允许中断。ET2:T2中断允许控制位(仅52子系列有)

=0时禁止中断;=1时允许中断。EA:总的中断允许控制位(总开关):

=0时禁止全部中断;=1时允许中断。中断系统硬件结构注:各中断允许控制位=0,开关断开;=1,开关接通IE0EX0TF0IE1TF1TIESET1EX1ET0外部中断请求0外部中断请求1内部定时器0内部定时器1内部串行口TRRIIE寄存器EA位IP寄存器各单路开关总开关中断源标志位查询机构高中断级中断请求低中断级中断请求中断入口中断源标志位INT0INT1中断入口中断源标志位EX0ET0EX1EX0ET0ET1EX1EX0ET0ESET1EX1EX0ET0IE寄存器IP寄存器中断入口IE寄存器IP寄存器中断入口中断入口IE寄存器IP寄存器80C51中断系统的结构

80C51的中断系统有5个中断源(8052有6个)

,2个优先级,可实现二级中断嵌套

。80C51的中断源

一、中断源1、(P3.2)。可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。2、(P3.3)。可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。

3、TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。

4、TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。

5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。

中断请求标志1、TCON的中断标志IT0(TCON.0),外部中断0触发方式控制位。当IT0=0时,为电平触发方式。当IT0=1时,为边沿触发方式(下降沿有效)。IE0(TCON.1),外部中断0中断请求标志位。IT1(TCON.2),外部中断1触发方式控制位。IE1(TCON.3),外部中断1中断请求标志位。TF0(TCON.5),定时/计数器T0溢出中断请求标志位。TF1(TCON.7),定时/计数器T1溢出中断请求标志位。

2、SCON的中断标志RI(SCON.0),串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。同样,RI必须由软件清除。TI(SCON.1),串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。

一、中断允许控制

CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。80C51中断的控制

EX0(IE.0),外部中断0允许位;ET0(IE.1),定时/计数器T0中断允许位;EX1(IE.2),外部中断0允许位;ET1(IE.3),定时/计数器T1中断允许位;ES(IE.4),串行口中断允许位;EA(IE.7),CPU中断允许(总允许)位。二、中断优先级控制

80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的

。PX0(IP.0),外部中断0优先级设定位;PT0(IP.1),定时/计数器T0优先级设定位;PX1(IP.2),外部中断0优先级设定位;PT1(IP.3),定时/计数器T1优先级设定位;PS

(IP.4),串行口优先级设定位;PT2(IP.5),定时/计数器T2优先级设定位。PX0(IPH.0),外部中断0优先级设定位;PT0(IPH.1),定时/计数器T0优先级设定位;PX1(IPH.2),外部中断0优先级设定位;PT1(IPH.3),定时/计数器T1优先级设定位;PS

(IPH.4),串行口优先级设定位;PT2(IPH.5),定时/计数器T2优先级设定位。而80C52单片机有四个中断优先级,即可实现四级中断服务嵌套。每个中断源的中断优先级由中断优先级寄存器IP和IPH中的相应位的状态来规定的

同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:设置52单片机的4个中断源,使他们的优顺序为T1,INT1,INT0,T0.

IPH=0X08; PT1=1;

IP=0X40; PX1=1;80C51单片机的中断优先级有三条原则:CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。正在进行的低优先级中断服务,能被高优先级中断请求所中断。

为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。一、中断响应条件中断源有中断请求;此中断源的中断允许位为1;

CPU开中断(即EA=1)。同时满足时,CPU才有可能响应中断。中断响应条件和时间

80C51单片机中断处理过程中断服务的进入:

CPU执行程序过程中,在每个机器周期的S5P2期间,中断系统对各个中断源进行采样。这些采样值在下一个机器周期内按优先级和内部顺序被依次查询。如果某个中断标志在上一个机器周期的S5P2时被置成了1,那么它将于现在的查询周期中及时被发现。接着CPU便执行一条由中断系统提供的硬件LCALL指令,转向被称作中断向量的特定地址单元,进入相应的中断服务程序。

遇以下任一条件,硬件将受阻,不产生LCALL指令:CPU正在处理同级或高优先级中断;当前查询的机器周期不是所执行指令的最后一个机器周期。即在完成所执行指令前,不会响应中断,从而保证指令在执行过程中不被打断;正在执行的指令为RET、RETI或任何访问IE或IP寄存器的指令。即只有在这些指令后面至少再执行一条指令时才能接受中断请求。

若由于上述条件的阻碍中断未能得到响应,当条件消失时该中断标志却已不再有效,那么该中断将不被响应。就是说,中断标志曾经有效,但未获响应,查询过程在下个机器周期将重新进行。中断响应时间响应时间--从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。(1)最快响应时间以外部中断的电平触发为最快。从查询中断请求信号到中断服务程序需要三个机器周期:

1个周期(查询)+2个周期(长调用LCALL)(2)最长时间若当前指令是RET、RETI和IP、IE指令,紧接着下一条是乘除指令发生,则最长为8个周期:2个周期执行当前指令(其中含有1个周期查询)+4个周期乘除指令+2个周期长调用=8个周期。将相应的优先级状态触发器置1(以阻断后来的同级或低级的中断请求)。执行一条硬件LCALL指令,即把程序计数器PC的内容压入堆栈保存,再将相应的中断服务程序的入口地址送入PC。(P116)执行中断服务程序。中断响应过程

中断响应过程的前两步是由中断系统内部自动完成的,而中断服务程序则要由用户编写程序来完成。

中断返回RETI指令的具体功能是:将中断响应时压入堆栈保存的断点地址从栈顶弹出送回PC,CPU从原来中断的地方继续执行程序;将相应中断优先级状态触发器清0,通知中断系统,中断服务程序已执行完毕。

注意,不能用RET指令代替RETI指令。在中断服务程序中PUSH指令与POP指令必须成对使用,否则不能正确返回断点。

若外部中断定义为电平触发方式,中断标志位的状态随CPU在每个机器周期采样到的外部中断输入引脚的电平变化而变化,这样能提高CPU对外部中断请求的响应速度。但外部中断源若有请求,必须把有效的低电平保持到请求获得响应时为止,不然就会漏掉;而在中断服务程序结束之前,中断源又必须撤消其有效的低电平,否则中断返回之后将再次产生中断。

电平触发方式适合于外部中断输入以低电平输入且中断服务程序能清除外部中断请求源的情况。例如,并行接口芯片8255的中断请求线在接受读或写操作后即被复位,因此,以其去请求电平触发方式的中断比较方便。

若外部中断定义为边沿触发方式,在相继连续的两次采样中,一个周期采样到外部中断输入为高电平,下一个周期采样到为低电平,则在IE0或IE1中将锁存一个逻辑1。即便是CPU暂时不能响应,中断申请标志也不会丢失,直到CPU响应此中断时才清零。这样,为保证下降沿能被可靠地采样到,外中断引脚上的高低电平(负脉冲的宽度)均至少要保持一个机器周期(若晶振为12MHz时,为1微秒)。

中断服务程序函数名()interruptnusingm{}其中,中断函数只能用void说明,表示没有返回值,同时也表示没有形式参数,即不能传递参数。interrupt后面的n是中断号,其值从0开始,以AT89C51单片机为例,编号从0~4,分别对应外部中断0,定时器/计数器0中断、外部中断1、定时器/计数器1中断和串行口中断。关键字using后面的n是所选择的寄存器组,取值范围是0-3。定义中断函数时,using是一个选项,可以省略不用。如果不用则由编译器选择一个寄存器组作为绝对寄存器组。例如定时器/计数器1中断源的编号是3,下面语句voidtimer()interrupt3{LED=~LED;//定时时间到,对LED 取反

}定义定时器/计数器1中断服务程序名字为timer(),使用interrupt关键字,定时器/计数器1对应的中断号是3号。【任务实施】程序代码如下:#include"reg51.h"#defineucharunsignedchar#defineuintunsignedintsbitLED=P1^0;voiddelayms(uintt)//延时程序{uinti,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}voidint0_init()//外部中断0初始化程序{EA=1;//开CPU总中断

EX0=1;//允许外部中断0中断

IT0=1;//设置下降沿触发

while(1);//原地踏步,等待中断产生}voidint0()interrupt0//外部中断0的中断服务程序名字取为int0{LED=~LED; //进入中断,就对P1.0引脚电平取反}voidmain()//主程序{ int0_init(); //调用外部中断0初始化子程序}【进阶提高】中断程序的编写,也可以用查询方式来实现。让CPU老是去查询外部中断有没有,执行if(IE0==1)到底为真还是为假,便可以知道有没有外部中断0事件产生。下面给出本任务对应的查询程序:#include"reg51.h"#defineucharunsignedchar//包含单片机寄存器的头文件#defineuintunsignedint//宏定义,定义uint为无符号整型

sbitLED=P1^0;//P1.0引脚定义为LEDvoidmain(){while(1){EA=1;//开放中断

EX0=1;//允许外部中断

IT0=1;//外部中断0为边沿触发方式

if(IE0==1){//IE0=则产生了外部中断0请求

LED=~LED;//上面条件为真,则LED取反

IE0=0; //清除外部中断0标志,以便检测下一次中断

}}}任务二蜂鸣器的使用【任务描述】学习单片机驱动蜂鸣器的知识,AT89C51单片机P2.7引脚驱动一有源蜂鸣器,让蜂鸣器有规则的鸣响。【任务分析】需要知道蜂鸣器的基本硬件结构,学习单片机驱动蜂鸣器的驱动方法。利用AT89C51单片机的P2.7引脚输出电位的变化,控制蜂鸣器的鸣叫,P2.7引脚的电位变化可以通过指令来控制。蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来驱动振动膜发声的。因此需要一定的电流才能驱动它,而单片机I/O引脚输出的电压较小。单片机输出的TTLK电平基本驱动不了蜂鸣器,因需要增加一个放大电路。可以用三极管作为放大电路。1.蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、电话机、定时器等电子产品中作发声器件。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。【相关知识】生日贺卡万用表通断报警压电式:电磁式:蜂鸣器的分类及结构蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型1.压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。

多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。

压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。2.电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。

接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

电磁式蜂鸣器分类

有源蜂鸣器和无源蜂鸣器教你区分有源蜂鸣器和无源蜂鸣器现在市场上出售的一种小型蜂鸣器因其体积小(直径只有11mm)、重量轻、价格低、结构牢靠,而广泛地应用在各种需要发声的电器设备、电子制作和单片机等电路中。有源蜂鸣器和无源蜂鸣器的外观如图a、b所示。图:有源和无源蜂鸣器的外观A)有源b)无源从图a、b外观上看,两种蜂鸣器好像一样,但仔细看,两者的高度略有区别,有源蜂鸣器a,高度为9mm,而无源蜂鸣器b的高度为8mm。如将两种蜂鸣器的引脚都朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。有源蜂鸣器直接接上额定电源就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。有源蜂鸣器和无源蜂鸣器。有源蜂鸣器内部带振荡源,无源蜂鸣器内部不带振荡源。这里所说的“源”不是指“电源”,而是指“振荡源”。有源蜂鸣器和无源蜂鸣器的主要差别是对输入信号的要求不一样,有源蜂鸣器工作的理想信号是直流电,无源蜂鸣器工作的理想信号是方波。无源蜂鸣器接直流电是不会工作的有源蜂鸣器和无源蜂鸣器的工作条件驱动电路周期T等于频率f的倒数T=1/f我们让蜂鸣器发出1KHZ的声音那么周期是1/1000hz=1MST1/2T1/2T周期与频率的关系【任务实施】单片机驱动有源蜂鸣器电路对应的程序代码如下:#include<reg51.h>#defineucharunsignedcharsbitSPK=P2^7;//定义蜂鸣器引脚voidDelay(uchart)//延时函数{for(;t>0;t--);}voidmain(void){unsignedintCYCLE=500,PWM_LOW=0;//定义周期并赋值while(1){ SPK=1; Delay(500); for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)//高低电平交替变化

{ SPK=0; Delay(PWM_LOW); SPK=1; Delay(CYCLE-PWM_LOW); } SPK=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)//高低电平交替变化

{ SPK=0; Delay(PWM_LOW); SPK=1; Delay(CYCLE-PWM_LOW); }}}【进阶提高】在本任务基础上,实现蜂鸣器渐变鸣声,试录入下面程序,并调试。//头文件:#include"reg51.h"//引脚定义:sbitSPK=P2^7; //定义蜂鸣器//函数定义: voiddelay(unsignedinttime);//延时子函时,//主函数,C语言的入口函数: voidmain(void){unsignedinttt; //作为延时量

unsignedchari; while(1){ //主程序循环

tt=60000;

for(i=0;i<30;i++){ //循环30次输出,时间从长渐变到短

SPK=0; delay(tt); SPK=1; delay(tt); tt-=2000; //每循环一次时间量减2000 } SPK=1; //关闭蜂响器,

delay(50000); //等待一会再开始循环

delay(50000); delay(50000); } }//延时子函数voiddelay(unsignedinttime){ while(time--);}任务三单片机旋转灯与报警器设计【任务描述】报警器与旋转灯,是一种为防止或预防某事件发生所造成的后果,以声、光两种形式来提醒或警示我们应当采取某种行动的电子产品。随着科技的进步,机械式报警器越来越多地被先进的电子报警器代替,经常应用于系统故障、安全防范、交通运输、医疗救护、应急救灾、感应检测等领域,与社会生产密不可分。设计一个简易的信号灯交替闪烁和喇叭不断示警的模型。接上电源,绿色LED灯亮,说明该产品处于运行状态,当有人按下按钮喇叭就会报警,红色LED灯闪烁,再按下时喇叭停止报警,红色LED灯不亮且不闪烁。【任务分析】按下按键时,产生了外部中断0事件,单片机检测到后,驱动蜂鸣器开始和LED开始旋转点亮,在程序中设置了一个外部标志flag,在外部中断0事件的中断服务程序里,对flag取反。在蜂鸣器和LED开始旋转子程序里,读取flag标志,如果flag标志为真,就旋转点亮LED和驱动蜂鸣器,否则熄灭LED和停止蜂鸣器。【相关知识】外部中断会有抖动,如果不消除会导致读出数值的不准确。如果设置了边沿触发,进中断以后要延时一段时间,大约10ms,然后再开始读数据。读完数据以后,出中断。具体看一实例:voidinter0()interrupt0using1{EA=0;//先关中断

if(INT0Pin==0){//去抖动开始

Delay_us(20); if(INT0Pin==0){//是真的按下就执行中断服务程序

flag=~flag;} } EA=1;//允许中断

}【任务实施】报警器与旋转灯电路对应的程序代码如下:#include"reg51.h"#include"intrins.h"#defineucharunsignedchar#defineuintunsignedint#defineu8unsignedchar#defineLEDP2ucharc=0x01;bitflag=0;sbitBEEP=P3^7;//定义喇叭端口//蜂鸣器高低电平控制codeu8alarm_tab[200]={210,210,210,210,210,210,219,219,219,219,219,218,218,218,217,217,217,216,216,215,215,215,214,214,213,213,212,211,211,210,210,209,208,208,207,206,206,205,204,204,203,202,201,201,200,199,198,198,197,196,195,195,194,193,192,192,191,190,190,189,188,187,187,186,185,185,184,183,183,182,181,181,180,180,179,179,178,178,177,177,176,176,176,175,175,174,174,174,174,173,173,173,173,173,172,172,172,172,172,172,172,172,172,172,172,172,173,173,173,173,173,174,174,174,174,175,175,175,176,176,177,177,178,178,179,179,180,180,181,181,182,183,183,184,185,185,186,187,187,188,

189,189,190,191,192,192,193,194,195,195,196,197,198,198,199,200,201,201,202,203,204,204,205,206,206,207,208,208,209,210,210,211,211,212,212,213,214,214,215,215,215,216,216,217,217,217,218,218,218,219,219,219,219,219,210,210,210,210,210,210};voiddelayms(unsignedintxms){//延时函数

uinti,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);}voidDelay_us(unsignedchart){while(--t);}voidbeep(bitx)//蜂鸣器响或关闭子程序

{uinti;if(x){for(i=0;i<800;i++){Delay_us(alarm_tab[i/4]-18);BEEP=!BEEP;}}else{BEEP=0;}}voidxuanzhuan(bitx){//LED旋转子函数

uinti;if(x){for(i=0;i<8;i++){LED=c;delayms(10);c=_crol_(c,1);}}else{LED=0x00;}}voidmain(){EA=1;EX0=1;PX0=1;IT0=1;//外部中断0下降沿触发

LED=0x00;//熄灭灯

while(1) { beep(flag);//调用蜂鸣器子程序

xuanzhuan(flag); //调用旋转灯子程序

}; }voidinter0()interrupt0using1//外部中断0中断服务子程序

{flag=~flag;}【进阶提高】把外部中断0扩展为4个外部中断使用,如图,按下KEY1键,对应的LED1灯亮;按下KEY2键

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论