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的低四位中,同时将上次的左移四位!