• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

求解按键程序设计

正在学习51的汇编,对按键扫描很是不了解.1.刚开机的时候扫描按键,但是在执行了按键的程序后,单片机转到其他地方去执行某条指令了,如何再对按键进行扫描? 2.比如按下一个键后,某一个灯亮了,如何又能通过按同一个键让它熄灭?相当于同一个键既要实现开机,又要实现关机,怎么处理呢?附件为扫描到键按下后,灯一直亮,如何通过按下同一个键让它熄灭?程序比较简单,现在也编不出来有实际意义的程序,只想得到对一个问题的解答.自学汇编的确很难,请高手们指点指点.1161269170.txt
全部回复(4)
正序查看
倒序查看
ytuan
LV.3
2
2006-10-21 18:30
我也是初学者,用C语言写啊,简单些啊.
#include 《at89X51.h》
bit k=0;
void scan(void)
{unsigned int i;
if(!P2_0)
    {for(i=0;i<3000;i++);
    if(!P2_0)k=~k;
    }
}
void main(void)
{while(1)
{scan();
if(k)P0_0=0;
else P0_0=1;
}
}
0
回复
abing
LV.8
3
2006-10-21 18:55
我看了一下你的程序根本不能工作.

不知你有没有学习开发工具,致少要有一片单片机和一个编程器.
编程器自己做的话只要几元,买别人的也只要20多元(当然可以考虑和我买,哈哈)

KEIL51软件会用了吗?要是不会最好找个了解一点的人指点一下

OK

按键检测不是用CLR,可以用JNB或JB

说一个简单的程序

//LED阴极接于P0.0口  阳极串接一个220欧电阻到+5V

org  0030H  //一般简单的程序不用也行,0000H-002FH用于中断入口
clr P0      //初始化P0口
main:       //主程序
SETB P0.0   //P0口输出高电平,LED灭
LJMP delay  //廷时一段时间,要不然闪的太快根本看不出来.就算你是超人,由于LED本身有廷时,所以也看不出来.哈哈

CLR P0.0     //将P0.0口输出低电平,LED亮
LJMP  delay  //廷时
LJMP main    //返回主程序

///////////////////////////////廷时程序
delay:
      mov r5,#255   //
   D1:mov r6,#255   //
   D2:DJNZ r6,D2
      DJNZ r5,D1
/////////////////////////////廷时时间和使用的晶振有关

END

执行这个程序你会看到LED不断的闪烁

给初学者一些提示:
1、一定要有很好的耐性,特别是没人指导时
mov r5,#255   以这句来说,有时用了不用输入法输入的“,”结果是不一样的.还有#255的“#”也不要忘了.
2、细心
很多初学都写的程序多多少少都会有点错的,我曾这样写过
RR P0//
这样是一个完全错误的语句,还有常反“0”与"o"搞错

如有不对之处请各位网友指点!!!!
0
回复
choyse
LV.1
4
2006-10-21 19:07
@abing
我看了一下你的程序根本不能工作.不知你有没有学习开发工具,致少要有一片单片机和一个编程器.编程器自己做的话只要几元,买别人的也只要20多元(当然可以考虑和我买,哈哈)KEIL51软件会用了吗?要是不会最好找个了解一点的人指点一下OK按键检测不是用CLR,可以用JNB或JB说一个简单的程序//LED阴极接于P0.0口  阳极串接一个220欧电阻到+5Vorg  0030H  //一般简单的程序不用也行,0000H-002FH用于中断入口clrP0      //初始化P0口main:      //主程序SETBP0.0  //P0口输出高电平,LED灭LJMPdelay  //廷时一段时间,要不然闪的太快根本看不出来.就算你是超人,由于LED本身有廷时,所以也看不出来.哈哈CLRP0.0    //将P0.0口输出低电平,LED亮LJMP  delay  //廷时LJMPmain    //返回主程序///////////////////////////////廷时程序delay:      movr5,#255  //  D1:movr6,#255  //  D2:DJNZr6,D2      DJNZr5,D1/////////////////////////////廷时时间和使用的晶振有关END执行这个程序你会看到LED不断的闪烁给初学者一些提示:1、一定要有很好的耐性,特别是没人指导时movr5,#255  以这句来说,有时用了不用输入法输入的“,”结果是不一样的.还有#255的“#”也不要忘了.2、细心很多初学都写的程序多多少少都会有点错的,我曾这样写过RRP0//这样是一个完全错误的语句,还有常反“0”与"o"搞错如有不对之处请各位网友指点!!!!
谢谢你给大家的提醒,呵呵.有机会也要帮帮我啊.
0
回复