我刚学习单片机 遇到了几个小问题想不明白 请各位大虾指教
请知道的大手 把回答发上来供新手学习
键控流水灯程序 #include "reg51.h" #include "intrins.h" #define uchar unsigned char void mDelay(unsigned int DelayTime) { unsigned int j=0; for(;DelayTime>0;DelayTime--) { for(j=0;j<125;j++) {;} }} uchar Key() { uchar KeyV; uchar tmp; P3=P3|0x3c; // 四个键所接位置 KeyV=P3; 一 if((KeyV|0xc3)==0xff) //无键按下 return(0); mDelay(10); //延时,去键抖 KeyV=P3; if((KeyV|0xc3)==0xff) return(0); else { for(;;){ tmp=P3; 二 if((tmp|0xc3)==0xff) break;} return(KeyV);}} void main() { unsigned char OutData=0xfe; bit UpDown=0; bit Start=0; uchar KValue; for(;;) { KValue=Key(); switch (KValue) { case 0xfb: //P3.2=0,Start { Start=1; break; } case 0xf7: //P3.3=0,Stop { Start=0; break; } case 0xef: //P3.4=0 Up { UpDown=1; break; } case 0xdf: //P3.5=0 Down { UpDown=0; break; } } if(Start) { if(UpDown) OutData=_crol_(OutData,1); else OutData=_cror_(OutData,1); P1=OutData; } else P1=0xff; //否则灯全灭 mDelay(1000); } }
问题一处 1 为何 P3=P3|0x3c; // 四个键所接位置 KeyV=P3; if((KeyV|0xc3)==0xff) //无键按下 用这个来确认键是否被按下 2是否在 KeyV=P3; 后 程序会扫描端口 若不是 什么时候扫描端口 3 mDelay(10); //延时,去键抖 是什么意思 问题二处 for(;;)不加行不行?不行去掉会怎么样?
[此贴子已经被作者于2008-7-31 13:56:00编辑过]
|