电路原理图:
程序源代码:
- #include <iom128v.h>
- #include <macros.h>
- void delay(int z)
- {
- int i,j;
- for(i=0;i<100;i++)
- for(j=0;j<z;j++);
- }
- void Io_init(void)
- {
- DDRA = 0X00; //限位开关方向寄存器
- DDRC = 0xff; //控制电机方向寄存器
- DDRD = 0X00; //控制按钮方向寄存器
- PORTD = 0xff; //控制按钮数据寄存器 拉高
- PORTA = 0xff; //限位开关数据寄存器 拉高
- PORTC&=~(1<<PC0); //停止所有有关电机控制的IO口
- PORTC&=~(1<<PC1);
- PORTC&=~(1<<PC2);
- PORTC&=~(1<<PC3);
- PORTC&=~(1<<PC4);
- PORTC&=~(1<<PC5);
- }
- void Pwm_init(void)
- {
- DDRB = 0Xff;
- TCCR1A =0Xfd; // TCCR1A =0Xfd; 30KHZ 速度最快 TCCR1A =0Xff; 8KHZ
- TCCR1B =0X09;
- TCNT1 =0X0000;
- TIMSK = 0X00;
- ETIMSK =0X00;
- OCR1A =100;
- OCR1B =100;
- OCR1C =100;
- }
- void Pwm_init1(void)
- {
- DDRE = 0Xff;
- TCCR3A =0Xff; // TCCR1A =0Xfd; 30KHZ 速度最快 TCCR1A =0Xff; 8KHZ
- TCCR3B =0X0A;
- TCNT3 =0X0000;
- OCR3A =100;
- OCR3B =100;
- OCR3C =100;
- }
- void main(void)
- {
- int a1,a2,a3,a4,a5,a6;
- Io_init();
- Pwm_init();
- Pwm_init1();
- while(1)
- {
- if((PIND&0x3F)!=0x3F)
- {
- delay(1);
- if((PIND&0x3F)!=0x3F)
- {
- if(((PIND&0x01)==0&&(PINA&0x01)!=0x00)) //显示器上升 按键是否按下
- {
- a1=1;
- while(a1)
- {
- PORTC |=(1<<PC0); //电机使能
- PORTC |=(1<<PC2); //控制电机方向
- if((PIND&0x01)!=0x00) //限位开关是否到达
- {
- a1=0;
- PORTC&=~(1<<PC0);
- }
- if((PINA&0x01)==0x00) //限位开关是否到达
- {
- PORTC&=~(1<<PC0);
- a1=0;
- }
- }
- }
- if(((PIND&0x02)==0)&&((PINA&0x02)!=0x00)) //显示器下降 按键是否按下
- {
- a2=1;
- while(a2)
- {
- PORTC |=(1<<PC0); //电机使能
- PORTC&=~(1<<PC2); //控制电机方向
- if((PIND&0x02)!=0x00) //显示器下降 按键是否松开
- {
- a2=0;
- PORTC&=~(1<<PC0);
- }
- if((PINA&0x02)==0x00) //限位开关是否到达
- {
- PORTC&=~(1<<PC0);
- a2=0;
- }
- }
- }
- if(((PIND&0x04)==0)&&((PINA&0x08)!=0x00))
- {
- a3=1;
- while(a3)
- {
- PORTC |=(1<<PC4);
- PORTC |=(1<<PC6);
- if((PIND&0x04)!=0x00)
- {
- a3=0;
- PORTC&=~(1<<PC4);
- }
- if((PINA&0x08)==0x00)
- {
- PORTC&=~(1<<PC4);
- a3=0;
- }
- }
- }
- if(((PIND&0x08)==0)&&((PINA&0x04)!=0x00))
- {
- a4=1;
- while(a4)
- {
- PORTC |=(1<<PC4);
- PORTC&=~(1<<PC6);
- if((PIND&0x08)!=0x00)
- {
- a4=0;
- PORTC&=~(1<<PC4);
- }
- if((PINA&0x04)==0x00)
- {
- PORTC&=~(1<<PC4);
- a4=0;
- }
- }
- }
- if(((PIND&0x10)==0)&&((PINA&0x20)!=0x00))
- {
- a5=1;
- while(a5)
- {
- PORTC |=(1<<PC1);
- PORTC |=(1<<PC3);
- if((PIND&0x10)!=0x00)
- {
- a5=0;
- PORTC&=~(1<<PC1);
- }
- if((PINA&0x20)==0x00)
- {
- PORTC&=~(1<<PC1);
- a5=0;
- }
- }
- }
- if(((PIND&0x20)==0)&&((PINA&0x10)!=0x00))
- {
- a6=1;
- while(a6)
- {
- PORTC |=(1<<PC1);
- PORTC&=~(1<<PC3);
- if((PIND&0x20)!=0x00)
- {
- a6=0;
- PORTC&=~(1<<PC1);
- }
- if((PINA&0x10)==0x00)
- {
- PORTC&=~(1<<PC1);
- a6=0;
- }
- }
- }
- }
- }
- }
- }
转载于:https://blog.51cto.com/591819849/1100811