|
初學(xué)單片機(jī),要做個(gè)輕觸按鍵實(shí)現(xiàn)兩個(gè)IO口的輸出并循環(huán);
狀態(tài)如下:
IO1(LED); IO2(EN);
1: 高電平; 高電平;
2: 低電平; 5秒發(fā)出一個(gè)0.2S的低電平脈沖;
3: 1kHz的50%的PWM; 5秒發(fā)出一個(gè)0.2S的低電平脈沖;
循環(huán)
寫的程序如下:
去掉紅色字符,寫到單片機(jī)里,IO1的輸出狀態(tài)正常;
加上紅色字符,想讓IO2也輸出,就不正常了;不知道為什么;
還有如果把“void Dis2()”里的時(shí)間沿長(zhǎng),按鍵也要久按才能切換狀態(tài);
請(qǐng)大家指教;
(程序語(yǔ)句,也是我參考不同人的不同方案,加上自己看視頻慢慢學(xué)的);
請(qǐng)多賜教;
還有本想來(lái)想把“void Dis1()”用定時(shí)器準(zhǔn)確定時(shí)的,但發(fā)現(xiàn)到第三步就不能循環(huán)了;
#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;
}
}
}
|
|