📄 adc_db_main.c
字号:
}
case 4://KEY down
//TMR0IE=1;
if(keybit==1)
{ back_led_time=0;
back_led=0; //ON
//TMR2ON=1; CCPR1L=0x55;
keybit=0;
if(savenum > 0 && savenum <10)
savenum--;
else
savenum=0;
}
break;
default:
break;
}
}
//---------------------------------------
//名称: 初始化函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
void init(void)
{
asm("CLRWDT");
ADCON1=0X06;
OPTION=0x83;
TRISA=0B00111111;
TRISB=0B00000000;
TRISC=0B00000000;
PORTA=0;
PORTB=0x06;
PORTC=0x2d;
RBIE=0;
}
//---------------------------------------
//名称: AD初始化函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
void ADC_init(void)
{
ADCS0=0;
ADCS1=0; //AD转换时钟选择位=FOSC/32
PCFG0=1;
PCFG1=1;
PCFG2=0; //A0A1A3为AD
ADIE=0;
}
//---------------------------------------
//名称: AD转换函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
unsigned char adc_read(unsigned char channel)
{// ADC_init();
ADCS0=0;
ADCS1=0; //AD转换时钟选择位=FOSC/32
PCFG0=1;
PCFG1=1;
PCFG2=0; //A0A1A3为AD
ADIE=0;
ADCON0 = (channel << 3) + 0x81; // enable ADC, FOSC/32 osc.
asm("CLRWDT");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO = 1;
while(ADGO)
continue; //wait for conversion complete
return ADRES;
}
//-----------------------------------------
//名称: AD-电压变换函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
void dianya_zhuanhuan(void)
{
uint16 V;
asm("CLRWDT");
V=(int)((double)ADC_valmax*267/25.5);//电压值 放大100
if(V<1680)// ---
{
//fhao=0;
ValDB=(int)((1680-V)/0.19); // db=(v-1.68)/0.0193
ValDB=ValDB|0x8000;
//calc_DBtoMW(ValDB);
}
else//++++++
{
ValDB=(int)((V-1680)/0.19);
//calc_DBtoMW(ValDB);
}
}
//*---------------------------------------
//名称: AD-电压变换函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
void LCD_show( unsigned char pagenum , int show_dbbuf,long show_mwbuf)
{ int disbufdb=0;
uint8 i=0;
asm("CLRWDT");
if(pagenum) //DS
{
LCD_write_char(0,0,7,1); LCD_write_char(1,0,2,1);
LCD_write_shu(15,0,savenum,1);
}
else // TS
{
LCD_write_char(0,0,3,1); LCD_write_char(1,0,2,1);
LCD_write_shu(15,0,savenum,1);
}
switch(pagenum)
{
case 0: //PAGE1
//asm("CLRWDT");
case 1:
asm("CLRWDT");
if(show_dbbuf ==0xffff)
{
for(i=4;i<=8;i++)
LCD_write_char(i,2,4,1); // "----- db"
// LCD_write_char(10,2,1,1); //d
// LCD_write_char(11,2,0,1); //b
for(i=4;i<=10;i++)
LCD_write_char(i,4,4,1); //"---------"
}
else
{
//Noise db
if((show_dbbuf&0x8000)!=0)//
{
LCD_write_char(4,2,4,1); //显示“-”
} //-
else
{
LCD_write_char(4,2,5,1); //显示“ ”
} //
disbufdb=show_dbbuf&0x7fff;
// LCD_write_shu(5,2,(disbufdb/100)%10,1); //x
// LCD_write_shu(6,2,(disbufdb%100)/10,1); //x
//// LCD_write_char(7,2,6,1); //.
// LCD_write_shu(7,2,disbufdb%10,1); //x
// LCD_write_char(10,2,1,1); //d
// LCD_write_char(11,2,0,1); //b
LCD_write_shu(5,2,(disbufdb/1000),1); //x
LCD_write_shu(6,2,(disbufdb%1000)/100,1); //x
LCD_write_shu(7,2,((disbufdb%1000)%100)/10,1); //x
LCD_write_shu(8,2,((disbufdb%1000)%100)%10,1); //x
//Noise mw
asm("CLRWDT");
LCD_write_char(4,4,4,1); //-
LCD_write_char(5,4,4,1); //-
LCD_write_char(6,4,4,1); //-
LCD_write_char(7,4,4,1); //-
LCD_write_char(8,4,4,1); //-
LCD_write_char(9,4,4,1); //-
LCD_write_char(10,4,4,1); //-
LCD_write_char(11,4,4,1); //-
// LCD_write_shu(4,4,(uint8)(show_mwbuf/100000000),1); //-
// LCD_write_shu(5,4,(uint8)(show_mwbuf/10000000)%10,1);//-
// LCD_write_shu(6,4,(uint8)(show_mwbuf/1000000)%10,1); //x
// LCD_write_shu(7,4,(uint8)(show_mwbuf/100000)%10,1); //x
// LCD_write_shu(8,4,(uint8)(show_mwbuf/10000)%10,1); //.
// LCD_write_shu(9,4,(uint8)(show_mwbuf/1000)%10,1); //x
// LCD_write_shu(10,4,(uint8)(show_mwbuf/100)%10,1); //v
// LCD_write_shu(11,4,(uint8)(show_mwbuf/10)%10,1); //v
// LCD_write_shu(12,4,(uint8)(show_mwbuf%10),1); //v
}
break;
default:
break;
}
}
//---------------------------------------
//名称: t0初始化函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
void init_timer0(void)
{
T0CS=0; //TMR0工作于
PSA=0; //TMR0分频器
PS2=1;
PS1=1;
PS0=1;
TMR0IF=0;
TMR0IE=1;
TMR0=255;
GIE=1;
}
//---------------------------------------
//名称: 中断处理函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
void interrupt ISR(void)
{ //(256-初值)*分频系数*4/12M
if(TMR0IF==1) //256us
{
TMR0IF=0;
TMR0=255;
GIE=0;
showflash_time++;
ADCS0=0;
ADCS1=0; //AD转换时钟选择位=FOSC/32
PCFG0=1;
PCFG1=1;
PCFG2=0; //A0A1A3为AD
ADIE=0;
ADCON0 = (2 << 3) + 0x81; // enable ADC, FOSC/32 osc.
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO = 1;
while(ADGO)
continue; //wait for conversion complete
//return ADRES;
//
if(ADRES>ADC_valmax)
{
ADC_valmax=ADRES;
}
GIE=1;
}
}
//---------------------------------------
//名称: CCP初始化函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
void CCP_init(void)
{
CCPR1L=0x00;
CCP1CON=0x3c;
PR2=0xff; //频率15.625KHZ
T2CKPS1=0; T2CKPS0=1; //前分频为1:1
TRISC2=0; //将RC2设置为输出
TMR2ON=0; //启动TIMER2
//pwmbuf=0;
}
//---------------------------------------
//名称: 主函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
void main(void)
{ uint8 timetest=0,beeptime_fig=0;//
uint8 i=0;
init();
init_timer0();
CCP_init();
//ADC_init();
LCD_init();
LCD_clear();
back_led=0; //ON
while(1)
{
//TMR0IE=0;
asm("CLRWDT");
keypro(); //按键扫描
if(showpage==0)//测试页
{
//-----ad转换间隔---------------------------------
if(showflash_time>5000) // if(timetest>20)
{
//LCD_clear();
dian_fig^=1;
if(dian_fig)
{
for(i=0;i<3;i++)
{
LCD_write_char(2+i,0,6,1); //.
}
}
else
{
for(i=0;i<3;i++)
{
LCD_write_char(2+i,0,5,1); //.
}
}
dianya_zhuanhuan(); //ad转换处理
// LCD_show(showpage,ValDB,ValMW); //显示刷新
ADC_valmax=0;
showflash_time=0;// timetest=0;//
}
// else
// timetest++;
//------报警 --------------------------------
if((ValDB&0x7fff)<=6000 )//报警
{
if((ValDB&0x7fff)<=2000)
{
if(beeptime_fig>2)
{
beeptime_fig=0;
TMR2ON^=1;
led_ds^=1;
CCPR1L=0x55;
}
else
beeptime_fig++;
}
else if((ValDB&0x7fff)>2000 && (ValDB&0x7fff)<=4000 )
{
if(beeptime_fig>4)
{
beeptime_fig=0;
TMR2ON^=1;
led_ds^=1;
CCPR1L=0x55;
}
else
beeptime_fig++;
}
else
{
if(beeptime_fig>6)
{
beeptime_fig=0;
TMR2ON^=1;
led_ds^=1;
CCPR1L=0x55;
}
else
beeptime_fig++;
}
}
else
{
led_ds=0; //关
TMR2ON=0; //PWM
}
LCD_show(showpage,ValDB,ValMW); //显示刷新
// ADC_valmax=0;
}
else //回显页
{ led_ds=0; //关
CCPR1L=0xff;
TMR2ON=0;
if(ValDB_Save[savenum]==0xffff)
LCD_show(1,0xffff,0xffff);
else
LCD_show(1,ValDB_Save[savenum],0); //显示刷新
}
//-------背光灯-------------------------------
if(back_led_time>200)
{
back_led=1; //OFF
}
else
back_led_time++;
//---------------------------------------------
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -