这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 请教简单的单片机C程序

共2条 1/1 1 跳转至

请教简单的单片机C程序

院士
2006-09-17 18:14:16     打赏
请教简单的单片机C程序



关键词: 请教     简单     单片机     程序    

院士
2006-12-22 22:43:00     打赏
2楼
问 硬件电路描述如下:89S52 单片机的P1 口接有8 个LED,当某一端口输出为“0”时,相应的LED 点亮,P3.2、P3.3、P3.4、P3.5 分别接有四个按钮K1~K4,按下按钮时,相应引脚被接地。现要求编写可键控的流水灯程序,当K1 按下时,开始流动,K2 按下时停止流动,全部灯灭,K3 使灯由上往下流动,K4 使灯由下往上流动。
键控流水灯的程序
#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);
}
}
其中下面这段程序看不太懂,哪位大哥(大姐)能否帮小弟解释一下?!最好能注释每个语句的功能。
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);}}
1: 是不是写重了?这是我在网上下载的一个程序,是不是下面这段程序重复了?
KeyV=P3;
if((KeyV|0xc3)==0xff)
return(0);
2: 这段程序主要是为了消抖 3: 这是一个按 键功能的小程序吧这是一个按键功能的小程序吧。 4: 关于程序的解释,只是个人见解uchar Key()
{ uchar KeyV;
uchar tmp;
P3=P3|0x3c; //将4个按键口置为1
KeyV=P3;  //扫描按键
if((KeyV|0xc3)==0xff) //如果按键没有变化,各口值为1,即0xff,返回0.
return(0);            //否则表示有按键按下
mDelay(10);          //延时程序,用于软件消抖
KeyV=P3;             //再次读取按键状态
if((KeyV|0xc3)==0xff)
return(0);
else                 //表明有按键按下
{ for(;;){ tmp=P3;   //再次读取按键状态,用于消抖,个人感觉没有必要.
if((tmp|0xc3)==0xff)
break;}
return(KeyV);}}
5: 感谢回复谢谢各位大虾指教,小弟不胜感激!!!!1 6: 10ms消抖不太可靠,我一般20ms

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]