51单片机实例讲解,由按钮控制流水灯程序
由按钮控制流水灯控制要求:在单片机的PP3.0口和P3.1口线上分别接上一个按钮SB1和SB2,P0口上接8只发光二极管LED1~LED8。当按下SB1时,8只发光二极管按方式一从LED1~LED8间隔1s交替正向流水点亮一次,即LED1亮→LED2亮→LED3亮→LED4亮→LED5亮→LED6亮→LED7亮→LED8亮。
当按下SB2时,8只发光二极管按方式二从LED1~LED8间隔1s依次点亮一次,即LED1亮→LED1+LED2亮→LED1+LED2+LED3亮→LED1+LED2+LED3+LED4亮→LED1+ LED2+LED3+LED4+LED5亮→LED1 +LED2 +LED3 +LED4 +LED5 +LED6亮→LED1 +LED2 + LED3 +LED4 +LED5 +LED6+LED7亮→LED1+LED2+LED3+LED4+LED5+LED6+LED7+ LED8亮。
(1)由按钮控制流水灯硬件电路(见图36)。
图36 由按钮控制流水灯接线原理图
(2)由按钮控制流水灯硬件电路元器件(见表14)。
表14 由按钮控制流水灯硬件电路元器件表
(3)由按钮控制流水灯程序流程图(见图37)。
图37 由按钮控制流水灯程序流程图 (a)主程序;(b)显示子程序
(4)由按钮控制流水灯程序。
4个中断应用实例讲解
【例1】 利用单片机的外部中断0响应按键开关的按键信号,当有按键按下时,单片机响应中断,并使内部某变量加1,硬件电路如图4-4所示。
图4-4 单片机外部中断检测按键电路图
C51源程序如下:
提示
将按键电路改为其他传感器电路,如光电传感器检测电路,霍尔传感器检测电路,热释电传感器检测电路等即可实现不同的检测控制功能。
【例2】 2个按健中断控制流水等灯的速度,按健K0用以减慢速度控制,按健K1用以加快速度控制,硬件电路如图4-5所示。
图4-5 流水灯控制电路图
C51源程序如下:
【例3】 利用单片机外部中断即时实现不同方式的流水灯控制,L2开关实现2只灯循环亮,L1开关实现1只灯循环亮,两个控制开关具有不同的优先级别,L2比L1具有更高的优先级。硬件电路如图4-6所示。
C51源程序如下:
图4-6 不同优先级别控制流水灯电路图
【例4】 利用单片机外部中断实现遥控解码。具体功能:通过电视机遥控器向单片机系统板上的一体化红外线接收头发射红外遥控编码信号,由于一体化红外线接收头的输出端与单片机的外部中断0相连,从而触发单片机产生中断,单片机根据红外遥控信号的组成对功能码进行识别,并通过P1口的发光二极管显示该功能码。
单片机与一体化红外接收头HS0038的引脚连接如图4-7所示,单片机与发光二极管的连接可以参照本章之前案例中的硬件电路图,这里省略未画出。
图4-7 HS0038引脚连接图
系统分析如下:
遥控编码脉冲信号通常由引导码、系统码、系统反码、功能码和功能反码组成。引导码由宽度为9ms的高电平和宽度为4.5ms的低电平组成。8位的系统码又称为识别码,主要是为了区分不同的控制系统,防止误动作。8位功能码也称为数据码,其代表相应的控制功能。8位的系统反码和功能反码的加入是为了校对传输过程中产生的差错提高抗干扰性能,遥控编码脉冲信号组成如图4-8所示。
图4-8 遥控编码脉冲信号的组成图
当遥控器上任意一个按键按下超过36ms时,LC7461芯片的振荡器使芯片激活,将发射一个特定的同步码头,对于接收端而言就是一个9ms的低电平,和一个4.5ms的高电平,这个同步码头可以使程序知道从这个同步码头以后可以开始接收数据。
解码的关键是如何识别“0”和“1”,采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”。其串行码波形如图4-9所示。
图4-9 0和1的构成串行码波形图
从上图中可以发现,位“0”、“1”均以0.565ms的高电平开始,不同的是低电平的宽度不同,“0”为0.56ms,“1”为1.685ms,所以可以根据低电平的宽度区别“0”和“1”。如果从0.565ms高电平过后,开始延时,0.56ms以后,若读到的电平为高,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.125ms,否则如果该位为“0”,读到的已是下一位的低电平,因此一般取(1.125ms+0.56ms)/2≈0.84ms。
C51源程序如下:
相关问答
51 单片机 ,按键 控制 流水灯 程序,懂的进!八个LED灯与 单片机 P1口...[最佳回答]假如,你的程序在执行key_scan();是触发了两次中断导致num>20,你的显示函数将永远被跳过,你应该写成if(num>20)��{���num=0;���display();�.....
keil软件用 单片机控制8个 LED流水 灯 来回点亮(C语言程序)?//==============================//8个LED闪烁//-------------------------------------#include//========...
【设计一个电路 控制 彩灯 的循环显示, 8个 小灯泡排成一行,小灯...[最佳回答]由于不知道你的单片机用的是什么,所以我只能简单说一下方法了.假设你用的是51系列.那么8051系列(包括很多,现在AT89S52算是还可以的,价钱便宜,功能...
单片机 怎么实现一个开关 控制 八 个灯 按一下亮一个按八下八 个灯 都亮汇编语言程序?一个开关控制八个灯;按一下亮一个;按八下八个灯都亮;按键接在P1.0;八个灯在P0,低电平灯亮KEYEQUP1.0ORG0000HMOVA,#11111111BWAIT:MOV......
8051 单片机 用汇编程序让八个LED 灯 每隔一秒亮一个,轮流亮(加说明啊,谢谢了)?设个定时器。然后一个端口,赋值1(高电平亮),如果低电平就赋值11111110b然后每隔一秒给它做个移位。不就完了。设个定时器。然后一个端口,赋值1(高电平亮),...
51 单片机8个灯 亮怎么解决?可以通过使用多路复用器来解决51单片机8个灯亮的问题。多路复用器是一种电子元件,可以将多个输入信号转换为一个输出信号。在这个问题中,我们可以使用一个8路...
单片机 求汇编语言设计一个彩 灯控制 系统,有4 个控制 开关,8盏LED灯?1、程序实现上应该不难,假设用3个8位变量来调节这三个灯,理想上可以得到256单色灰度效果。但通常能做到16等级灰度,也能看到一定效果。2、这三个PWM周期相同...
单片机 编程: 8个 流水 灯 每隔一秒亮一个,用中断的方式。求完整编程啊!(低电平亮的,而且只能有?unsignedintTimeCounter=0;主程序定时器初始化256分之一秒;while(1);//这段你自己写,因为不知道什么单片机,时钟多少。。。计数范围可能不够考虑累...uns...
51 单片机 c语言编程led 灯 1,3,5,7和2,4,6,8交替闪烁?假设你的8个LED是通过低电平来点亮,即LED负极连接P口,正极连接电源:1.当1,3,5,7亮时,我们的P2口状态以二进制表示应该是10101010,也就是0xAA,程序应该写成...
单片机 是如何点亮led九 个灯 的?单片机通过控制IO口的高低电平来点亮LED灯。首先,将LED的阳极连接到IO口,将LED的阴极连接到地。然后,将IO口设置为输出模式,并将对应的IO口输出高电平或低电...