打印

单片机c语言高手进???急求答案

[复制链接]
2291|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
嗜杀成性|  楼主 | 2010-6-3 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 嗜杀成性 于 2010-6-3 17:16 编辑

*************由按键传送参数程序*****************   
   if(!G_Key2)
    {
     delay_ms(10);
    while(!G_Key2)
         {   
            SendMessage(WM_KEYDOWN,KEY_2);
           }               
           if(!G_Key2)                        // 扫描到的按键能这么传参数吗????
             {
                SendMessage(WM_KEYPRESS,KEY_2);
              }
       }
**************处理接收到的参数***********************
if (wMsg==WM_KEYDOWN)
    {
     if(WParam==KEY_1)
         G_Key_Flag++;
         if(G_Key_Flag==6)
     {
      G_Key_Flag=0;
     }
        {
          SwitchMode();
       }
       if(WParam==KEY_2)
        {
           AddValue();   
          }
    }
else if (wMsg==WM_KEYPRESS)
    {
        {
         SwitchMode();
        }
           {  
            AddValue();
            }
    }         
}
**************这是最终执行按键程序****************************
void AddValue()
{   
   
   if(G_Key_Flag==0|G_Key_Flag==1)
     
      G_Counter1++;
     if(G_Counter1==512)
        {
         G_Counter1=1;
       }
    if(G_Key_Flag==2|G_Key_Flag==3)  
     
     G_Counter2++;

     if(G_Counter2==100)
        {
         G_Counter2=1;
         }

    if(G_Key_Flag==4)         
    G_Counter3++;
     if(G_Counter3==100)
        {
         G_Counter3=1;
         }      
}
      现在的问题是:
1.按键按下加1,一直按着不变着是为什么?
2.在这基础能改成按下加1,连续按着按键一直加!!!!!
3.由于是新手散分不多,请见谅。。。。。。

相关帖子

沙发
嗜杀成性|  楼主 | 2010-6-3 16:54 | 只看该作者
各位大侠帮帮忙吧   小弟不胜感激

使用特权

评论回复
板凳
嗜杀成性|  楼主 | 2010-6-3 16:56 | 只看该作者
或者告诉我要怎样解决  用一个扫描到的按键去传两个参数?

使用特权

评论回复
地板
ljolove| | 2010-6-4 10:15 | 只看该作者
LZ试试用状态机扫描按键吧,3个状态,1空闲,2按键延时,3是按键抬起,程序到论坛搜一下有不少例子,解决你这个问题应该是比较容易的,你的程序貌似结构有些乱看着不是很清晰,而且在判断按键时候出现死延时这是非常不可取的做法,容易造成单片机运行程序混乱

使用特权

评论回复
5
一棵小草| | 2010-6-4 13:51 | 只看该作者
1、一直按着,肯定不变啊,因为:
       while(!G_Key2) //一直按键,那么程序永远在这里进行死循环,只有按键松开才跳出往下执行。
          {                       //尽管会跳进中断,但是中断返回后,还是跳回来这里继续循环(除非松开按键)
                      SendMessage(WM_KEYDOWN,KEY_2);
          }                       //而你在死循环的过程中,没有变量加1,也没有刷新显示,后果就是不变。
2、-----------工作了,等下再说说,嘿嘿

使用特权

评论回复
6
嗜杀成性|  楼主 | 2010-6-4 14:32 | 只看该作者
能帮我改改吗?    谢谢

使用特权

评论回复
7
一棵小草| | 2010-6-5 13:08 | 只看该作者
2、用定时器弄个1s延时
     while(!G_Key2)
     {
                      SendMessage(WM_KEYDOWN,KEY_2);
                      if(1s到了)
              {
                     变量++;
                     刷新显示;
                                秒清零;
                     }
        }

使用特权

评论回复
8
嗜杀成性|  楼主 | 2010-6-5 17:46 | 只看该作者
能具体些吗?   我就是不知道怎么写定时器啊   帮帮我吧

使用特权

评论回复
9
嗜杀成性|  楼主 | 2010-6-5 17:46 | 只看该作者
能具体些吗?   我就是不知道怎么写定时器啊   帮帮我吧

使用特权

评论回复
10
嗜杀成性|  楼主 | 2010-6-5 17:47 | 只看该作者
能具体些吗?   我就是不知道怎么写定时器啊   帮帮我吧

使用特权

评论回复
11
奇兵| | 2010-6-5 19:23 | 只看该作者
void time0 (void) interrupt 1
{}
定时器T0的中断函数!关于定时器的控制寄存器自己设置一下!将EA、ET0设置一下!

使用特权

评论回复
12
嗜杀成性|  楼主 | 2010-6-8 10:02 | 只看该作者
定时器要怎么才在程序中起作用呢?   一定要跟中断一起吗?

使用特权

评论回复
13
一棵小草| | 2010-6-8 13:42 | 只看该作者
连定时器都不会用,建议你看书

使用特权

评论回复
14
嗜杀成性|  楼主 | 2010-6-8 14:14 | 只看该作者
就不能帮指导一下吗?

使用特权

评论回复
15
a6632001| | 2010-6-9 17:20 | 只看该作者
按键扫描就行了,网上搜索啊程序很多的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

21

帖子

0

粉丝