6186|6

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

单片机按键定时扫描问题 [复制链接]

哪位高手能帮忙把下面按键扫描程序改成用定时器对按键进行定时扫描啊,我用的是51单片机,感激万分!!!!




/*键盘扫描*/
void judge(void)
{
 
  
P1=0xf0;
lie=P1;
lie=lie&0xf0;
if(lie!=0xf0)
{
delay();
if(lie!=0xf0) //假设第二行第三列按下
{
lie=P1;
key0=lie; //10110000
P1=key0|0x0f; //10111111 实际上按键还没断开的话,赋值后P3的值为10111101,因为第二行被按下为低电平
hang=P1&0x0f; //00001101
key=hang+lie; //10111101  

}
P1=0xf0;
temp=P1;
while(temp!=0xf0) //等待按键松开
{
temp=P1;

switch ( key ) //判断键值(那一个键按下)
 { case 0x7d: key1(); break;  
  case 0xee: key2(); break; //对键值赋值
  case 0xde: key3(); break;  
  case 0xbe: key4(); break;  
  case 0x7e: key5(); break;
  case 0xed: key6(); break;  
  case 0xdd: key7(); break;  
  case 0xbd: key8(); break;  
  default: break;
 }} 
 }
此帖出自单片机论坛

最新回复

谢谢了  详情 回复 发表于 2011-5-12 11:33
点赞 关注
 

回复
举报

2130

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
那是系统构架设计的,不是在函数中能做的
此帖出自单片机论坛
 
 

回复

2771

帖子

0

TA的资源

裸片初长成(中级)

板凳
 
ISR
此帖出自单片机论坛
 
 
 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 楼主 a532727489 的帖子

程序自己改吧,我只写一下思路。
#include
unsigned char flag;
unsigned char TT;
void init_T1()
{
      TMOD = 0x10;         
      TH1 = 0x3C;               //定时时间50ms
      TL1 = 0xB0;
      TR1 = 1;
      ET1 = 1;
      EA  =  1;
}
void key()
{

}
void main()
{
        init_T1();
       while(1)
      {
               if(flag = 1)
              {
                      flag = 0;
                      key();       //按键扫描函数
             }      
      }
}
void timer_int() interrupt 3 using 2
{
        TT++;   
        if(TT>100) flag = 1;
         TH1 = 0x3C;            
         TL1 = 0xB0;

}
此帖出自单片机论坛
 
 
 

回复

473

帖子

0

TA的资源

纯净的硅(高级)

5
 
菜了问下,为什么要定时对按键扫描,这样不是占用单片机资源吗,如果有键按下直接申请中断不是更好
此帖出自单片机论坛
 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

6
 

原帖由 zjjone1023 于 2011-5-12 10:43 发表 菜了问下,为什么要定时对按键扫描,这样不是占用单片机资源吗,如果有键按下直接申请中断不是更好

根据我接触过的很多案例,很多单片机如果对按键单独做中断的话是很浪费资源的,因为大部分单片机中断资源有限

不过有些单片机就根据按键设定了专用中断,比如飞思卡尔一些系列。有4个IO公用一个下降沿中断,这样就可以很容易分配给按键用。

所以定时扫描在某些场合还是很必要的

此帖出自单片机论坛
 
 
 

回复

473

帖子

0

TA的资源

纯净的硅(高级)

7
 

回复 6楼 leang521 的帖子

谢谢了
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表