?? 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 + -