資源簡介
紅外遙控小車代碼的實現,可以使用紅外模塊遙控小車的加減速和轉向,另外程序還附帶了車速的顯示模塊。可以控制小車的轉速和方向,控制小車的行進。主要是利用紅外原理。
代碼片段和文件信息
#include???????/*?common?defines?and?macros?*/
#include??????/*?derivative?information?*/
#pragma?link_INFO?DERIVATIVE?“mc9s12xs128“
#define?uint?unsigned?int
#define?uchar?unsigned?char
#define?DJ_MID_RUDDER?4500????//最右4160最左4900
#define?DJ_MID_CAMERA?4500?????//最右1200最左6900
#define?in_y??PTIH_PTIH7
unsigned?char?ly_ct=0;
unsigned?char?ly_flag=1;
unsigned?char?ly_lhj[4];
uchar?table[]=?{0xc00xf90xa40xb00x990x920x820xf80x800x90};//表:共陽數碼管?0-9?
#define?H1?PT1AD0_PT1AD07???//片選
#define?H2?PT1AD0_PT1AD06
#define?H3?PT1AD0_PT1AD05
#define?H4?PT1AD0_PT1AD04
#define?DA?PT1AD0_PT1AD03?//數據輸出
#define?SC?PT1AD0_PT1AD02?//移位時鐘
#define?ST?PT1AD0_PT1AD01?//鎖存信號
//超頻到48MHz
?void?PLL_Init(void)???????//PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)即?鎖相環時鐘=2*16*(2+1)/(1+1)=48MHz
{
????REFDV=0x01;????????//總線時鐘=48/2=24MHz
????SYNR=0x02;
????while(!(CRGFLG&0x08));???//wait?until?pll_lock=0;鎖相環頻率為鎖定;
????CLKSEL=0x80;????????????//置位PLLSEL=1;選定鎖相環時鐘;
}
void?delay(int?time){//0.1ms
uint?i;uint?j;
for?(i=0;ifor?(j=0;j<400;j++);
ly_ct++;
}
void?delayus(int?time){//1us
uint?i;uint?j;
for?(i=0;ifor?(j=0;j<4;j++);
ly_ct++;
}
//PWM初始化?????
void?PWM_Init(void)
{
PWME=0x00;
PWMCTL=0xF0;?????????????///級聯01234567
PWMPRCLK=0x22;???????????///?A時鐘、B時鐘為總線時鐘的1/4分頻??A=B=24M/4=6M???
PWMSCLA=0x01;???????????//時鐘SA=時鐘A/2/1=3M???????時鐘SA?=時鐘A/(2*PWMSCLA)
PWMSCLB=0x01;???????????//時鐘SB=時鐘B/2/1=3M???????時鐘SB?=時鐘B/(2*PWMSCLB)
PWMCLK=0xF0;??????????????////時鐘A控制01,B控23,SA控制45,SB控制67
PWMPOL=0xFF;??????????????///對外輸出波形先是高電平然后再變為低電平
PWMCAE=0x00;???????????????///左對齊輸出
PWMPER23=600;?????????????????//pwm3控制????????PWM3_Period=6M/600=10KHZ
PWMDTY23=0;????????????????
PWMPER01=600;?????????????????//pwm1控制????????PWM1_Period=6M/600=10KHZ
PWMDTY01=0;
PWMPER45=60000;????????????//45攝像頭舵機?頻率為3MHz/60000=50Hz???周期為20ms?
PWMDTY45=DJ_MID_CAMERA;????????????///攝像頭舵機初值歸中
PWMPER67=60000;????????????//67方向舵機?頻率為3MHz/60000=??50Hz???周期為20ms??
PWMDTY67=DJ_MID_RUDDER;????????????///方向舵機初值歸中
PWME=0xFF;?????????????????//啟動PWM
?
}
void?PH7_Init(void){
PPSH_PPSH7=0;//0下降沿觸發
PIEH_PIEH7=0;//中斷disable
DDRH_DDRH7=0;//輸入
PTIH_PTIH7=0;//input?reg
}
void?IO_Init(void){
DDR1AD0=0xFF;
RDR1AD0=0XFF;
}
void?output(uchar?dat)?//移出一字節
{???
????uchar?i;
????for(i=0;i<8;i++)
????{
???????SC=0;
???????if((dat)&(0x80))
???????DA=1;
???????else?
???????DA=0;
???????SC=1;
???????dat<<=1;?
?????}
??
?????
?????
}
void?display(uint?data){??
uint?data_lowdata_middata_highi;
data_low=data%10;???????//個位
data_mid=(data/10)%10;//十位
data_high=data/100;//百位?
//H3=1;
H4=1;
ST=0;
for(i=2;i>1;i--){
??
H1=1;??
H3=1;
H2=0;??//十位
output(table[data_mid]);
ST=1;
delay(50);ST=0;
}
for(i=2;i>1;i--){
??
H1=1;
H2=1;?
H3=0;?//個位??
output(table[data_low]);
ST=1;
delay(50);ST=0;??
}
for(i=2;i>1;i--){
??
H2=1;
- 上一篇:溫度場分析
- 下一篇:軟件項目開發報價模板
評論
共有 條評論