📄 carinit.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 + -