单片机C语言写一条单片机中断程序编写,一上电就是LED闪烁,按下开关走中断里面的,LED一直亮,

查看: 16550|回复: 49
小白求助~ 按键控制LED,如何按一下松开,亮;按一下松开,闪烁;再按一下松开,灭。
本帖最后由 yqfans 于
03:40 编辑
我在做【按键控制LED实验】,如下:
程序如下:
int ledpin=11;//定义数字11 接口
int inpin=7;//定义数字7 接口
//定义变量val
void setup()
pinMode(ledpin,OUTPUT);//定义小灯接口为输出接口
pinMode(inpin,INPUT);//定义按键接口为输入接口
void loop()
val=digitalRead(inpin);//&&读取数字7 口电平值赋给val
if(val==LOW)//& & 检测按键是否按下,按键按下时小灯亮起
{ digitalWrite(ledpin,LOW);}
{ digitalWrite(ledpin,HIGH);}
————————————————————————————分割线
这个实验确实很简单,按着开关按钮别松开,为高电平,LED灯亮;松开按钮,为低电平,LED灯灭。
但现在问题来了,我想如何实现,按一下开关松开后,LED灯亮了;在按一下松开后,LED灯闪烁;在按下松开,LED灯灭了。如此循环。。。
因为生活中很多控制LED灯的开关都是这样的,这样只用一个按钮就解决了LED灯的开,状态切换和关闭三种状态,很方便。
希望知道的大神们指点下 ^_^
连接图如下:
(58.53 KB, 下载次数: 34)
03:21 上传
按钮控制LED
{:soso_e160:}{:soso_e160:}{:soso_e160:}{:soso_e160:}{:soso_e160:}{:soso_e160:}{:soso_e160:}{:soso_e160:}&&坐等朋友们来讨论
设置一个变量,记录当前的状态,例如 0灭 1亮 2闪烁。
每按一次循环换一个。0-&1-&2-&0
程序需要的修改还有要处理键的抖动。和每次一变的处理,
需求很好,自己弄一弄。
初学者的话简单一点&&可以定义一个变量 val&&if(inpin==HIGH){val+=50} 然后对应的 0&val&=50& &这样控制 你想要的三个模式& &
最简单的办法
设置一个变量,控制灯的状态是亮还是闪还是灭
先是判断status的状态
然后决定闪烁还是亮或是灭,但这样不好,在过条语句过程中按按键,可能会没反应
我觉得,能做成 中断& &,那就好了!
loop()函数先判断&&状态&&是亮还是闪还是灭,中断函数根据当前状态的来改变状态控制变量的值
我很赞同你的想法~~~~~&
本帖最后由 smching 于
22:51 编辑
void loop() {
&&if (按开关)&&{
& & status=status+1;
&&if (status=4) {
& && &status =1;
& &switch (status) {
& && &case 1: 灯亮;
& && &case 2: 闪烁;
& && &case 3: 灯灭;
smching 发表于
void loop() {
&&if (按开关)&&{
& & status=status+1;
int ledpin=11;//定义数字11 接口
int inpin=7;//定义数字7 接口
//定义变量val
void setup()
pinMode(ledpin,OUTPUT);//定义小灯接口为输出接口
pinMode(inpin,INPUT);//定义按键接口为输入接口
void loop()
val=digitalRead(inpin);//读取数字7 口电平值赋给val
if(val==HIGH)& &{&&//检测按键是否按下,
& & status=status+1;
if(status=4) {
& && &status =1;
switch (status) {
& &&&case 1:&&{digitalWrite(ledpin,HIGH);}
& && && && && &
& &&&case 2:&&{digitalWrite(ledPin, HIGH); //点亮小灯
& && && && && && &&&delay(1000); //延时1 秒
& && && && && && &&&digitalWrite(ledPin, LOW); //熄灭小灯
& && && && && && &&&delay(1000); // 延时1 秒
& && && && && && &}& &&&
& && &case 3: {digitalWrite(ledpin,LOW);}
——————————————————————————分割线
按你的方法修改了之前的程序,但就是通不过!
我对这个status 也不明白怎么用,也不知道哪里的格式什么的写错了,发上报错图看看:
(76.54 KB, 下载次数: 2)
01:54 上传
laofuz1024 发表于
最简单的办法
设置一个变量,控制灯的状态是亮还是闪还是灭
int ledpin=11;//定义数字11 接口
int inpin=7;//定义数字7 接口
//定义变量val
void setup()
pinMode(ledpin,OUTPUT);//定义小灯接口为输出接口
pinMode(inpin,INPUT);//定义按键接口为输入接口
void loop()
val=digitalRead(inpin);//读取数字7 口电平值赋给val
if(val==HIGH)& &{&&//检测按键是否按下
& &&&int a=a+1;
& & if(a=4) { a=1;}
& & if ( a=1 ) {digitalWrite(ledpin,HIGH);}
& & if ( a=2 ) {
& && && && && &digitalWrite(ledPin, HIGH); //点亮小灯
& && && && && &delay(1000); //延时1 秒
& && && && && &digitalWrite(ledPin, LOW); //熄灭小灯
& && && && && &delay(1000); // 延时1 秒
& && && && && &}
& & if ( a=3 ) {digitalWrite(ledpin,LOW);}
————————————————————————————————
自己写的上面程序,但也无法通过,不知道错在哪了,改半天,检查了半天也无果,之前也基本没有C语言的底子,无奈发上报错图。。。
(73.47 KB, 下载次数: 3)
02:03 上传
本帖最后由 smching 于
09:34 编辑
yqfans 发表于
int ledpin=11;//定义数字11 接口
int inpin=7;//定义数字7 接口
//定义变量val
a还没定义。必须定义int a
ledpin和ledPin是有区别的。
if(a=4)必须更改为 if(a==4)
yqfans 发表于
int ledpin=11;//定义数字11 接口
int inpin=7;//定义数字7 接口
//定义变量val
问题解决后,记得使用,不然按键一下将会触发几次事件。
Powered by单片机中怎样中断控制led灯隔一秒闪烁一次,c语言的,麻烦高手贴个程序看一下,最好用定时器t0。_百度知道
单片机中怎样中断控制led灯隔一秒闪烁一次,c语言的,麻烦高手贴个程序看一下,最好用定时器t0。
我有更好的答案
TMOD=0x01;
TL0=()%256;256;
你这个好像不行吧,他只会亮一次,然后一直灭的
哦。。加一个循环吧。while(1){
还是要感谢你的回答!!这样我也试过,还是会一直亮的,中断产生后灯灭了,马上又赋值P0=0X01,理论上可以,但led有余晖作用,观察到的还是亮这的,
呵呵。。。你这不是隔一秒要闪烁吗?两个P0交换一下,那么隔一秒钟就会闪烁吧 P0=0x00;
}如果你是要实现一秒钟亮,一秒钟灭,你可以这样D=0x00;while(1){
if(a==20)
}}其中D是led对应的一个io口(一定要先定义D)
哦,谢谢,这正是我想要的。
采纳率:30%
设置定时器时间间隔为1s,计数总共不到1s的话,就再定义一个变量,循环多次,以实现1s然后再1s时的定时器中断子程序中设置输出脚的电平交替即可
}}delay(){
unsigned i,j;
for(i=200;i&0;i--)
for(j=200;j&0;j--);}
为您推荐:
其他类似问题
led灯的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。为了解决用户可能碰到关于"求一个C语言编写的程序,在51单片机上实现一个按键操作LED的亮灭,就是按一下亮起来再按一下就灭掉,如果可以的话注释一下,最近在自学单片机,之前C的东西有点丢掉"相关的问题,志乐园经过收集整理为用户提供相关的解决办法,请注意,解决办法仅供参考,不代表本网同意其意见,如有任何问题请与本网联系。"求一个C语言编写的程序,在51单片机上实现一个按键操作LED的亮灭,就是按一下亮起来再按一下就灭掉,如果可以的话注释一下,最近在自学单片机,之前C的东西有点丢掉"相关的详细问题如下:
哦,可以啊,QQJohn
||||点击排行51单片机控制led灯亮两秒灭一秒 用单片机编程,不用c语言。用中断和循环两种,谢谢_百度知道
51单片机控制led灯亮两秒灭一秒 用单片机编程,不用c语言。用中断和循环两种,谢谢
我有更好的答案
好,你可以这样D=0x00;
}如果你是要实现一秒钟亮,一秒钟灭,这样:P0=0x00;
P0=0x01;while(1){
if(a==20)
楼上答案不对吧?
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 单片机中断程序编写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信