⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc_db_main.c

📁 PIC测试辐射强度代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -