opoop130 发表于 2012-1-16 09:47:10

请教一个长按键的问题

之前看到一个帖子:新型的按键扫描程序(http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3941614&bbs_page_no=1&search_mode=1&search_text=%B0%B4%BC%FC%C9%A8%C3%E8&bbs_id=9999),于是想写一个长按键的程序:长按key0键切换LCD1602的屏幕显示,不知道为什么切换不了,程序如下:

unsigned char Trg;
unsigned char Cont;
unsigned int i=0;
unsigned char longpress=0;
#define KEY_0       0x01

void KeyRead( void )

{
    unsigned char ReadData = P1^0xff;      
    Trg = ReadData & (ReadData ^ Cont);      
    Cont = ReadData;                        

}
void main(void)
{
        sys_init();   
        lcd_bus=0xff;         
        lcd_delay(10);   
        lcd_init();      
        lcd_clear();   
        while(1){
              KeyRead();
              if(Cont&key0){   
                           i++;        
                        if(i>500){
                        longpress=(~longpress);
                        }
                }
                if(longpress==0){
                        display1(); //屏幕1
                }
                if(longpress!=0){
                        display2();   //屏幕2
                }
        }
}
开机时显示屏幕1,长按key0键切换不到屏幕2,这是什么原因?求解

xiaobendan 发表于 2012-1-16 10:34:55

习惯上标志一般使用bit型的,例如你的longpress
当i>500后,每个循环都会使longpress反转一次,刷屏很快,你可能没看到他的变化,又刷回来了,直到i到了65535(0xffff)之后,又从0开始,加到500之前的这些时间,显示的应该是屏幕2 了,只是你需要按的时间比较长一些,具体时间和你的晶振有关系。

llbdz 发表于 2012-1-16 10:39:05

要获得按键状态,直接定义 sbit key = P1^0;再读取key值不就完了吗,搞不懂你为什么写得这么复杂

opoop130 发表于 2012-1-16 14:14:29

大概要怎么写呢?我太小白、、

xiaobendan 发表于 2012-1-16 15:26:26

把i++改为if(i<=500)i++试试吧

xiaobendan 发表于 2012-1-16 15:27:20

还有那个i>500改为i==500

opoop130 发表于 2012-1-16 16:34:11

回复【5楼】xiaobendan小笨蛋
-----------------------------------------------------------------------

还是不行?

zt2012 发表于 2012-1-16 17:20:54

我很想帮你,,,但我也不会,,,帮你顶吧

xiaobendan001 发表于 2012-1-17 17:47:23

唉,昨天清理的电脑,把登陆信息清理没有了,结果发现密码也忘记了
重新注_册有不能显示,老大啊,赶快帮我把密码找回来吧

xiaobendan001 发表于 2012-1-19 09:02:50

我回复都看不到,回复了也没有啥用啊

xiaobendan001 发表于 2012-2-1 11:52:06

楼主搞定了吗?

yanwenbin333 发表于 2012-2-1 18:02:59

回复【楼主位】opoop130
-----------------------------------------------------------------------

0.5毫秒,您能看到什么?试试改大点

opoop130 发表于 2012-3-2 17:47:38

回复【10楼】xiaobendan001
-----------------------------------------------------------------------

搞定了
页: [1]
查看完整版本: 请教一个长按键的问题