📄 sy3.c
字号:
#include <pic.h>
//#include <pic16f87.h>
#include <math.h>
#include <stdio.h>
//#define STORE RA3
#define SCLK RA5
#define TK RB0
//#define KEYZERO RB1
//#define ADBUSY RC5
#define LCD_DA RB1
#define LCD_CK RB4
#define LCD_CS RB5
#define SVDD RB6
#define RLAY RB7
#define ADCLK RB3
#define ADCS RA0
#define ADIN RB2
#define ADOUT RC5
#define LAMP RA1
#define ALARM RA4
#define JL_UD RC6///////
#define MR_CS RC7
#define LCD_ON 0x8060
#define LCDOFF 0x8000
#define SYS_EN 0x8020
#define BAIS_4 0x8520//LCD相关口的定义结束
unsigned int j,k,lcdi,w1,lcdj,lcddigit,timetemp,jl_data,dx;
bank2 unsigned char lcdaddr,lcddata,lcdcom,time,adl,sec,err4,INIDATA1,INIDATA2;
bank3 unsigned char lcdid,lcddata1,lcdaddr1,lcdall,adt,errall,alarmall;
bank3 unsigned char digitbit1,digitbit2,digitbit3,digitbit4,err5,thousandbit;
bank3 unsigned char handredbit,tenbit,entriesbit,err1,BITRC4,LAMPCON,chronum,HYADI;
bank2 unsigned long refchzct,gaschzct,gaschzc,refchzc,avg;
union adres
{
int y1;
unsigned char adre[2];
}adresult;
unsigned int uo;
union mrunion
{
int mrdata;
unsigned char mrlh[2];
}mrall;
union jlunion
{
int jl;
unsigned char jllh[2];
}jlall;
union adsht
{
int y2;
unsigned char adsh[2];
}adshort;
unsigned int chroave,chroold,chronew,gasmax,gasmin,avgchro;
unsigned int shortave;
bank3 unsigned int adsumtemp,adsum,chrotemp,refchz,gaschz,Vrefchz,FAINT,gastemp,reftemp;
bank3 double adshttemp,adshtsum;
unsigned char arrlcd[20]={0X07,0X0D,0X03,0X00,0X06,0X0B,0X07,0X0A,//0-3
0X03,0X06,0X05,0X0E,0X05,0X0F,//4-6
0X07,0X00,0X07,0X0F,0X07,0X0E};//7-9
bank3 unsigned int re[5],mrtemp,min,max,num;
//bank2 unsigned int resht[20],chroshort,ttdata;
bank2 unsigned char jlj,jli,jlk,ykj,mr,aml,amh,madata,sendi,sendj;
bank2 unsigned int yki,m,n,ysi,forcenum,keyi,yysi,mr_data,jl_datadis,Vrefchzc;
bank2 unsigned int chrochar,mr_datadis,numini,refmax,refmin,Vrefmax,Vrefmin;
bank2 unsigned char yk_data,yk_add,yk_dec,yk_esc,yk_tab;
bank2 unsigned char keyk,yk_enter,yk_set,yk_data3,yk_data4;//,almini;
bank3 unsigned char errid,recom1,jl_bit,yk_delay,TxData=0X00;
bank3 unsigned char mrdata,yk_t,sendbit;//,recom1;
bank3 unsigned char bk,mrj,RcData,RcFlag,ADSET,adj,adk;
bank2 float FA,FB,FC;
////////////////////////////遥控接收///////////////////////
void dlay(void)
{
#asm
nop;nop;nop;nop;nop;nop;nop;nop;
#endasm
}
void delay_all(unsigned int delaynum)
{
for(num=0;num<delaynum;num++){;}
}
///////////////////////////////中断服务子程序//////////////////////////
//发送LCD的ID和命令控制字,w1=命令字
void LCD_CMD()
{
LCD_CS = 0;
for (lcdj=0;lcdj<12;lcdj++)
{
if (w1&0x8000)
{
LCD_DA=1;
}
else
{
LCD_DA=0;
}
LCD_CK = 0;
LCD_CK = 1;
w1 <<= 1;
}
LCD_CS = 1;
LCD_DA = 1;
}
//初始化LCD
void LCD_SETUP(void)
{
w1 = LCD_ON;
LCD_CMD();
w1 = SYS_EN;
LCD_CMD();
w1 = BAIS_4;
LCD_CMD();
}
//发送显示数据引导
void LCD_WRITE_HEAD(void)
{
LCD_DA = 1; //1
LCD_CK = 0;
LCD_CK = 1;
LCD_DA = 0; //0
LCD_CK = 0;
LCD_CK = 1;
LCD_DA = 1; //1
LCD_CK = 0;
LCD_CK = 1;
}
//LCD送4位显示码
//输入: lcddata = 4位
// lcdaddr = 偏移地址
void lcd_addr()
{
LCD_CS = 0;
LCD_WRITE_HEAD();
for (lcdi=0;lcdi<6;lcdi++)
{
if (lcdaddr & 0x20)
{
LCD_DA = 1;
}
else
{
LCD_DA = 0;
}
LCD_CK = 0;
LCD_CK = 1;
lcdaddr <<= 1;
}
}
void lcd_data()
{
LCD_CS=0;
for (lcdi=0;lcdi<4;lcdi++)
{
if (lcddata&0x08)
{
LCD_DA=1;
}
else
{
LCD_DA=0;
}
LCD_CK=0;
LCD_CK=1;
lcddata<<=1;
}
LCD_CS = 1;
}
//////LCD全显子程序//////
void lcd_display(lcdall)
{
CLRWDT();
LCD_CS = 1;
LCD_CS = 0;
lcdaddr = 0x00;
lcddata = lcdall;
for(k=0;k<0x20;k++)
{
lcdaddr1=lcdaddr;
lcd_addr();
lcddata1=lcddata;
lcd_data();
lcdaddr1=lcdaddr1+1;
lcdaddr=lcdaddr1;
lcddata=lcddata1;
}
LCD_CS=1;
}
//////////////////////////////////////////
//函数名称:digit_bit1(digitbit1)
//输入参数:位对应的数据digitbit1
//
//输出参数:无
//函数功能:显示第一位数据
//////////////////////////////////////////
void digit_bit1(digitbit1)
{
CLRWDT();
LCD_CS = 0;
lcdaddr = 0X00;
digitbit1 = digitbit1*2;
lcddata = arrlcd[digitbit1];
lcd_addr();
lcd_data();
lcdaddr = 0x01;
digitbit1 = (digitbit1 + 1);
lcddata = arrlcd[digitbit1];
lcd_addr();
lcd_data();
LCD_CS = 1;
}
//////////////////////////////////////////
//函数名称:digit_bit2(digitbit2)
//输入参数:位对应的数据digitbit2
//
//输出参数:无
//函数功能:显示第二位数据
//////////////////////////////////////////
void digit_bit2(digitbit2)
{
CLRWDT();
LCD_CS = 0;
lcdaddr = 0X02;
digitbit2 = digitbit2*2;
lcddata = arrlcd[digitbit2];
lcd_addr();
lcd_data();
lcdaddr = 0x03;
digitbit2 = (digitbit2 + 1);
lcddata = arrlcd[digitbit2];
lcd_addr();
lcd_data();
}
//////////////////////////////////////////
//函数名称:digit_bit3(digitbit3)
//输入参数:位对应的数据digitbit3
//
//输出参数:无
//函数功能:显示第三位数据
//////////////////////////////////////////
void digit_bit3(digitbit3)
{
CLRWDT();
LCD_CS = 0;
lcdaddr = 0X06;
digitbit3 = digitbit3*2;
lcddata = arrlcd[digitbit3];
lcd_addr();
lcd_data();
lcdaddr = 0x07;
digitbit3 = (digitbit3 + 1);
lcddata = arrlcd[digitbit3];
lcd_addr();
lcd_data();
}
//////////////////////////////////////////
//函数名称:digit_bit4(digitbit4)
//输入参数:位对应的数据digitbit4
//
//输出参数:无
//函数功能:显示第四位数据
//////////////////////////////////////////
void digit_bit4(digitbit4)
{
CLRWDT();
LCD_CS = 0;
lcdaddr = 0X09;
digitbit4 = digitbit4*2;
lcddata = arrlcd[digitbit4];
lcd_addr();
lcd_data();
lcdaddr = 0x0A;
digitbit4 = (digitbit4 + 1);
lcddata = arrlcd[digitbit4];
lcd_addr();
lcd_data();
}
////////////////////////////
//函数名称:digit_dispiay
//输入参数:要显示的数lcddigit
//输出参数:无
//函数功能:显示一个四位的数据
////////////////////////////
void digit_display(lcddigit)
{
thousandbit = (lcddigit/1000);
lcddigit = (lcddigit%1000);
handredbit = (lcddigit/100);
lcddigit = (lcddigit%100);
tenbit = (lcddigit/10);
entriesbit = (lcddigit%10);
//digit_bit1(00);
if(thousandbit ==0)
{
lcdaddr = 0x00;
lcddata = 0x00;
lcd_addr();
lcd_data();
lcdaddr = 0x01;
lcddata = 0x00;
lcd_addr();
lcd_data();
if(handredbit == 0)
{
lcdaddr = 0x02;
lcddata = 0x00;
lcd_addr();
lcd_data();
lcdaddr = 0x03;
lcddata = 0x00;
lcd_addr();
lcd_data();
if(tenbit == 0)
{
lcdaddr = 0x06;
lcddata = 0x07;
lcd_addr();
lcd_data();
lcdaddr = 0x07;
lcddata = 0x0D;
lcd_addr();
lcd_data();
if(entriesbit == 0)
{
lcdaddr = 0x09;
lcddata = 0x07;
lcd_addr();
lcd_data();
lcdaddr = 0x0A;
lcddata = 0x0D;
lcd_addr();
lcd_data();
}
else
{
digit_bit4(entriesbit);
}
}
else
{
digit_bit3(tenbit);
digit_bit4(entriesbit);
}
}
else
{
digit_bit2(handredbit);
digit_bit3(tenbit);
digit_bit4(entriesbit);
}
}
else
{
digit_bit1(thousandbit);
digit_bit2(handredbit);
digit_bit3(tenbit);
digit_bit4(entriesbit);
}
}
/////////////////////////////////////////////////
////////////////////////////////采样//////////////////////////
void lcd_clr(void)
{
CLRWDT();
lcdaddr = 0x01;lcddata = 0x00;//清0
lcd_addr();lcd_data();
lcdaddr = 0x02;lcddata = 0x00;//清0
lcd_addr();lcd_data();
lcdaddr = 0x03;lcddata = 0x00;
lcd_addr();lcd_data();
lcdaddr = 0x06;lcddata = 0x00;//清0
lcd_addr();lcd_data();
lcdaddr = 0x07;lcddata = 0x00;
lcd_addr();lcd_data();
lcdaddr = 0x09;lcddata = 0x00;//清0
lcd_addr();lcd_data();
lcdaddr = 0x0A;lcddata = 0x00;
lcd_addr();lcd_data();
CLRWDT();
}
//////////////////////按键处理子程序////////////////////////
///////////////////////4~20mA发送子程序//////////////////
/////////////////////////////主程序///////////////////////
void main()
{
// OPTION = 0XCE;//0XCD;//初始化
STATUS = 0X00;
T1CON = 0X00;
PIR1 = 0X00;
TRISA = 0X00;//RA0,RA1,RA2为采样输入
TRISB = 0X05;//RB0为遥控接受设为输入
RA4=0;//while(1){;}
TRISC = 0X00;
PORTC =0X00;
GIE=1;PEIE=1;
PIR1=0X00;
PIE1=0X20;
T1CON = 0X00;
TMR1IE = 0;
TMR1ON = 0;
INTE = 0;
ADIE = 0;
//ADCON0 = 0X41;
//ADCON1 = 0X80;
//ADCON1 = 0X86;
//ADCON1 = 0X82;
CLRWDT();
LCD_SETUP();
CLRWDT();
lcd_display(0xff);
lcdaddr = 0x11;
lcddata = 0x00;
lcd_addr();
lcd_data();
CLRWDT();
delay_all(30000);
CLRWDT();
delay_all(30000);
CLRWDT();
delay_all(30000);
CLRWDT();
delay_all(30000);
CLRWDT();
lcd_display(0x00);
INTE = 1; //外部中断打开1111111
ADIF = 0;
ADCON0 = (ADCON0&0XFB);
lcdaddr = 0x0C;
lcddata = 0x04;
lcd_addr();
lcd_data();
lcdaddr = 0x10;
lcddata = 0x08;
lcd_addr();
lcd_data();
yk_t = 1;
jl_bit = 0;
SVDD = 1;BITRC4=0X00;LAMPCON=0X00;
//GIE=1;PEIE=1;TMR1IF=0;TMR1IE=1;T1CON=0X20;TMR1L=0X00;
//TMR1H=0XD3;TMR1L=0X9C;T1CON=0X21;RC5=0;
//ADCON1 = 0X86;
CHS0 = 0;
CHS1 = 0;
CHS2 = 0;
ADIE=0;RC5=0;chroave=0x00;
ADCS=1;ADCLK=1;ADOUT=1;max=0x00;gaschz=0x0000;refchz=0x0000;
chronum=0;
LAMP=1;HYADI=0X00;avg=0x00;avgchro=0x00;
while(1)
{ LAMP=1;
delay_all(1000);//delay_all(500);
/*gaschzct=gaschzc*9499;
refchzct=refchzc*12514;
if(refchzct!=0)
{
FA=((float)gaschzct)/((float)refchzct);}
FA=2.3089-FA*2.3089;
if(FA<0X00){FA=0X00;}
FB=47.67054*FA*FA+112.35265*FA;
if(FA!=0.58048){FC=0.58048-FA;}
FA=(FB*10)/FC;
if(FA<0){FA=0x00;}
FAINT=(unsigned int)FA;
chrochar=FAINT;
HYADI=HYADI+1;
avg=avg+chrochar;
if(HYADI==100)
{avgchro=avg/100;HYADI=0;avg=0x00;}
if(avgchro>0)
{
lcdaddr = 0x08;
lcddata = 0x02;
lcd_addr();
lcd_data();
}
else
{
lcdaddr = 0x08;
lcddata = 0x00;
lcd_addr();
lcd_data();
}
// if(KEYZERO==0)
// {
// delay_all(10);
// }
digit_display((unsigned int)avgchro);*/
//digit_display(gaschzc);
delay_all(5000);//delay_all(10000);
CLRWDT();
LAMP=0;delay_all(10000);delay_all(5000);//delay_all(10000);//delay_all(10000);
//delay_all(350);
CLRWDT();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -