请教一个长按键的问题

2020-02-04 09:30发布

之前看到一个帖子:新型的按键扫描程序(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,这是什么原因?求解
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
xiaobendan
1楼-- · 2020-02-04 11:24
习惯上标志一般使用bit型的,例如你的longpress
当i>500后,每个循环都会使longpress反转一次,刷屏很快,你可能没看到他的变化,又刷回来了,直到i到了65535(0xffff)之后,又从0开始,加到500之前的这些时间,显示的应该是屏幕2 了,只是你需要按的时间比较长一些,具体时间和你的晶振有关系。
llbdz
2楼-- · 2020-02-04 15:32
 精彩回答 2  元偷偷看……
opoop130
3楼-- · 2020-02-04 17:42
大概要怎么写呢?我太小白、、
xiaobendan
4楼-- · 2020-02-04 23:25
把i++改为if(i<=500)i++试试吧
xiaobendan
5楼-- · 2020-02-05 03:34
还有那个i>500改为i==500
opoop130
6楼-- · 2020-02-05 05:17
回复【5楼】xiaobendan  小笨蛋
-----------------------------------------------------------------------

还是不行?

一周热门 更多>