初学单片机,要做个轻触按键实现两个IO口的输出并循环;
状态如下:
IO1(LED); IO2(EN);
1: 高电平; 高电平;
2: 低电平; 5秒发出一个0.2S的低电平脉冲;
3: 1kHz的50%的PWM; 5秒发出一个0.2S的低电平脉冲;
循环
写的程序如下:
去掉红色字符,写到单片机里,IO1的输出状态正常;
加上红色字符,想让IO2也输出,就不正常了;不知道为什么;
还有如果把“void Dis2()”里的时间沿长,按键也要久按才能切换状态;
请大家指教;
(程序语句,也是我参考不同人的不同方案,加上自己看视频慢慢学的);
请多赐教;
还有本想来想把“void Dis1()”用定时器准确定时的,但发现到第三步就不能循环了;
#include<reg52.h>
#include<intrins.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit LED=P1^0;
sbit LED2=P1^2;
sbit EN=P1^4;
sbit key=P3^4;
uint8 count = 0;
void delay(unsigned char a)
{
unsigned int i,j;
for(i=0;i<a;i++)
for(j=0;j<500;j++);
}
void Dis1()
{
unsigned char b,c;
LED=1;
while(1)
{
LED=0;
for(b=0; b<10; b++)
{
for(c=0;c<10;c++);
}
LED=1;
for(b=0; b<100; b++);
break;
}
}
void Dis2()
{
unsigned int i,j;
while(1)
{
EN=1;
for(j=0; j<5000; j++)
{
for(i=0;i<10;i++);
}
EN=0;
for(j=0; j<1000; j++);
EN=1;
for(j=0; j<5000; j++)
{
for(i=0;i<10;i++);
}
break;
}
}
void main()
{
LED=1;
EN=1;
LED2=1;
while(1)
{
if(key==0)
{
delay(20);
if(key==0)
{
while(key==0);
{
count++;
count%=3;
}
}
}
switch(count)
{
case 0:LED=1;EN=1;break;
case 1:LED=0;Dis2();break;
case 2:Dis1();Dis2();break;
}
}
}
|