找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6759|回复: 0
收起左侧

[求助]几个单片机小问题

[复制链接]
ID:3852 发表于 2008-7-31 13:46 | 显示全部楼层 |阅读模式

我刚学习单片机
遇到了几个小问题想不明白
请各位大虾指教

请知道的大手
把回答发上来供新手学习

键控流水灯程序
#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编辑过]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表