资源简介

红外遥控小车代码的实现,可以使用红外模块遥控小车的加减速和转向,另外程序还附带了车速的显示模块。可以控制小车的转速和方向,控制小车的行进。主要是利用红外原理。

资源截图

代码片段和文件信息

#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;

评论

共有 条评论