初學單片機,要做個輕觸按鍵實現兩個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;
}
}
}
|