搜索
bottom↓
回复: 12

请教一个长按键的问题

[复制链接]

出0入0汤圆

发表于 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,这是什么原因?求解

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

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

出0入0汤圆

发表于 2012-1-16 10:39:05 | 显示全部楼层
要获得按键状态,直接定义 sbit key = P1^0;再读取key值不就完了吗,搞不懂你为什么写得这么复杂

出0入0汤圆

 楼主| 发表于 2012-1-16 14:14:29 | 显示全部楼层
大概要怎么写呢?我太小白、、

出0入0汤圆

发表于 2012-1-16 15:26:26 | 显示全部楼层
把i++改为if(i<=500)i++试试吧

出0入0汤圆

发表于 2012-1-16 15:27:20 | 显示全部楼层
还有那个i>500改为i==500

出0入0汤圆

 楼主| 发表于 2012-1-16 16:34:11 | 显示全部楼层
回复【5楼】xiaobendan  小笨蛋
-----------------------------------------------------------------------

还是不行?

出0入0汤圆

发表于 2012-1-16 17:20:54 | 显示全部楼层
我很想帮你,,,但我也不会,,,帮你顶吧

出0入0汤圆

发表于 2012-1-17 17:47:23 | 显示全部楼层
唉,昨天清理的电脑,把登陆信息清理没有了,结果发现密码也忘记了
重新注_册有不能显示,老大啊,赶快帮我把密码找回来吧

出0入0汤圆

发表于 2012-1-19 09:02:50 | 显示全部楼层
我回复都看不到,回复了也没有啥用啊

出0入0汤圆

发表于 2012-2-1 11:52:06 | 显示全部楼层
楼主搞定了吗?

出0入0汤圆

发表于 2012-2-1 18:02:59 | 显示全部楼层
回复【楼主位】opoop130
-----------------------------------------------------------------------

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

出0入0汤圆

 楼主| 发表于 2012-3-2 17:47:38 | 显示全部楼层
回复【10楼】xiaobendan001  
-----------------------------------------------------------------------

搞定了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 00:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表