如题- - 写了一条控制ATmega16 单片机使用按键控制单片机输出两路PWM波输出的程序 在proteus中实现 但是无**常工作- - 求大神指导啊
void delay(uint ms)//延时函数
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
uchar KEYPRESS(void)//是否有键被按下,有按下返回1
{
uchar key;
key=PINA;
key=key|0xf0;
if(key=0xFF)
return 0;
else
return 1;
}
uchar KEYSCAN(void)
{ uchar key1=0;
delay(5);
if((KEYPRESS())==1)
{
key1=PINA;
key1=key1|0xF0;
if(key1==0xfd)
{key1=1;}
else if(key1=0xfb)
{key1=2;}
else {key1=0;}
do{
} while((KEYPRESS())==1);
delay(5);
}
return key1;
}
void main()
{
uint k;
DDRA&=~BIT(PA1);
DDRA&=~BIT(PA2);
while(1)
{
DDRB=0x00;
DDRD=0x00;
if((KEYPRESS())==1)
{
k=KEYSCAN();
switch (k)
{
case 1:
{
TCCR0|=0x7A;//开启定时器,时钟1分频
DDRB=0x08;//设置4管脚为输出
OCR0=0x40;
TCNT0=0xFF;
break;
}
case 2:
{
TCCR2|=0x7A;//开启定时器,时钟1分频
DDRD=0x80;
OCR2=0x40;
TCNT2=0xFF;
break;
}
}
}
}
} |