#define uchar unsigned char #define uint unsigned int void timer2_init(void);void timer1_init(void); void port_init(void); void init(void);
volatile unsigned char count=0;
volatile unsigned char pwm11,pwm12,pwm13, pwm14,pwm21,pwm22,pwm23,pwm24,pwm31,pwm32,pwm33,pwm34; void delay_ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=1140;y>0;y--); }
void Reset(void) //复位&站立 {
pwm11=35,pwm12=35,pwm13=35,pwm14=35, pwm21=35,pwm22=35,pwm23=35,pwm24=35, pwm31=35,pwm32=35,pwm33=35,pwm34=35; }
void SitDown_1(void) //坐下分解动作1 {
pwm11=35,pwm12=35,pwm13=35,pwm14=35, pwm21=35,pwm22=11,pwm23=35,pwm24=62, pwm31=35,pwm32=35,pwm33=35,pwm34=35; }
void SitDown_2(void) //坐下分解动作2 {
pwm11=35,pwm12=56,pwm13=35,pwm14=16, pwm21=35,pwm22=11,pwm23=35,pwm24=62, pwm31=35,pwm32=35,pwm33=35,pwm34=35; }
void SitDown(void) {
SitDown_1(); delay_ms(500);
}
int main(void) {
init(); //初始化 Reset(); //复位站立 delay_ms(1000); Forward(); delay_ms(500); Reset(); delay_ms(800); SitDown(); delay_ms(800); SayHello(); delay_ms(800); StandUp(); delay_ms(500); Reset(); }
void init(void) {
cli(); //中断停止 port_init(); // 端口初始化 timer2_init(); //计时器0初始化 timer1_init(); //计时器1初始化 sei(); //中断启用 }
void port_init(void) {
DDRB = 0x3F; PORTB = 0x00; DDRC = 0x3F; PORTC = 0x00; }
void timer2_init(void) //定时器2初始化程序 (产生20ms的周期)
{
TIMSK|=(1<TCNT2=0;OCR2=155;
//50HZ=Foc2=(Fclk_I/0)/[2*256*(1+ocr2)]
TCCR2|=(1<}// 256分频 ; 初始化函数里 计时器2开始计数 void timer1_init(void) //定时器1初始化程序SitDown_2(); {
TIMSK|= (1<TCCR1B|= (1<OCR1A =15; /////////////////////注意 初始时计时器1不要开始计数 要到计时器2的中断函数里开始计数(产生20/N ms周期) }SIGNAL(SIG_OUTPUT_COMPARE2)
{
TCCR1B|= (1<TCCR1B|=(1<SIGNAL(SIG_OUTPUT_COMPARE1A){
count++; //每中断一次加1
if (countelse //不是则输出0 { PORTB&=~(1<<2);} if (count{PORTB&=~(1<<5); } if (count{ PORTC&=~(1<<1);} if (countelse{ PORTC&=~(1<<4); } if (count{ PORTB&=~(1<<0); }if (countelse{ PORTB&=~(1<<4); }
if (countelse{ PORTC&=~(1<<3); }
if (count{ PORTC&=~(1<<5); } if (count{ PORTB&=~(1<<1); } if (count{ PORTB&=~(1<<3); } if (count{ PORTC&=~(1<<0); } if (count{ PORTC&=~(1<<2); }if(count>=60) //2.5ms脉冲后停止计数等待到下一个20ms///N=300,
count=2.5ms/20ms*300
{ TCCR1B|=(0<