|
#include <mega16.h>
#include <delay.h>
unsigned char temp1;
interrupt [INT0] void int0_isr(void)
{
if(OCR0<0xFF)
temp1+=5; //占空比增加
delay_ms(100);
}
interrupt [INT1] void int1_isr(void)
{
if(OCR0>0x63)
temp1-=5; //占空比減少
delay_ms(100);
}
void main(void)
{
DDRB.3=1; //設(shè)置pb3為輸出
PORTB.3=1; //設(shè)置端口輸出為高電平
DDRD.2=0x00; //設(shè)置PD2為輸入
DDRD.3=0x00; //設(shè)置PD3為輸入
PORTD.2=0x01; //設(shè)定端口PD2為內(nèi)部上拉方式,無信號(hào)輸輸入時(shí)處于高電平狀態(tài)
PORTD.3=0x01; //設(shè)定端口PD3為內(nèi)部上拉方式,無信號(hào)輸輸入時(shí)處于高電平狀態(tài)
// initialize the LCD for 2 lines & 16 columns
MCUCR=0x0A; //設(shè)置INT0,INT1為下降沿觸發(fā)
TCCR0=0x6D; //定時(shí)器0工作于快速PWM模式,oc0取正向,1024預(yù)分頻
TCNT0=0x63; //20ms定時(shí)的初始值
OCR0=0xB1; //比較匹配的值為中點(diǎn)
GICR=0xC0;
TIMSK=0x01;
SREG.7=0x01;
temp1=OCR0;
while(1) //依次顯示各值
{
;
}
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
SREG.7=0x00;
TCNT0=0x63;
OCR0=temp1;
SREG.7=0x01;
}
|
|