| 
 
| 大家帮我看看这段程序.我是个初学者.当然我在看书的过程中,也有不少的疑问.如我有一段程序看不懂时.我就会在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) 是否可行?
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |