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

📄 carinit.c

📁 本次设计的自动往返电动小汽车
💻 C
字号:
// car_init.c
// 8/1/2005 written by MrLiu
//
#include <io8515v.h>
#include <macros.h>

#include "1602LCD.h"
#include "CarInit.h"

// globals :
int tenms=0;

// extern varables :
extern int lcnt;
extern int qcnt;
extern int juli[3];
extern unsigned int time[3];

////////////////////////////////////////////
// Function : port_init()
// Purpose :端口初始化
// Comments : A口输出/B口输出/C口输入/D口输入
//
void port_init(void)
{
    PORTA = 0xFF;
 	DDRA  = 0xFF;
 	PORTB = 0xFF;
 	DDRB  = 0xFF;
 	PORTC = 0xFF;
 	DDRC  = 0x00;
 	PORTD = 0xFF;
 	DDRD  = 0x00;
}

//////////////////////////////////////////
// Function : timer0_init()
// Purpose : T/C0初始化
// Commnets :产生10ms中断
//
void timer0_init(void)
{
 TCCR0 = 0x00; //stop timer
 TCNT0 = 0xB2; //set count value
 TCCR0 = 0x05; //start timer
}

// Function : timer0_ovf_isr()
// Purpose : T/C0中断服务
//
#pragma interrupt_handler timer0_ovf_isr:8
void timer0_ovf_isr(void)
{
    TCNT0 = 0xB2; //reload counter value
 	tenms++;
 	if (tenms==10)
 	{
	    tenms=0;
		time[2]++;
		if(time[2]<10)
		    LCD_write(8,0,'0'+time[2]);
		if(time[2]==10)
 		{
		    time[2]=0;
	        LCD_write(8,0,'0'+time[2]);
			time[1]++;
		    if(time[1]<10)
		    LCD_write(6,0,'0'+time[1]);
		    if(time[1]==10)
			{
		        time[1]=0;
				LCD_write(6,0,'0'+time[1]);
				time[0]++;
				if(time[0]==10)time[0]=0;
		        LCD_write(5,0,'0'+time[0]);
			} 
	    }
    }
}

////////////////////////////////////////
// Function : timer1_init()
// Purpose : T/C1 PWM模式初始化
//
void timer1_init(void)
{
    TCCR1B = 0x00; //stop
 	TCNT1H = 0xE0; //setup
 	TCNT1L = 0xC0;
 	OCR1AH = 0x1F;
 	OCR1AL = 0x40;
 	OCR1BH = 0xFF;
 	OCR1BL = 0xFF;
 	TCCR1A = 0x63;
 	TCCR1B = 0x01; //start Timer
}

////////////////////////////////////////
// Function : int0_isr()
// Purpose : INT0中断服务
//
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
   lcnt++;//检测的线条数目
}
///////////////////////////////////////
// Function : int1_1sr()
// Purpose : INT1中断服务
//
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
    qcnt++;	
	if(juli[0]!=JULI/100)
    {	
	    juli[0]=JULI/100;
	    LCD_write(5,1,'0'+juli[0]);
	}                         
 	if(juli[1]!=(JULI-juli[0]*100)/10)
	{
	    juli[1]=(JULI-juli[0]*100)/10;
	    LCD_write(6,1,'0'+juli[1]);
	}	
 	if(juli[2]!=JULI-juli[1]*10-juli[0]*100)
	{    
		juli[2]=JULI-juli[1]*10-juli[0]*100;
		LCD_write(8,1,'0'+juli[2]);
	}	   	
}

////////////////////////////////
// Function : init_devices()
// Purpose : 硬件初始化
//
void init_devices(void)
{
    CLI(); 
 	port_init();
 	timer0_init();
 	timer1_init();
 	PORTA&=0xC0;
 	PORTB=0xFF;                                      
 	MCUCR = 0x0F;
 	GIMSK = 0xC0;
 	TIMSK = 0x02;
 	SEI(); 
}

///////////////////////////////
// 控制车速函数
//
void shifth(void)			   				  //控制高速
{
    OCR1BH = 0xFF; 	   					 
 	OCR1BL = 0xFF;
}
//////////////////////////////
//
void stop(void)								  //制动
{
    OCR1BH = 0x00; 	   					 
 	OCR1BL = 0x00;
}
//////////////////////////////
//
void shiftl(void)							  //控制低速
{
    OCR1BH = 0x01; 	   					 
 	OCR1BL = 0xFF;
}

⌨️ 快捷键说明

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