DDRA=0x00; for(;;) {
delay(setnum[0]*100); PORTB_PB0=1; delay(setnum[1]*100); PORTB_PB0=0; } }
3.电机程序
#include
#define servo_period 20 //ms #define motor_pwm_frequ 1 //khz
void delay(unsigned int ms) {
unsigned int i;
DDRB_DDRB0=1;
unsigned char j; for(i=0;i for(j=0;j<100;j++); } } /******************************倍频 *****************************************/ void vPLLInit(void) { unsigned char refdv; refdv=3; CLKSEL=0X00; PLLCTL_PLLON=1; //disengage PLL to system //turn on PLL SYNR =0xc0 | ((80/(refdv+1))-1); REFDV=0x40 | refdv; POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz; _asm(nop); //BUS CLOCK=80M _asm(nop); while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it; CLKSEL_PLLSEL =1; } /******************************倍频 *****************************************/ /** PWM初始化***/ void Init_PWMout(void) { //engage PLL to system; PWME = 0x00; //禁止输出 PWMPOL = 0xff;//极性寄存器,1 先输出高电平 后为低电平 0 先输出低电平 后为高电平 PWMCTL = 0xf0; //01 23 45 67 通道级联 PWMPRCLK=0x55; //Clock A=Bus Clock/32 ; Clock B=Bus Clock/32; PWMCLK=0b00000000; //选择clock:7B,6B,5A,4A,3B,2B,1A,0A PWME = 0xaa; //pp1,pp3,pp5,pp7口输出 PWMPER67 = 80/4*125/motor_pwm_frequ; PWMPER45 = 80/4*125/motor_pwm_frequ; PWMPER23 = 80/4*servo_period*125; PWMPER01 = 80/4*servo_period*125; PWMDTY67 =0; PWMDTY45 =0; PWMDTY23 =0; PWMDTY01 =0; } void main(void) { /* put your own code here */ unsigned char i; unsigned char setnum[12]; unsigned char cur_sel; const char lcd_show[12][4]={\\\0\ vPLLInit(); lcd_init(); init_24c02(); init_btn(); EnableInterrupts; for(i=0;i<12;i++)setnum[i]=RdEEPROM(i); //读取24c02 for(i=0;i<12;i++) //显示初值 { disply_listchar((i/6)*42,i%6,lcd_show[i],1); disply_number((i/6)*42+16,i%6,setnum[i],5); } Init_PWMout(); if(btn_change()) { cur_sel=0; for(i=0;i<12;i++) { disply_listchar((i/6)*42,i%6,lcd_show[i],(cur_sel==i)?0:1); disply_number((i/6)*42+16,i%6,setnum[i],5); } for(;;) { if(btn_add()) { setnum[cur_sel]++; disply_number((cur_sel/6)*42+16,cur_sel%6,setnum[cur_sel],5); } if(btn_sub()) { setnum[cur_sel]--; disply_number((cur_sel/6)*42+16,cur_sel%6,setnum[cur_sel],5); } if(btn_change()) { cur_sel++; if(cur_sel>11)cur_sel=0;