📄 car._c
字号:
//ICC-AVR application builder : 2008-4-29 16:08:41
// Target : M32
// Crystal: 12.000Mhz
#include <iom32v.h>
#include <macros.h>
unsigned int T=1000;
void port_init(void)
{
PORTA = 0XFF;
DDRA = 0x00;//PA 为输入口
PORTB = 0xff;
DDRB = 0xff;//PB 为输出口
PORTC = 0Xff;
DDRC = 0x00;//PC 为输入口
PORTD = 0xFF;
DDRD = 0xff;//PD 为输出口
}
//============================================================================================
//函数: void delay(int hh)
//语法:void delay(int hh)
//描述:延时子程序
//参数:
//返回:无
//============================================================================================
void delay(unsigned int hh )
{
int i;
for(i=0;i<hh;i++)
{
;
}
}
//============================================================================================
//函数: void pwma(int hh)
//语法:void pwma(int hh)
//描述: 用于控制右轮
//参数:占空比
//返回:无
//============================================================================================
/*void pwma( unsigned int hh)
{
unsigned int s=0;
unsigned int T0=10000;
unsigned int H;
s=PORTA;
switch(hh) //占空比
{
case 0: s=s&0xfc; delay(T0);break; //关占空比
case 1: delay(1000);s=s&0xfc; delay(9000);break;
case 2: delay(2000);s=s&0xfc; delay(8000);break;
case 3: delay(3000);s=s&0xfc; delay(7000);break;
case 4: delay(4000);s=s&0xfC; delay(6000);break;
case 5: delay(5000);s=s&0xfc; delay(5000);break;
case 6: delay(6000);s=s&0xfc; delay(4000);break;
case 7: delay(7000);s=s&0xfc; delay(3000);break;
case 8: delay(8000);s=s&0xfc; delay(2000);break;
case 9: delay(9000);s=s&0xfc; delay(1000);break;
case 10: delay(10000);s=s&0xfc;break;
}
}
//============================================================================================
//函数: void pwmb(int hh)
//语法:void pwmb(int hh)
//描述: 用于控制左轮
//参数:占空比
//返回:无
//============================================================================================
void pwmb( unsigned int hh) //设定TA_TIMEOUT/16=(time_cl)/0x1e00)/16=100Hz
{
unsigned int k=0;
int T=10000;
int H;
k=PORTA;
switch(hh) //占空比
{
case 0: k=k&0xf3; break; //关占空比
case 1: delay(1000);k=k&0xf3; delay(9000);break;
case 2: delay(2000);k=k&0xf3; delay(8000);break;
case 3: delay(3000);k=k&0xf3; delay(7000);break;
case 4: delay(4000);k=k&0xf3; delay(6000);break;
case 5: delay(5000);k=k&0xf3; delay(5000);break;
case 6: delay(6000);k=k&0xf3; delay(4000);break;
case 7: delay(7000);k=k&0xf3; delay(3000);break;
case 8: delay(8000);k=k&0xf3; delay(2000);break;
case 9: delay(9000);k=k&0xf3; delay(1000);break;
case 10: delay(10000);k=k&0xf3;break;
}
}*/
//============================================================================================
//描述:车子方向控制子程序
//参数 无
//返回:无
//============================================================================================
void stop() //停止
{
PORTB=0X00;
delay(1000);
}
void GO(unsigned int aa) //直线前进
{
PORTB=0X06;
delay(aa);
PORTB=0X00;
delay(T-aa);
}
void BACK(unsigned int bb) // 直线后退
{
PORTB=0X09;
delay(bb);
PORTB=0X00;
delay(T-bb);
}
void GTOL(unsigned int cc) //前左转
{
PORTB=0X02;
delay(cc);
PORTB=0X00;
delay(T-cc);
}
void GTOR(unsigned int dd) //前右转
{
PORTB=0X04;
delay(dd);
PORTB=0X00;
delay(T-dd);
}
void BTOR(unsigned int cc) //后左转
{
PORTB=0X01;
delay(cc);
PORTB=0X00;
delay(T-cc);
}
void BTOL(unsigned int dd) //后右转
{
PORTB=0X08;
delay(dd);
PORTB=0X00;
delay(T-dd);
}
//============================================================================================
//函数: void line_check_GO(void)
//语法:void line_check_GO(void)
//描述: 前进黑白寻迹检测
//参数:无
//返回:无
//============================================================================================
void Linecheck_GO(void)
{
unsigned char temp;
PORTA = 0XFF;
DDRA = 0x00;//PA 为输入口
NOP();
temp=PINA;
switch(temp)
{
case 0xf0: GTOL(600); break;
case 0xF7: GTOL(600); break;
case 0xFB: GO(700); break;
case 0XFD: GTOR(600); break;
case 0xe1: GTOR(600); break;
default : GO(700);
}
}
//============================================================================================
//函数: void line_check_BACK(void)
//语法:void line_check_BACK(void)
//描述: 前进黑白寻迹检测
//参数:无
//返回:无
//============================================================================================
void Linecheck_BACK(void)
{
unsigned char temp;
PORTA = 0XFF;
DDRA = 0x00;//PA 为输入口
_NOP();
temp=PINA;
switch(temp)
{
case 0xf0: BTOR(600); break;
case 0xe8: BTOR(600); break;
case 0xe4: BACK(700); break;
case 0Xe2: BTOL(600); break;
case 0xe1: BTOL(600); break;
default : BACK(700);
}
}
//============================================================================================
//函数: void main()
//语法:void main()
//描述:主函数
//参数 无
//返回:无
//============================================================================================
void main()
{
port_init();
while(1)
{
Linecheck_GO();
//Linecheck_BACK();
//GO(800);
// BACK(700);
// TOR(700);
//TOL(500);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -