51单片机按键控制按下K1四个led灯循环亮,再按一下全灭,c程序怎么写

如题所述

在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。

#include<reg51.h>

#include<intrins.h>

仿真图效果。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-04-03
简单说下程序要点。首先应该对P0和P1端口初始化,P0.0一P0.3初始化为1,LED灯全灭,P1.0一P1.3初始化为1,当外部引脚上对应的按钮按下时,在相应的I/O位会读到0。
循环点亮LED比较简单,只要逐位写人0,延时一段时间,再恢复写1,不断循环就可以实现点亮了。耍全灭时再次写入全1。
检查k1按钮要注意,因手按下时间长短不定,会造程序多次读到按下状态,所以最好以检测按钮释放为一次有效按下。另外机械按钮在按下和释放时有可能会有抖动造成软件误判,在程序中还应加入滤除抖动的判断。
若想要具体代码可网上搜索。追问

这个思路我看的明白,一直循环灯亮应该怎么写呢,c程序,

追答

可定义一个无符号全局或静态变量 i, 如下所示:
unsigned char i
变量i用于点灯的计数变量。
用定时器做一个0.5秒定时程序(定时器中断例子网上可以搜索),在0.5秒定时程序中写入以下代码:
……
if (i>3) i=0 ;
switch ( i )
{
//---点亮D1,熄灭其它LED ---
case 0 :
P0=0xFE ;
break ;
//--- 点亮D2,熄灭其它LED ---
case 1 :
P0=0xFD ;
break ;
//--- 点亮D3,熄灭其它LED ---
case 2 :
P0=0xFB ;
break ;
//--- 点亮D4,熄灭其它LED ---
case 3 :
P0=0xF7 ;
break ;
}
i++ ;
……
这样采用定时中断方法,实现0.5秒循环点亮LED。利用中断的优点是代码运行效率高。如果要改变亮灯时间,修改定时时间即可。

第2个回答  2019-04-02
看到女朋友生病了好难受,真希望生病的是我

那样我就可以请假不用上班了
第3个回答  2019-04-02
、你看看单片机数据手册你的单片机P0口内部上拉没,一般的单片机P0口都是没上拉的,使用P0口一般都需要外部上拉.要么不使用P0口.2、
第4个回答  2019-04-02
手机丢了先别慌,想想丢在什么地方了,想起来了就去找找看。如果想不起来,那就赶紧去营业厅把你的手机卡挂失,防止别人捡到你的手机为所欲为,如果想起来是被人偷了,那就赶紧报警,尽管可能跟我的经历一样报警没什么鸟用,但不排除你会遇到一个好警察。
相似回答