📄 adc_db_main.c
字号:
#include <pic.h>
#include <math.h>
#include <stdlib.h>
#define uint16 unsigned int
#define uint8 unsigned char
#define onout 0
#define offout 1
#define key3_up RA0 //key1_mode按键
#define key4_down RA1 //key2_set按键
#define key2_set RA4 //key3_up按键
#define key1_mode RA5 //key4_down按键
//#define beepio RC2//蜂鸣器
#define led_ds RC1
#define back_led RC0
#define DI RC5 // 数据\指令 选择
#define RW RC5 // 读\写 选择
#define E RC7 // 读\写使能
#define CS2 RC3 // 片选1
#define CS1 RC4 // 片选2
//#define RST 0 ; // 复位
#define LCDdata PORTB // 复位
#define Display_on write_cmd(0x3f) //display_on
#define Display_off write_cmd(0x3e) //display_on
int ValDB=0;
int ValDB_Save[10]={0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
long ValMW=0xffff;
//unsigned char dianyabuf;
//unsigned char showpage=0;
char showpage=0;
char savenum=0;
//unsigned char testcom=0;
bit keybit;
bit fhao=0;
bit dian_fig=0;
uint8 back_led_time=0;
unsigned char keycon;
unsigned char ADC_valmax=0;
static unsigned int showflash_time=0;
const unsigned char number[]={
/*-- 文字: 0 --*/
/*-- System12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF0,0xF8,0x08,0x08,0xF8,0xF0,0x00,0x00,0x0F,0x1F,0x10,0x10,0x1F,0x0F,0x00,
/*-- 文字: 1 --*/
/*-- System12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,
/*-- 文字: 2 --*/
/*-- System12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x30,0x38,0x08,0x88,0xF8,0x70,0x00,0x00,0x1C,0x1E,0x13,0x11,0x10,0x10,0x00,
/*-- 文字: 3 --*/
/*-- System12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x18,0x88,0x88,0xF8,0x70,0x00,0x00,0x08,0x18,0x10,0x10,0x1F,0x0F,0x00,
/*-- 文字: 4 --*/
/*-- System12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0xE0,0x70,0xF8,0xF8,0x00,0x00,0x06,0x07,0x05,0x04,0x1F,0x1F,0x00,
/*-- 文字: 5 --*/
/*-- System12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x00,0x00,0x09,0x19,0x10,0x10,0x1F,0x0F,0x00,
/*-- 文字: 6 --*/
/*-- System12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF0,0xF8,0x88,0x88,0x98,0x10,0x00,0x00,0x0F,0x1F,0x10,0x10,0x1F,0x0F,0x00,
/*-- 文字: 7 --*/
/*-- System12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x08,0x08,0x88,0xE8,0x78,0x18,0x00,0x00,0x00,0x1C,0x1F,0x03,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- System12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0xF8,0x88,0x88,0xF8,0x70,0x00,0x00,0x0F,0x1F,0x10,0x10,0x1F,0x0F,0x00,
/*-- 文字: 9 --*/
/*-- System12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF0,0xF8,0x08,0x08,0xF8,0xF0,0x00,0x00,0x08,0x19,0x11,0x11,0x1F,0x0F,0x00
};
const unsigned char dischar[]={
/*-- 文字: B --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: d --11*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,
/*-- 文字: S --12*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字: T --13*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,
/*-- 文字: - --14*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
/*-- 文字: --15*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: . --16*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: D --17*/
/*-- ddd12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,
};
/**********************************************\
|* 写命令子程序 *|
\**********************************************/
void write_cmd(uint8 cmd) //写命令子程序
{ GIE=0;
asm("nop");
E=0;
asm("nop");
RW=0;
DI=0; //DI=0 写命令
asm("nop");
asm("nop");
E=1;
asm("nop");
asm("nop");
LCDdata=cmd;
asm("nop");
asm("CLRWDT");
E=0; //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR
asm("nop");
E=1;
GIE=1;
}
/**********************************************\
|* 写数据子程序 *|
\**********************************************/
void write_dat(uint8 dat,uint8 disfig) //写数据子程序
{ GIE=0;
asm("nop");
E=0;
asm("nop");
RW=0;
DI=1; //DI=1 写数据
asm("nop");
asm("nop");
E=1;
asm("nop");
asm("nop");
if(disfig==0) LCDdata=~dat; //按位取反得阴文
else if(disfig==1) LCDdata=dat;
disfig=1;
asm("nop");
asm("CLRWDT");
E=0; //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR
asm("nop");
E=1;
GIE=1;
}
/**********************************************\
|* 设置显示起始行 X地址和Y地址 *|
\**********************************************/
void LCD_set_XY(uint8 x_add,uint8 y_add) //设置显示起始行 X地址和Y地址
{ //st_line
write_cmd(0xc0); //+0xc0是参照设置起始行的格式
write_cmd(x_add+0xb8); //+0xb8是参照设置页地址的格式
if(y_add<64) { CS1=1;CS2=0;write_cmd(y_add+0x40);} //Y_add地址实际上只有0~63 采用CS1和CS2选左右半屏
else { CS1=0;CS2=1;write_cmd(y_add);}
}
/***********************************************\
|* 写字符 8x16 字符 *|
\***********************************************/
void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c,uint8 disfig) //row:列 page:页 dd:字符
{
uint8 i;
asm("CLRWDT");
for(i=0; i<8;i++)
{
LCD_set_XY(page, row*8+i);// 列,页 row横向
write_dat(number[c*16+i],disfig);
}
asm("CLRWDT");
for(i=0; i<8;i++)
{
LCD_set_XY(page+1, row*8+i);// 列,页
write_dat(number[c*16+i+8],disfig);
}
write_cmd(0x3f); //开显示
}
//--------------
void LCD_write_char(unsigned char row, unsigned char page,unsigned char c,uint8 disfig) //row:列 page:页 dd:字符
{
uint8 i;
asm("CLRWDT");
for(i=0; i<8;i++)
{
LCD_set_XY(page, row*8+i);// 列,页 row横向
write_dat(dischar[c*16+i],disfig);
}
asm("CLRWDT");
for(i=0; i<8;i++)
{
LCD_set_XY(page+1, row*8+i);// 列,页
write_dat(dischar[c*16+i+8],disfig);
}
write_cmd(0x3f); //开显示
}
void LCD_clear(void)
{
unsigned char t;
unsigned char k;
for(t=0;t<8;t++)
{
for(k=0;k<128;k++)
{
LCD_set_XY(t,k);
write_dat(0x00,1);
asm("CLRWDT");
}
}
write_cmd(0x3f); //开显示
}
void LCD_init(void)
{
RW=1;
DI=1; //DI=1 写数据
E=1;
write_cmd(0xc0); //
}
//---------------------------------------
//名称: 1ms延时函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
void delay_1ms(void)//1ms延时函数
{
unsigned int i;
for (i=0;i<500;i++)
asm("CLRWDT");
}
//---------------------------------------
//名称: 按键扫描函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
unsigned char key(void)
{
if(key1_mode==1&&key2_set==1&&key3_up==1&&key4_down==1) return 0;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("CLRWDT");
if(key1_mode==0)
{
delay_1ms();
if(key1_mode==0)
{
//TMR0IE=0;
return 1;
}
else
return 0;
}
if(key2_set==0)
{
delay_1ms();
if(key2_set==0)
{
//TMR0IE=0;
return 2;
}
else
return 0;
}
if(key3_up==0)
{
delay_1ms();
if(key3_up==0)
{
//TMR0IE=0;
return 3;
}
else
return 0;
}
if(key4_down==0)
{
delay_1ms();
if(key4_down==0)
{
// TMR0IE=0;
return 4;
}
else
return 0;
}
// GIE=1;
return 0;
}
//---------------------------------------
//名称: 按键处理函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216
//-----------------------------------------
void keypro(void)
{
char i=0;
ADCON1=0X06;
TRISA=0B00111111;
asm("CLRWDT");
switch(key())
{
case 0:
if(keybit==0)
{
if(++keycon>2)
{
keycon=0;
keybit=1;
LCD_write_char(0,6,5,1); //' '
LCD_write_char(1,6,5,1); //' '
LCD_write_char(2,6,5,1); //' '
LCD_write_char(3,6,5,1); //' '
LCD_write_char(4,6,5,1); // ' '
LCD_write_char(5,6,5,1); // ' '
LCD_write_char(6,6,5,1); // ' '
}
}
break;
case 1: //KEY MODE
//TMR0IE=1;
if(keybit==1)
{ LCD_clear();
// GIE=0;
back_led_time=0;
back_led=0; //ON
// TMR2ON=1; CCPR1L=0x55;
showpage^=1;
keybit=0;
savenum=0;
// GIE=1;
}
break;
case 2: //KEY set
//TMR0IE=1;
if(keybit==1)
{
back_led_time=0;
back_led=0; //ON
keybit=0;
//TMR2ON=1; CCPR1L=0x55;
if(showpage==0) //TS页
{ if(savenum==0)
{for(i=0;i<10;i++)
{ValDB_Save[i]=0xffff;
}
}
LCD_write_char(0,6,2,1); //S
LCD_write_char(1,6,6,1); //.
LCD_write_char(2,6,6,1); //.
LCD_write_char(3,6,6,1); //.
ValDB_Save[savenum]=ValDB;
LCD_write_char(4,6,6,1); //.
LCD_write_char(5,6,6,1); //.
LCD_write_char(6,6,6,1); //.
}
else//TS页
{//del
LCD_write_char(0,6,7,1); //D
LCD_write_char(1,6,6,1); //.
LCD_write_char(2,6,6,1); //.
LCD_write_char(3,6,6,1); //.
ValDB_Save[savenum]=0xffff;
LCD_write_char(4,6,6,1); //.
LCD_write_char(5,6,6,1); //.
LCD_write_char(6,6,6,1); //.
}
savenum++;
if(savenum>=10)
savenum=0;
}
break;
case 3://KEY up
//TMR0IE=1;
if(keybit==1)
{ back_led_time=0;
back_led=0; //ON
keybit=0;
//TMR2ON=1; CCPR1L=0x55;
if((savenum >= 0) && (savenum < 9) )
savenum++;
else
savenum = 9;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -