请教一个长按键的问题
之前看到一个帖子:新型的按键扫描程序(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,这是什么原因?求解 习惯上标志一般使用bit型的,例如你的longpress
当i>500后,每个循环都会使longpress反转一次,刷屏很快,你可能没看到他的变化,又刷回来了,直到i到了65535(0xffff)之后,又从0开始,加到500之前的这些时间,显示的应该是屏幕2 了,只是你需要按的时间比较长一些,具体时间和你的晶振有关系。 要获得按键状态,直接定义 sbit key = P1^0;再读取key值不就完了吗,搞不懂你为什么写得这么复杂 大概要怎么写呢?我太小白、、 把i++改为if(i<=500)i++试试吧 还有那个i>500改为i==500 回复【5楼】xiaobendan小笨蛋
-----------------------------------------------------------------------
还是不行? 我很想帮你,,,但我也不会,,,帮你顶吧 唉,昨天清理的电脑,把登陆信息清理没有了,结果发现密码也忘记了
重新注_册有不能显示,老大啊,赶快帮我把密码找回来吧 我回复都看不到,回复了也没有啥用啊 楼主搞定了吗? 回复【楼主位】opoop130
-----------------------------------------------------------------------
0.5毫秒,您能看到什么?试试改大点 回复【10楼】xiaobendan001
-----------------------------------------------------------------------
搞定了
页:
[1]