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

按键的复用应该怎样编写程序?

以下的程序按键只能跳一次,如果按照我的流程图工作应该怎样写?

#include
void main()
{ unsigned char KeyValue;
for(;;)

{

    P2=0xff;
    
KeyValue=P2;
switch(KeyValue)
{
            if(P2=0xfe)
              else
     P1=0xfe;
case 0xfe:P1=0x00;break;  //P20
case 0xfd:P1=0xdd;break;  //P21
case 0xfb:P1=0xbb;break;  //P22
            case 0xf7:P1=0x77;break;  //P23
            case 0xef:P1=0x55;break;  //P23
}
}
}500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/75/2713751238142058.gif');}" onmousewheel="return imgzoom(this);">
全部回复(6)
正序查看
倒序查看
xing1234
LV.6
2
2009-03-28 09:19
可以用时间来区分,比如长按多少时间,或连续按几次,或按下后等多少时间再按下,具体要与用户商量,看他们能接受哪种方式.这是我的一点小经验,供参考.
0
回复
madboy21
LV.8
3
2009-04-02 13:52
很简单的问题
你可以定义一个静态变量或是全局变量KEY1_state;
if(KEY1_UP)KEY1_state++;
而执行子程序按KEY1_state的数据来选择就可以了.
0
回复
金箍棒
LV.3
4
2009-04-03 16:26
@madboy21
很简单的问题你可以定义一个静态变量或是全局变量KEY1_state;if(KEY1_UP)KEY1_state++;而执行子程序按KEY1_state的数据来选择就可以了.
madboy21: 你好!我还是不明白,能否详细点!因为我是初学的.谢谢!
0
回复
madboy21
LV.8
5
2009-04-03 17:11
@金箍棒
madboy21:你好!我还是不明白,能否详细点!因为我是初学的.谢谢!
手上有实验板不?我看你上面程序也是错误的,初学者最好能配实验板学习会更好.
            if(P2=0xfe)
              else
     P1=0xfe;
上面不要包含在switch里面,if括号里等号应是"=="

关于上面的问题:KEY_state按一次就加一,如果按了三次是不是数值就是三?也就是说这时应去做什么工作(执行什么程序)
0
回复
金箍棒
LV.3
6
2009-04-06 22:56
@madboy21
手上有实验板不?我看你上面程序也是错误的,初学者最好能配实验板学习会更好.            if(P2=0xfe)              else    P1=0xfe;上面不要包含在switch里面,if括号里等号应是"=="关于上面的问题:KEY_state按一次就加一,如果按了三次是不是数值就是三?也就是说这时应去做什么工作(执行什么程序)
我自己用万用板搭了有一块试验板.下面的程序只能检测到一个按键.如果我要检测到8个按键的话应该怎样改一下啊?
#include
#define uint unsigned int
#define uchar unsigned char
sbit key1=P2^0;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
  uchar num;

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
P1=0xfe;
P2=0xff;
while(1)
{
if(key1==0)
{
delay(5);
if(key1==0)
{
num++;
if(num==10)
num=0;
}
while(!key1);
delay(5);
while(!key1);
}
else
P1=table[num];
}
}
0
回复
madboy21
LV.8
7
2009-04-07 09:51
@金箍棒
我自己用万用板搭了有一块试验板.下面的程序只能检测到一个按键.如果我要检测到8个按键的话应该怎样改一下啊?#include#defineuintunsignedint#defineucharunsignedcharsbitkey1=P2^0;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  ucharnum;voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidmain(){P1=0xfe;P2=0xff;while(1){if(key1==0){delay(5);if(key1==0){num++;if(num==10)num=0;}while(!key1);delay(5);while(!key1);}elseP1=table[num];}}
单片机编程需要配合实际电路,上面只给你一个提示方法.在你程序中找不到与你所画流程图相符的程序.修正下廷时程序:void delay(uint z){uint y;for(;z>0;z--)           {for(y=110;y>0;y--);};}看看我做的C51单片机学习板 
0
回复