📄 lcd128645.c
字号:
//实验目的:熟悉12864LCD的使用
//12864LCD带中文字库
//编程让12864LCD显示
//硬件设置:
//关断所有拨码开关。
#include<pic.h>
#include<pic168xa.h>
__CONFIG(0x1832);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
//---------------------液晶显示相关定义--------------------------------------
#define rs RC5 //定义LCD的数据/命令控制口
//#define rw RC4 //定义LCD的读/写控制口
//#define e RC3 //定义LCD的使能口
#define rw RE1 //定义LCD的读/写控制口
#define e RE0 //定义LCD的使能口
#define psb RC2 //定义通信方式控制口
#define rst RC0 //定义复位口
#define nop() asm("nop") //定义nop()函数
#define address1 0xa
//#define uint unsigned int;
//#define uchar unsigned char;
union adres0
{ unsigned int y0;
unsigned char adre0[2];
}adresult0;
union adres1
{ unsigned int y1;
unsigned char adre1[2];
}adresult1;
union adres5
{ unsigned int y5;
unsigned char adre5[2];
}adresult5;
unsigned char cnt,cnt1,BGSZ;
//--------------------键盘定义---------------------------------------
unsigned int result_key;
unsigned int k1,k2,k3,k4;
//---------------------有关现实中英文显示现实数组-----------------------------
//清除显示
const unsigned char TABCL[ ]={0xA2,0xA0,0xA2,0xA0,0xA2,0xA0,0xA2,0xA0,0xA2,0xA0,0xA2,0xA0,0xA2,0xA0,0xA2,0xA0};
//宏远氧业
const unsigned char TAB1A[ ]={0xBA,0xEA,0xD4,0xB6,0xD1,0xF5,0xD2,0xB5};
//通风
const unsigned char TABTF[ ]={0xCD,0xA8,0xB7,0xE7};
//舱内
const unsigned char TABCN[ ]={0xB2,0xD5,0xC4,0xDA};
//压力
const unsigned char TABYL[ ]={0xD1,0xB9,0xC1,0xA6};
//校准
const unsigned char TABJZ[ ]={0xD0,0xA3,0xD7,0xBC};
//背光设置
const unsigned char TABBG[ ]={0xB1,0xB3,0xB9,0xE2,0xC9,0xE8,0xD6,0xC3};
//%%%%%%%%%%%%%%%%%%
const unsigned char TABBB[ ]={0xA3,0xA5};
//WWW.YANGCANG.COM
const unsigned char TAB1B[ ]={'W', 'W','W', '.', 'Y', 'A', 'N', 'G', 'C', 'A', 'N', 'G', '.', 'C', 'O', 'M'};
//TEL0755-28187975
//const unsigned char TAB1C[ ]={'T', 'E', 'L' ,':','0' ,'5', '3' ,'5','-', '6', '3','0', '0' ,'5','5' ,'9'};
const unsigned char TAB1C[ ]={'T', 'E', 'L' ,':',0x30 ,'5', '3' ,'5','-', '6', '3','0', '0' ,'5','5' ,'9'};
//FAX0755-28187976
const unsigned char TAB1D[ ]={'F', 'A', 'X', ':', '0', '5', '3', '5', '-','6', '3','2', '0', '0', '5', '5'};
//SHOW PRESSURE
const unsigned char TABSP[ ]={'S', 'H', 'O', 'W', ' ', 'P', 'R', 'E', 'S','S', 'U','R', 'E'};
//BATTERY:
const unsigned char TABBAR[ ]={'B', 'A', 'T', 'T', 'E', 'R', 'Y', ':'};
//0,1,2,3,4,5,6,7,8,9 半交字符
const unsigned char TABNUM[ ]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
char ee_data_write[2];
unsigned char ee_date[2];
unsigned int n1,n2;
int j1,j2;
//------------------LCD操作定义--------------------------
unsigned int lcd_x; //定义LCD页地址寄存器
unsigned int lcd_y; //定义LCD列地址寄存器
bit busy; //定义LCD忙标志位
void init(); //申明I/O口设置函数
void lcd_init(); //申明LCD初始化函数
void lcd_init1(); //申明LCD初始化函数
void clear_p(); //申明清屏函数
void han_wr2a(); //申明显示公司名称函数
void han_wr2b(); //申明显示公司web函数
void han_wr2c(); //申明显示公司tel函数
void han_wr2d(); //申明显示公司fax函数
void wr_zb(); //申明有关显示设置函数
void flash(); //申明设置LCD显示闪烁函数
void qushu1(int counts,const unsigned char *ps); //申明查表获取显示数据//LOGO信息,依次显示
void qushu11(int counts,const unsigned char *ps); //申明查表获取显示数据//同时显示
void send_d(unsigned char x); //申明送一字节数据显示函数
void send_i(unsigned char x); //申明送一字节控制命令函数
void write_xy_d(unsigned char x, unsigned char d);
void chk_busy(); //申明检测LCD是否工作繁忙函数
void show1(void); //显示现实申明查表获取显示数据//LOGO信息函数
void show2(void); //显示主界面函数
void show3(void); //显示菜单函数
void show4(void); //显示背光时间函数
void write();
void read();
void wrtacktest();
void i2c_idle();
void display_e();
void init_e();
void delay(); //申明延时函数1,供各命令之间的延时和决定显示快慢
void delay1(); //申明延时函数2,用以决定显示闪烁快慢
void delay_e(); //申明延时函数2,用以决定显示闪烁快慢
void initAD1(); //ad口初始化函数申明
void initAD2_ref(); //ad口初始化函数申明
void initAD2_ref_vdd();
void initAD3(); //ad口初始化函数申明
//--------------------键盘函数---------------------------------------
void delay_key(); //delay函数申明
void scan_key(); //按键扫描程序申明
void display_key(int x); //显示函数申明
void menu_main(); //主菜单函数
void menu_down(); //向下按键
void menu_up(); //向上按键
void menu_close(); //退出按键
void TF_CHECK(); //通风压力校准
void CN_CHECK(); //舱内压力校准
//void display();
//---------------------定时器函数-----------------------------------
//void tmint(); //初始化定时器T0
//void interrupt clkint(void); //中断服务程序
//void inizhi(); //定时参数初始化
void uinttouchar(unsigned int x); //hex转化成十进制
//void adinitial(); //A/D转换初始化子程序
//void interrupt adint(void);
//-------------------------------------------------------------------
//主程序
void main()
{
int result_ad=0x00;
int result_ad1=0x00; //定义转换结果寄存器
int result_ad2=0x00;
int result_ad_ref=0x00;
int result_ad3=0x00;
unsigned int baifen1,bai1,shi1,ge1,temp1; //定义4个临时变量
unsigned int baifen2,bai2,shi2,ge2,temp2; //定义4个临时变量
unsigned int baifen3,bai3,shi3,ge3,temp3; //定义4个临时变量
//init_e();
//ee_data_write[0]=0x01;
//ee_data_write[1]=0x01;
//write();
//delay_e();
//read(); //读取修正数据
//j1=ee_date[0]&0x0f;
//delay_e();
//j2=ee_date[1]&0x0f;
//delay_e();
show1(); //显示LOGO信息
k1=0x00;k2=0x00;k3=0x00;k4=0x00;
cnt=0x00;
while(1)
{
int i; //定义循环次数控制寄存器
result_ad=0x00; //转换结果清0
result_ad1=0x00; //转换结果清0
result_ad2=0x00; //转换结果清0
result_ad_ref=0x00;
result_ad3=0x00; //转换结果清0
n1=0x01;
n2=0x02;
//n3=0x00;
//--------------RAO通道AD转化-----------------------
//delay(); /
ADRESH=0;
ADRESL=0;
adresult0.adre0[0]=0;
adresult0.adre0[1]=0;
//delay();
for(i=2;i>0;i--) //求5次转换结果的平均值
{
initAD1(); //调用初始化函数
nop();
ADGO=0X1; //开启转换过程
delay();
while(ADGO); //等待转换完成
nop();
adresult0.adre0[0]=ADRESL;
adresult0.adre0[1]=ADRESH;
//result_ad1=result_ad1+ADRESL; //累计转换结果
result_ad1=result_ad1+adresult0.y0; //累计转换结果
//n1=n1+adresult0.y0;
}
result_ad1=result_ad1/2;
result_ad1=result_ad1-n1;
//n1=n1/5;
if (result_ad1<102) result_ad1=102;
if (result_ad1>=102)
if (result_ad1<166) temp1=result_ad1*21-2182+10; //if (result_ad1<166) temp1=result_ad1*21-2182+88 >=0mpa <0.135mpa
//if (result_ad1<99) temp1=result_ad1*362-23252; // >=0mpa <0.13mpa
if (result_ad1>=166)
if (result_ad1<217) temp1=result_ad1*21-2182+10; // >=0.135mpa <0.245mpa
//if (result_ad1<125) temp1=result_ad1*362-23252; // >=0.13mpa <0.23mpa
if (result_ad1>=217)
if (result_ad1<265) temp1=result_ad1*21-2182+10; // >=0.245mpa <0.345mpa
//if (result_ad1<148) temp1=result_ad1*362-23252; // >=0.23mpa <0.32mpa
if (result_ad1>=265)
if (result_ad1<331) temp1=result_ad1*21-2182+10; // >=0.345mpa <0.485mpa
if (result_ad1>=331)
if (result_ad1<368) temp1=result_ad1*21-2182+10; // >=0.485mpa <0.565mpa
if (result_ad1>=368)
if (result_ad1<430) temp1=result_ad1*21-2182+10; // >=0.565mpa <0.695mpa\
if (result_ad1>=430)
if (result_ad1<494) temp1=result_ad1*21-2182+10; // >=0.695mpa <0.83mpa
if (result_ad1>=494)
if (result_ad1<543) temp1=result_ad1*21-2182+10; // >=0.83mpa <0.935mpa
if (result_ad1>=543) temp1=result_ad1*21-2182+10; // >=0.935mpa
temp1=temp1;
//temp1=temp1/10;
temp1=temp1;
if (temp1<100)
{
//if (temp1>50) baifen1=temp1/10;
//if (temp1<=50) baifen1=0;
baifen1=0;
bai1=0;
shi1=0;
ge1=0;
}
if (temp1>=100)
if (temp1<1000)
{
baifen1=(temp1%100)/10;
bai1=0;
shi1=0;
ge1=temp1/100;
}
if (temp1>=1000)
if (temp1<10000)
{
baifen1=((temp1%1000)%100)/10;
bai1=0;
shi1=temp1/1000;
ge1=(temp1%1000)/100;
}
if (temp1>=10000)
{
baifen1=(((temp1%10000)%1000)%100)/10;
bai1=temp1/10000;
shi1=(temp1%10000)/1000;
ge1=((temp1%10000)%1000)/100;
}
//temp1=result_ad1;
//bai1=temp1/0x64; //求显示的百位
//shi1=(temp1%0x64)/0xa; //求显示的十位
//ge1=(temp1%0x64)%0xa; //求显示的个位
//baifen1=((temp1%0x64)%0xa)/10;
//--------------RA1通道AD转化-----------------------
/* adresult1.adre1[0]=0;
adresult1.adre1[1]=0;
//delay();
for(i=5;i>0;i--) //求5次转换结果的平均值
{
initAD2_ref_vdd(); //调用初始化函数
nop();
ADGO=0X1; //开启转换过程
//delay();
while(ADGO); //等待转换完成
adresult1.adre1[0]=adresult1.adre1[0]+ADRESL;
adresult1.adre1[1]=adresult1.adre1[1]+ADRESH;
result_ad_ref=result_ad_ref+ADRESL; //累计转换结果
}
result_ad_ref=result_ad_ref/5;
n2=adresult1.adre1[0]/5;
n2=adresult1.adre1[1]/5;
adresult1.y1=adresult1.y1/5;
n2=adresult1.y1;
*/
ADRESH=0;
ADRESL=0;
adresult1.adre1[0]=0;
adresult1.adre1[1]=0;
//delay();
result_ad=0x00; //转换结果清0
for(i=2;i>0;i--) //求5次转换结果的平均值
{
initAD2_ref(); //调用初始化函数
nop();
ADGO=0X1; //开启转换过程
delay();
while(ADGO); //等待转换完成
nop();
adresult1.adre1[0]=ADRESL;
adresult1.adre1[1]=ADRESH;
//result_ad2=result_ad2+ADRESL; //累计转换结果
result_ad2=result_ad2+adresult1.y1; //累计转换结果
}
result_ad2=result_ad2/2;
//n2=adresult1.y1;
result_ad2=result_ad2-n2;
//temp2=result_ad2;
if (result_ad2<105) result_ad2=105;
if (result_ad2>=105)
if (result_ad2<266)
{
temp2=result_ad2*85-9036+120+60;
//temp2=result_ad2*9-904-43*result_ad2/105;
}
//if (result_ad2<266) temp2=result_ad2*9-904-40; // >=0mpa <0.135mpa -43*(result_ad2/105)
//if (result_ad2<152) temp2=result_ad2*158-10593+300; // >=0mpa <0.13mpa
if (result_ad2>=266)
if (result_ad2<388)
{
temp2=result_ad2*85-9036+120+60;
//temp2=result_ad2*9-904-43*result_ad2/105;
//temp2=result_ad2*9-904-110; // >=0.135mpa <0.24mpa
}
if (result_ad2>=388)
if (result_ad2<509) //temp2=result_ad2*9-904-210; // >=0.24mpa <0.34mpa
{
temp2=result_ad2*85-9036+120+60;
//temp2=result_ad2*9-904-43*result_ad2/105;
}
if (result_ad2>=509)
if (result_ad2<625) //temp2=result_ad2*9-904-210; // >=0.34mpa <0.44mpa
{
temp2=result_ad2*85-9036+120+60;
//temp2=result_ad2*9-904-43*result_ad2/105;
}
if (result_ad2>=625)
if (result_ad2<755) //temp2=result_ad2*9-904-310; // >=0.44mpa <0.55mpa
{
temp2=result_ad2*85-9036+120+60;
//temp2=result_ad2*9-904-43*result_ad2/105;
}
if (result_ad2>=755) //temp2=result_ad2*9-904-310; // >=0.55mpa
{
temp2=result_ad2*85-9036+120+60;
//temp2=result_ad2*9-904-43*result_ad2/105;
}
temp2=temp2;
temp2=temp2/10;
temp2=temp2;
if (temp2<100)
{
//if (temp2>50) baifen1=temp2/10;
//if (temp2<=50) baifen2=0;
baifen2=0;;
bai2=0;
shi2=0;
ge2=0;
}
if (temp2>=100)
if (temp2<1000)
{
baifen2=(temp2%100)/10;
bai2=0;
shi2=0;
ge2=temp2/100;
}
if (temp2>=1000)
if (temp2<10000)
{
baifen2=((temp2%1000)%100)/10;
bai2=0;
shi2=temp2/1000;
ge2=(temp2%1000)/100;
}
if (temp2>=10000)
{
baifen2=(((temp2%10000)%1000)%100)/10;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -