⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcu.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
字号:
#define 	LED			    PTC_PTC4 				  //定义工作指示灯
#define		BAT_EN		  PTC_PTC5				  //LM2576-5V使能(0有效)
#define	  RST_6606	  PTC_PTC6		      //6606复位引脚
#define   buzz_en     PTB_PTB0          //蜂鸣器
#define		BACK_LIGHT	PTD_PTD5			    //背光
#define   back_light_on     PTD_PTD5=1  //开背光
#define   back_light_off    PTD_PTD5=0  //关背光

unsigned char	LED_count=0;	            //系统工作指示灯计数器
unsigned long last_sub;                 //里程最近,上一次的数据

typedef union {
   byte Byte;
   struct {
     byte BIT0    :1; 
     byte BIT1    :1;  
     byte BIT2    :1;  
     byte BIT3    :1;  
     byte BIT4    :1;  
     byte BIT5    :1;  
     byte BIT6    :1;  
     byte BIT7    :1;  
   }Bit;
  }sys_data_type;

sys_data_type gz60_flags;
#define gz60_sleep_flag     gz60_flags.Bit.BIT0
#define first_sleep_flag    gz60_flags.Bit.BIT1
#define first_wakeup_flag   gz60_flags.Bit.BIT2
//#define can_wakeup_flag     gz60_flags.Bit.BIT3
#define init_at24_flag      gz60_flags.Bit.BIT4
#define comp_motor_flag     gz60_flags.Bit.BIT5   
////////////////////////////////////////////////
//***************配置函数初始化***************//
static void init_gz60(void)
{
	// CONFIG2设置  
	CONFIG2=0x0d;  
	//CONFIG2_SCIBDSRC=1;	  	//SCI时钟源为内部总线时钟
	//CONFIG2_OSCENINSTOP=0;	//STOP模式下OSC不继续工作
	//CONFIG2_TBMCLKSEL=1;		//定时器时钟源为内部总线时钟
	//CONFIG2_MSCANEN=1;		  //使能MSCAN
	//CONFIG2_MCLK0=0;		    //PTD0作为MCLK输出
	//CONFIG2_MCLK1=0;		    //MCLK1	MCLK0
  							//0		0		未使用
  							//0		1		输出频率为时钟频率
  							//1		0		输出频率为时钟频率2分频
  							//1		1		输出频率为时钟频率4分频
	//CONFIG2_MCLKSEL=0;		  //MCLK时钟源为总线时钟(1、晶振,0、总线)
	
	//CONFIG1 配置 
	//CONFIG1 =0x4B;            //禁止看门狗
	CONFIG1=0x4A;               //允许看门狗
	//CONFIG1_COPD=1;			  //禁止看门狗 
	//CONFIG1_COPD=0;			  //允许看门狗      
	//CONFIG1_STOP=1;			  //允许执行STOP指令
	//CONFIG1_SSREC=0;			//退出STOP的周期为32*CGMXCLK
	//CONFIG1_LVI5OR3=1;		//低电压复位模块电源为5V
	//CONFIG1_LVIPWRD=0;		//允许低电压监视
	//CONFIG1_LVIRSTD=0;		//允许低电压复位
	//CONFIG1_LVISTOP=1;		//STOP模式下使能低电压复位
	//CONFIG1_COPRS=0;			//看门狗溢出周期为2^18-2^4
}

//***************SPI初始化***************//
static void init_spi(void){

	/* SPCR=0x2a;	
					SPTIE=0;//禁止SPI发送中断
					SPE=1;  //使能SPI
					SPWOM=0;//普通模式输出/非线或
					CPHA=1;//数据前对齐
					CPOL=0;//时钟极性为上升沿有效
					SPMSTR=1;//使能为主机方式 
					DMAS=0;//禁止DMA方式
					SPRIE=0;//禁止SPI接收中断
					0010 1010  2A
		SPSCR=0x04;	
					//SPR0=0;
					//SPR1=0;1228.8KHz
					//MODFEN=0;模式错误禁止
					//SPTE=1;发送器空标志						/r
					//MODF=0;模式错误标志					/r
					//OVRF=0;溢出标志							/r
					//ERRIE=0;错误中断使能位禁止
					//SPRF=0;接收数据满标志初始化为0/r
					//0000 1000
	*/

	SPCR_SPMSTR=1;			//使能为主机方式
	//SPCR_SPE=0;         //禁止SPI
	SPCR_CPHA=1;				//数据前对齐
	SPCR_CPOL=0;				//时钟极性为上升沿有效
	SPCR_SPTIE=0;				//禁止SPI发送中断
	SPCR_SPRIE=0;				//禁止SPI接收中断
	//SPCR_SPWOM=0;       //非线或 1=设置SPSCK、MOSI和MISO脚为开漏输出 0为普通输出
	SPCR_SPE=1;         //使能SPI
	//
	SPSCR_MODFEN=0;			//模式错误禁止
	SPSCR_ERRIE=0;      //错误中断禁止
	SPSCR_SPR0=0;
	SPSCR_SPR1=0;				//busclk÷2=1000KHz
}

//***************CGM初始化***************//
void init_cgm(void){	
	//
	PCTL_BCS=0;         //por->pllon=1,选择CGMXCLK,便于关PLL设置PLL
	asm(nop);asm(nop);asm(nop);
	PCTL_PLLON=0;       //关PLL,设置PLL
	PCTL=0x2;
	//PLLIE   PLLF   PLLON   BCS   PRE1   PRE0   VPR1   VPR0
	//PRE:预定标系数   VPR:二次幂范围<->E     参见资料
	PMS=0x08;           //反馈分频比   12bits			 N
	PMRS=0x70;          //线性乘数<->L
	PBWC=0x80;          //带宽操作模式
	//AUTO   LOCK   ACQ   R R R R R
	PCTL_PLLON=1;       //开PLL
	while(!PBWC_LOCK){} //等待频率锁定
	PCTL_BCS=1;         //选择PLL
	asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);
	//__RESET_WATCHDOG();
		
}

//***************延时函数***************//
void delay(unsigned int i){

	unsigned int j=0;
	while(j<i){j++;}__RESET_WATCHDOG();      
}
//
void delay_st(void){

	__RESET_WATCHDOG();
}
//
void delay5ms(unsigned int i){

	unsigned int j=0;
	while(j<i){
		j++;
		delay(250);
	}
}

//***************端口初始化***************//
static void init_port(void){
	//方向寄存器
	DDRA_DDRA0=1;	//CCWCS
	DDRA_DDRA1=1;	//FCS
	DDRA_DDRA2=1;	//FQY2
	DDRA_DDRA3=1;	//CCWQY2
	DDRA_DDRA4=1;	//FQY1
	DDRA_DDRA5=1;	//CCWQY1
	DDRA_DDRA6=1;	//FZS
	DDRA_DDRA7=1;	//CCWZS

	DDRB_DDRB0=1;	//蜂鸣器输出/下载复用
//	DDRB_DDRB1=1;	//下载用
//	DDRB_DDRB2=1;	//电源AD转换输入口/AD2
//	DDRB_DDRB3=1;	//雨刮时间AD转换输入口/AD3
//	DDRB_DDRB4=1;	//下载用
	DDRB_DDRB5=1;	//74HC595
	DDRB_DDRB6=1;	//74HC595
	DDRB_DDRB7=1;	//74HC595

//	DDRC_DDRC0=1;	//CANTX
//	DDRC_DDRC1=0;	//CANRX
	DDRC_DDRC2=1;	//小液晶SCL
	DDRC_DDRC3=1;	//小液晶SDA
	DDRC_DDRC4=1;	//工作指示灯
	DDRC_DDRC5=1;	//LM2576-5V控制
	DDRC_DDRC6=1;	//RST_6606

	DDRD_DDRD0=1;	//MC33389片选
//	DDRD_DDRD1=0;	//MISO
//	DDRD_DDRD2=1;	//MOSI
//	DDRD_DDRD3=1;	//SPSCK
	DDRD_DDRD4=1;	//MC33993片选
	DDRD_DDRD5=1;	//背光
	DDRD_DDRD6=1;	//24C256 SCL
	DDRD_DDRD7=1;	//24C256 SDA

	DDRE_DDRE0=1;	//RS
	DDRE_DDRE1=1;	//RW
	DDRE_DDRE2=1;	//E
	DDRE_DDRE3=1;	//CSA
	DDRE_DDRE4=1;	//CSB
	DDRE_DDRE5=1;	//RST
	
	DDRF_DDRF0=1;	//FDY
	DDRF_DDRF1=1;	//CCWDY
	DDRF_DDRF2=1;	//FRY
	DDRF_DDRF3=1;	//CCWRY
	DDRF_DDRF4=1;	//FJY
	DDRF_DDRF5=1;	//CCWJY
	DDRF_DDRF6=1;	//FSW
	DDRF_DDRF7=1;	//CCWSW

//	DDRG_DDRG0=1;	//D0
//	DDRG_DDRG1=1;	//D1
//	DDRG_DDRG2=1;	//D2
//	DDRG_DDRG3=1;	//D3
//	DDRG_DDRG4=1;	//D4
//	DDRG_DDRG5=1;	//D5
//	DDRG_DDRG6=1;	//D6
//	DDRG_DDRG7=1;	//D7
//大LCD用

	//内部上拉
	//PTA作为键盘输入口内部自动上拉
/*	PTAPUE_PTAPUE0=1;	//
	PTAPUE_PTAPUE1=1;	//
	PTAPUE_PTAPUE2=1;	//
	PTAPUE_PTAPUE3=1;	//
	PTAPUE_PTAPUE4=1;	//
	PTAPUE_PTAPUE5=1;	//
	PTAPUE_PTAPUE6=1;	//
	PTAPUE_PTAPUE7=1;	//

	//PTB无内部上拉
	
	//PTC
	PTCPUE_PTCPUE0=1;	//
	PTCPUE_PTCPUE1=1;	//
	PTCPUE_PTCPUE2=1;	//
	PTCPUE_PTCPUE3=1;	//
	PTCPUE_PTCPUE4=1;	//
	PTCPUE_PTCPUE5=1;	//
	PTCPUE_PTCPUE6=1;	//
	
	PTDPUE_PTDPUE0=1;	//
	PTDPUE_PTDPUE1=1;	//
	PTDPUE_PTDPUE2=1;	//
	PTDPUE_PTDPUE3=1;	//
	PTDPUE_PTDPUE4=1;	//
	PTDPUE_PTDPUE5=1;	//
	PTDPUE_PTDPUE6=1;	//
	PTDPUE_PTDPUE7=1;	//
*/
}
//////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -