第1个回答 2011-07-19
#include <reg51.h>
sbit P1_0=P1^0; //接收按键,假设按一下输入低电平
sbit P1_1=P1^1; //控制灯闪烁
void delay1s();
unsigned char k=0;
void main( )
{
while(1)
{
if(p1_0==0)
k=1;
if(k==1)
{P1_1=0;
delay1s();
P1_1=1;
delay1s();}
}
}
void delay1s()
{
unsigned char i;
for(i=0;i<0x02;i++);
}
你这个功能比较简单,上面那样差不多可以实现了,有几点需要说明:1、如果管脚比较充足,就不要P0脚,它做输入还好,要做输出就得加上拉电阻;2、这个实现和硬件接线有一定的关系;3、如果对性能要求不高,可以采用循环来延时已达到输出PWM波的目的,要求高的话可以采用中断来实现。网上单片机方面的参考很多,自学很方便。
第2个回答 2011-07-20
#include <AT89x051.H>
sbit pc0= P1^0;
sbit pd0= P1^1;
void delay(unsigned int t) //延时1ms
{
unsigned char i;
while(t--)
for(i=0;i<120;i++);
}
unsigned char smkey( ) //按键扫描程序
{
unsigned char sm,kk;
sm=pc0;
if(sm==1) //按键防抖
{delay(20);
sm=pc0;
if(sm==1)
{kk=1;
}
}
else
return(kk);
}
void main()
{
unsigned char key;
bit ll=0;
while(1)
{
if(ll==0)
//灯灭
else if(ll==1)
{
pd0=0; //闪烁
delay(500);
pd0=1;
delay(500);
}
key=smkey();
if(key==1)
}
}本回答被提问者采纳