📄 carxh.c
字号:
//
#include <iom8v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define ky (PINC & 0x1)==0x0 //pc0
//ad输入为pc2
#define adjs (ADCSRA & 0x10)==0x10
#define jsbzc ADCSRA|=0x10
#pragma data:data
uchar hmjs,mjs,fjs,mbz,nmjs,nmbz;
uchar bxjs;
uint pinl;
static uchar xh[32];
for (i=1;i<2000;i++)
WDR();
}
void delay(unsigned int n)
{
unsigned int i=0;
while (i<n)
{
delay_1ms();
i++;
WDR();
}
}
//Watchdog initialize
// prescale: 2048K
void watchdog_init(void)
{
WDR(); //this prevents a timout on enabling
WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}
//TIMER2 initialize - prescale:1024
// WGM: Normal
// desired value: 1Hz
// actual value: Out of range
void timer2_init(void) //秒信号产生
{
TCCR2 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT2 = 0x35c; //INVALID SETTING
OCR2 = 0x00; //INVALID SETTING
TCCR2 = 0x07; //start 1024
}
TCCR1A = 0x00;
TCCR1B = 0x01; //start Timer
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
TCNT1 =pinl;
PORTD=xh[bxjs];
bxjs++;
if (bxjs>31) bxjs=0;
}
void init_devices(void) //外部4mhz ckopt=空,CKSEL3-1=空
{
CLI(); //disable all interrupts
port_init();
watchdog_init();
timer1_init();
timer2_init();
TIMSK =(1<<TOIE1)|(1<<TOIE2); //中断控制
SEI(); //re-enable interrupts
}
//dz=0-512
void epwr(uint uaddr,uchar udata)
{
while (EECR & (1<<EEWE)); //等待前一次写操作完成
EEAR=uaddr; //写地址到EEAR寄存器
EEDR=udata; //写数据到EEDR寄存器
EECR|=(1<<EEMWE); //写EEMWE位,允许操作
EECR|=(1<<EEWE); //写EEWE位,开始写操作
}
uchar eprd(uint uaddr)
{
while (EECR & (1<<EEWE)); //等待前一次写操作完成
EEAR=uaddr; //写地址到EEAR寄存器
EECR|=(1<<EERE); //写EERE位,开始读操作
return EEDR;
}
void main()
{
uchar j,sa,sb,sc,sd,bz,pobz,dssj,dsbz;
uint ia,ib,ic,id,ie,pinp;
init_devices();
jk1l;
jk2l;
jk3l;
fmql;
led1h;
led2h;
dsbz=0;
sa=eprd(10);
if (sa>1000)
{
sa=500;
epwr(10,sa);
}
pinp=sa;
pinl=0xff00;
bz=eprd(12);
if (bz==1)
{
for (j=0;j<32;j++)
xh[j]=fang[j];
led2l;
}
else
{
for (j=0;j<32;j++)
xh[j]=zheng[j];
led2h;
}
loop:
WDR();
if (nmbz==1 && pobz==1)
{
nmbz=0;
fmqh;
delay(18);
fmql;
}
if (ind) //定时键
{
if (dsbz==2)
{
dsbz=3;
dssj=180;
}
if (dsbz==1)
{
dsbz=2;
dssj=120;
}
if (dsbz==0)
{
dsbz=1;
dssj=60;
}
for (j=0;j<dsbz;j++)
{
fmqh;
delay(246);
fmql;
delay(128);
}
pobz=1;
jk2h;
if (bz==1) jk3l;
else jk3h;
fjs=0;
led1l;
}
if (dsbz!=0) jk1h;
else jk1l;
if (fjs>=dssj && dsbz==1)
{
led1h;
led2h;
pobz=0;
jk2l;
dsbz=0;
}
if (pvin)
{
led1h;
led2h;
pobz=0;
jk2l;
dsbz=0;
}
if (inb && pobz==1) //频率加
{
if (pinp<1000) pinp=pinp+1;
fmqh;
delay(46);
sa=pinp;
epwr(10,sa);
fmql;
}
if (inc && pobz==1) //频率减
{
if (pinp>1) pinp=pinp-1;
fmqh;
delay(46);
sa=pinp;
epwr(10,sa);
fmql;
}
if (ina) //电源开关
{
if (pobz==1)
{
pobz=0;
jk1l;
jk2l;
jk3l;
dsbz=0;
led1h;
led2h;
}
else
{
pobz=1;
jk2h;
if (bz==1) jk3l;
else jk3h;
led1l;
if (bz==1) led2l;
else led2h;
}
fmqh;
delay(46);
while (ina) WDR();
fmql;
}
if (ky && pobz==1) //波形切换
{
if (bz==0)
{
bz=1;
for (j=0;j<32;j++)
xh[j]=fang[j];
jk3l;
led2l;
}
else
{
bz=0;
for (j=0;j<32;j++)
xh[j]=zheng[j];
jk3h;
led2h;
}
epwr(12,bz);
fmqh;
delay(246);
while (ky) WDR();
fmql;
}
ia=pinp;
if (ia>1024) ia=1024;
ib=ia*2;
sa=pinlv[ib++];
sb=pinlv[ib];
ic=sa;
ic=ic<<8;
ic=ic|sb;
pinl=ic;
goto loop;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -