📄 pwm1_finish.c
字号:
/*2号键为PB3口输出波形的占空比增加键;
3号键为PB3口输出波形的占空比减小键。
4号键为PD7口输出波形的占空比增加键;
5号键为PD7口输出波形的占空比减小键;
按动键盘会在示波器上观看到波形占空比的变化。*/
#include <iom16v.h>
#include <macros.h>
unsigned char key1=0;
void key_out(void);
void port_init(void)
{
DDRB=(1<<3);
DDRD=(1<<7);
DDRA=0X00;
PORTA=0XFF;
DDRC=0XFF;
PORTC=0X00;
}
void t0_init(void)
{
TCCR0=0X00;
OCR0=0X44;
TCCR0=0X6C;
}
void t2_init(void)
{
ASSR=0X00;
TCCR2=0X00;
OCR2=0X44;
TCCR2=0X6E;
}
void delay_1ms(void)
{
unsigned int i;
for(i=1142;i>0;i--)
;
}
void delay_nms(unsigned int n)
{
unsigned int i;
for(i=n;i>0;i--)
delay_1ms();
}
unsigned char key_check(void)
{
unsigned char temp ,temp1;
PORTC&=0XFC;
asm("nop");
temp=PINA;
if(temp!=0XFF)
{
delay_nms(20);
temp1=PINA;
if(temp==temp1)
return 1;
else
return 0;
}
else
return 0;
}
void key_value(void)
{
unsigned char i,temp;
for(i=0;i<2;i++)
{
PORTC=~(1<<i);
asm("nop");
temp=PINA;
asm("nop");
switch(temp)
{
case 0b11111110:key1=(i<<3)+1;break;
case 0b11111101:key1=(i<<3)+2;break;
case 0b11111011:key1=(i<<3)+3;break;
case 0b11110111:key1=(i<<3)+4;break;
case 0b11101111:key1=(i<<3)+5;break;
case 0b11011111:key1=(i<<3)+6;break;
case 0b10111111:key1=(i<<3)+7;break;
case 0b01111111:key1=(i<<3)+8;break;
default:break;
}
key_out();
}
}
void key_out(void)
{
unsigned char t;
while(1)
{ NOP();
t=PINA;
if(t==0XFF)
{
delay_nms(100);
t=PINA;
if(t==0XFF)
break;
}
}
}
void key_process(void)
{
switch(key1)
{
case 2:OCR0=OCR0+0X11;
if(OCR0>0XEE)
OCR0=0X11;break;
case 3:OCR0=OCR0-0X11;
if(OCR0<0X11)
OCR0=0XEE;break;
case 4:OCR2=OCR2+0X11;
if(OCR2>0XEE)
OCR2=0X11;break;
case 5:OCR2=OCR2-0X11;
if(OCR2<0X11)
OCR2=0XEE;break;
default:break;
}
}
void main(void)
{
CLI();
port_init();
t0_init();
t2_init();
while(1)
{
if(key_check())
{
key_value();
key_out();
key_process();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -