📄 main._c
字号:
//**************************************************
//project :SPEED TO POWER SWITCH
//chiptype :ATMEGA48
//Clock frequency :8.00000MHZ
//Author :XIEHELI
//From :HORN
//**************************************************
#include<iom48v.h>
#include<macros.h>
#define u08 unsigned char
#define u16 unsigned int
#define u32 unsigned long
#pragma interrupt_handler Icp_time0:17
#pragma interrupt_handler Int0:2
void sendData(u08 cbit);
void delay(u08 tick);
void port_init(void);
void time_init(void);
void delayms(u08 time);
void delays(u08 time1);
u16 speed_test(void);
void eeprom_write(u16 adrw,u08 add);
u08 eeprom_read(u16 adrr);
//u16 data;
u16 data_temp1;
u16 data_temp2;
//u08 number;
void main(void)
{
u08 temp;
//u08 temp1;
u16 ep_temp;
u08 speed1;
u08 speed2;
u08 ep_temp1;
u08 ep_temp2;
u16 speed_temp;
u16 speed_temp1;
u08 flag;
u08 deciMeter;
u16 timeBlock=111;
//u08 num_temp1;
//u08 num_temp2;
//u08 temp3;
//u08 temp2;
flag=0x00;
port_init(); //I/O口初始化
time_init();
//temp1=0;
speed_temp=0;
SREG|=0x80;
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
while(1)
{
temp=0;
//delayms(10);
//delays(50);
delay(255);
delay(26);
while((0x10&0x10)&&(++timeBlock<896));//计算距离,将距离和数据对应
deciMeter=(u32)timeBlock*15*18/9300;
while(temp<=100)
{
sendData(0x37);
}
while((PIND&0x20)&&(temp<=100))//判断按键是否按下1s,设定车速信号
{
//temp=50;
delayms(10);
temp++; //speed=speed_test(); //测定车速信号
if((PIND&0x20)&&(temp==99))
{
speed_temp=data_temp2; //测定车速信号
speed_temp1=speed_temp;
speed1=(u08)(speed_temp&0x00ff);
speed2=(u08)(speed_temp1>>8);
SREG=0x00;
eeprom_write(0x0025,speed1);//将用户设定车速写进EEPROM
//delayms(20);
eeprom_write(0x0026,speed2);
temp=111;
SREG|=0x80;
}
else
NOP();
}
SREG=0x00;
ep_temp1=eeprom_read(0x0025);//读取EEPROM中用户设定的车速
//delayms(20);
ep_temp2=eeprom_read(0x0026);
SREG|=0x80;
ep_temp=(ep_temp2<<8)+ep_temp1;
speed_temp=data_temp2; //调用测定车速信号
sendData(ep_temp2);
delays(1);
}
}
void port_init(void)
{
DDRB=0x10;
DDRC=0x02;
DDRD=0x00;
PORTC=0x00;
PORTB=0x00;
PORTD=0x00;
}
void time_init(void)
{
TCCR0A=0x00;
TCCR0B=0x03;
TIMSK0=0x01;
TIFR0=0x01;
TCNT0=0xc0;
EICRA=0x01;
EIMSK=0x01;
EIFR=0x01;
}
void eeprom_write(u16 adrw,u08 add)
{
/* 等待上一次写操作结束 */
while(EECR & (1<<EEPE));
/* 设置地址和数据寄存器 */
EEAR=adrw;
EEDR=add;
/* 置位EEMWE */
EECR|=(1<<EEMPE);
/* 置位EEWE 以启动写操作E */
EECR|=(1<<EEPE);
}
u08 eeprom_read(u16 adrr)
{
/* 等待上一次写操作结束 */
while(EECR & (1<<EEPE));
/* 设置地址寄存器 */
EEAR=adrr;
/* 设置EERE 以启动读操作 */
EECR|=(1<<EERE);
/* 自数据寄存器返回数据 */
return EEDR;
}
void delay(u08 tick)
{
while(--tick);
}
void delayms(u08 time)
{
u08 tim1,i;
tim1=time;
for(i=0;i<tim1;i++)
{
delay(50);
}
}
void delays(u08 time1)
{
u08 tim2,j;
tim2=time1;
for(j=0;j<tim2;j++)
{
delayms(250);
}
}
void Icp_time0(void)
{
SREG=0x00;
TIFR0=0x01;
data_temp2=data_temp1;
data_temp1=0x0000;
TCNT0=0xc0;
SREG|=0x80;
}
void Int0(void)
{
//SREG=0x00;
data_temp1++;
//SREG|=0x80;
}
void sendData(u08 cbit)
{
u08 k;
u08 hbit;
//hbit=0x01;
PORTC=0x02;
delay(180);
PORTC=0x00;
delay(15);
//delay(26);
//PORTB=0x08;
//buz(cbit);
for(k=0;k<8;k++)
{
hbit=(cbit&0x80);
if(hbit)
{
PORTC=0x02;
delay(16);
PORTC=0x00;
delay(50);
//PORTB=0x00;
}
else
{
PORTC=0x02;
delay(50);
PORTC=0x00;
delay(16);
//PORTB=0x00;
}
cbit<<=1;
}
//buz(cbit);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -