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

📄 lcd128645.c

📁 lcd12864 驱动程序,此设计是基于PIC单片机的压力采集显示。
💻 C
📖 第 1 页 / 共 3 页
字号:
//实验目的:熟悉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 + -