单片机键盘扫描

unsigned int old,new,push,rel,temp;

unsigned char clmn_pat;
void key(void)
{
    for(clmn_pat=0x01;clmn_pat<>0;clmn_pat_<<1)
    {
        P1=P1&clmn_pat;

        P1=P1|0x0f; 
        new=(new<<4)|((~P1)&0x0f);                                       

    }
    if((temp=new^old)>0)

    {
        push=temp&new;
        rel=temp&old;
        old=new;

    }

}

 

 

1、定义的变量clmn_pat的英文全称是coumn scan pattern(列扫描模式)。

      rel是relax(释放)的缩写。

2、for(clmn_pat=0x01;clmn_pat<>0;clmn_pat_<<1)
先给clmn_pat赋值0x01;判断clmn_pat是否等于零;clmn_pat向左移一位。

3、p1=p1&clmn_pat;目的是为了判断p1口的高四与clmn_pat的高四位相与之后有没有是1的位。

4、P1=P1|0x0f;将P1口的低四位置1。

5.(1)new是一个整型变量16位怎么能与P1按位或?

     C会自动转换类型,像本例中会按8位的宽度进行或!

5.(2)new没有付初值左移4位,有什么意义?

    左移的目的是为了保存先前的值,在循环里每读一次P1口的低4位,就把他放到new的低四位中,同时将上次的左移四位!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值