大家帮我看看这段程序.我是个初学者.当然我在看书的过程中,也有不少的疑问.如我有一段程序看不懂时.我就会在keil 上把这段程序copy下来.修改一下.看运行过程中的变化.例如以下这段,
#define uchar unsigned char
#define uint unsigned int
#include "reg52.h"
#include "intrins.h"
void main()
{ static bit KMark; //,,,,
static bit KFunc1; //用于S3键
uchar tmp;
P3|=0x3c; //按按键的各位置1
tmp=P3;
tmp|=0xc3; //未接键的各位置1
tmp=~tmp;
if(!tmp) //如果结果是0表示无键被按下
{ KMark=0;
KFunc1=0;
return;
}
P1=0;
}
当然我的光标位置在tmp=p3;这一行.这里我就不明白了tmp 的值为什么就成了0xFF.
我认为应是0x3C.
但是我仔细发现左边的那个绿条不是连贯的.在tmp=p3;(赋值运算)后,断了.然后接着有一个按位或运算.我的光标在tmp=p3.这里停了两下.第二下tmp的值变成了0xFF.居然连0x3c也不显示出来.
if(! tmp) 这一句我有些不明白.如我按下p3.4时 到tmp=~tmp;时tmp的值是0x10.再按单步运算就跳到p1=0;了.我不明白(! tmp)是怎么个算法. if 语然只判断真和假.我认为的意思是1=真 0=假 .当我什么不按下.! tmp 的值是0x00,这个逻辑非 是不是和按位取反的运算一样呢. 那不就是成了0xFF, 我主要是想了解逻辑非是怎么个回事.
感谢谢高手指点迷津.
当然我 用 if (tmp) 代替 if (! tmp) 是否可行? |