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

📄 lcd128645.c

📁 lcd12864 驱动程序,此设计是基于PIC单片机的压力采集显示。
💻 C
📖 第 1 页 / 共 3 页
字号:
       bai2=temp2/10000;
       shi2=(temp2%10000)/1000; 
       ge2=((temp2%10000)%1000)/100;
     }

     //temp2=result_ad2;
     //bai2=temp2/0x64;             //求显示的百位
     //shi2=(temp2%0x64)/0xa;       //求显示的十位
     //ge2=(temp2%0x64)%0xa;        //求显示的个位  
     //ge2=ge2;  
     //baifen2=((temp1%0x64)%0xa)/10; 

    //--------------RA5通道AD转化-----------------------
    ADRESH=0;
    ADRESL=0;
    adresult5.adre5[0]=0;
    adresult5.adre5[1]=0;  
    //delay();
    result_ad=0x00;            //转换结果清0 
    for(i=2;i>0;i--)           //求5次转换结果的平均值
     {
       initAD3();                //调用初始化函数
       
       nop();
       ADGO=0X1;                //开启转换过程
       delay();     
       while(ADGO);             //等待转换完成
       nop();
       adresult5.adre5[0]=ADRESL;
       adresult5.adre5[1]=ADRESH;
       //result_ad3=result_ad3+ADRESL;    //累计转换结果
       result_ad3=result_ad3+adresult5.y5;    //累计转换结果
     }   
     result_ad3=result_ad3/2;
     //adresult5.y5=adresult5.y5/5;

        
     temp3=result_ad3*24-4088;
     temp3=temp3/10;
     if (temp3>=1000)  temp3=999;
     
     //temp3=result_ad3;
     bai3=temp3/0x64;             //求显示的百位
     shi3=(temp3%0x64)/0xa;       //求显示的十位
     ge3=(temp3%0x64)%0xa;        //求显示的个位  

     //------------------------------------------------                    
    
     scan_key();                  //调用按键扫描程序
     display_key(result_key);     //根据按键扫描结果进行处理

     if (k1==0x00)
     //if (k2==0x00)
     //if (k3==0x00)
     //if (k4==0x00)
     {
       //shown=0x00;
       show2();                   //显示主界面信息

       send_i(0x85);              //设置显示位置:第一行 
       send_d(TABNUM[bai3]);       //百位为数字
       send_d(TABNUM[shi3]);		//十位
       send_d(0x2e);  		      //。
       send_d(TABNUM[ge3]);		//个位
       send_i(0x87);              //设置显示位置:第一行 
       qushu11(0x02,TABBB);       //%%%
     
       send_i(0x8C);              //设置显示位置:第三行 
       //send_d(0x3A);              //:
       send_d(TABNUM[bai1]);       //百位为数字
       send_d(0x2e);              //。
       send_d(TABNUM[shi1]);		//十位
       send_d(TABNUM[ge1]);		//个位
       send_d(TABNUM[baifen1]);
       send_d(0x4d); send_d(0x50); send_d(0x61);     //MPa      
              
       send_i(0x9C);              //设置显示位置:第四行
       //send_d(0x3A);              //:
       send_d(TABNUM[bai2]);  		//百位数字
       send_d(0x2e);  			//。
       send_d(TABNUM[shi2]);		//十位
       send_d(TABNUM[ge2]);		//个位
       send_d(TABNUM[baifen2]);
       send_d(0x4d); send_d(0x50); send_d(0x61); 	 //MPa
     }
     delay1();        
   }
}

//-------------------------------------------
//I/O口设置函数
void init()
{
  //PORTA=0X00;
  TRISC=0X00;                       //设置C口为输出
  TRISD=0X00;                       //设置D口为输出
  TRISE=0X00;                       //设置D口为输出
  ADCON1=0X02;                      //设置E口为普通I/O口   0000 0010
}

//-------------------------------------------
//LCD初始化函数
void lcd_init()
{
  rst=0;                            //复位LCD
  delay();                          //保证复位所需要的时间
  rst=1;                            //恢复LCD正常工作
  nop();        
  psb=1;                            //设置LCD为8位并口通信
  send_i(0x34);                     //扩充指令操作
  send_i(0x30);                     //基本指令操作
  send_i(0x01);                     //清除显示
  send_i(0x06);                     //指定在写入或读取时,光标的移动方向
  send_i(0xc0);                     //开显示,关光标,不闪烁
}

//-------------------------------------------
//LCD初始化函数
void lcd_init1()
{
  rst=0;                            //复位LCD
  delay();                          //保证复位所需要的时间
  rst=1;                            //恢复LCD正常工作
  nop();        
  psb=1;                            //设置LCD为8位并口通信
  send_i(0x34);                     //扩充指令操作
  send_i(0x30);                     //基本指令操作
  //send_i(0x01);                     //清除显示
  //send_i(0x06);                     //指定在写入或读取时,光标的移动方向
  //send_i(0xc0);                     //开显示,关光标,不闪烁
}

//-----------------------------------------------
 //初始化函数
 void  initAD1()               
 {
   PORTA=0XFF;               
   PORTD=0XFF;                 //熄灭所有显示

   TRISA=0X3F;                 //设置RA为输入,其他为输出     0011 1111            
   TRISD=0X00;                 //设置D口全为输出
   TRISA0=1;
   nop();    
   //ADCON0=0X41;                //系统时钟Fosc/8,选择RA0通道,允许ADC工作        01 000 001
   ADCON0=0X81;                //系统时钟Fosc/8,选择RA0通道,允许ADC工作        10 000 001
   delay();                    //保证采样延时
   delay();
   delay();
   ADCON1=0X82;                //1000 0010   AN4-AD-RA5    AN3-RA3-ad    AN2-RA2-ad    AN1-RA1-AD    AN0-AD-RA0   Vref+=vdd   Vref-=vss

   //ADCON1=0X83;              //1000 0011   Vref=2.5v    AN4-AD-RA5    AN3-RA3-Vref+    AN2-RA2-ad    AN1-RA1-AD    AN0-AD-RA0      Vref-=vss

   //ADCON1=0X8C;              //1000 1100   Vref=2.5v    AN4-AD-RA5    AN3-RA3-Vref+    AN2-RA2-Vref-    AN1-RA1-AD    AN0-AD-RA0   
   
 }

//-----------------------------------------------
 //初始化函数
 void  initAD2_ref()               
 {
   PORTA=0XFF;               
   PORTD=0XFF;               //熄灭所有显示

   TRISA=0X3F;                //设置RA为输入,其他为输出     0011 1111       
   TRISD=0X00;               //设置D口全为输出
   TRISA1=1;
   nop();
   //ADCON0=0X49;              //系统时钟Fosc/8,选择RA1通道,允许ADC工作       01 001 001
   ADCON0=0X89;              //系统时钟Fosc/8,选择RA1通道,允许ADC工作       10 001 001
   delay();                  //保证采样延时
   delay();
   delay();
   ADCON1=0X82;                  //1000 0010   AN4-AD-RA5    AN3-RA3-ad    AN2-RA2-ad    AN1-RA1-AD    AN0-AD-RA0   Vref+=vdd   Vref-=vss

   //ADCON1=0X83;                    //1000 0011   Vref=2.5v    AN4-AD-RA5    AN3-RA3-Vref+    AN2-RA2-ad    AN1-RA1-AD    AN0-AD-RA0      Vref-=vss

   //ADCON1=0X8C;                  //1000 1100   Vref=2.5v    AN4-AD-RA5    AN3-RA3-Vref+    AN2-RA2-Vref-    AN1-RA1-AD    AN0-AD-RA0 
   
 }


//-----------------------------------------------
 //初始化函数
 void  initAD2_ref_vdd()               
 {
   PORTA=0XFF;               
   PORTD=0XFF;               //熄灭所有显示

   TRISA=0X3F;                //设置RA为输入,其他为输出     0011 1111       
   TRISD=0X00;               //设置D口全为输出
   TRISA1=1;
   nop();
   //ADCON0=0X49;              //系统时钟Fosc/8,选择RA1通道,允许ADC工作       01 001 001
   ADCON0=0X89;              //系统时钟Fosc/8,选择RA1通道,允许ADC工作       01 001 001
   delay();                  //保证采样延时
   delay();
   delay();
   ADCON1=0X82;                  //1000 0010   AN4-AD-RA5    AN3-RA3-ad    AN2-RA2-ad    AN1-RA1-AD    AN0-AD-RA0   Vref+=vdd   Vref-=vss

   //ADCON1=0X83;                    //1000 0011   Vref=2.5v    AN4-AD-RA5    AN3-RA3-Vref+    AN2-RA2-ad    AN1-RA1-AD    AN0-AD-RA0      Vref-=vss

   //ADCON1=0X8C;                  //1000 1100   Vref=2.5v    AN4-AD-RA5    AN3-RA3-Vref+    AN2-RA2-Vref-    AN1-RA1-AD    AN0-AD-RA0 
                    
 }

//-----------------------------------------------
 //初始化函数
 void  initAD3()               
 {
   PORTA=0X00;               
   PORTD=0XFF;                     //熄灭所有显示

   TRISA=0X3F;                     //设置RA为输入,其他为输出     0011 1111       
   TRISD=0X00;                     //设置D口全为输出
   TRISA5=1;
   nop();
   //ADCON0=0X61;                    //系统时钟Fosc/8,选择RA5通道,,允许ADC工作       01 100 001 
   ADCON0=0XA1;                    //系统时钟Fosc/8,选择RA5通道,,允许ADC工作       10 10 0 001      
   delay();                        //保证采样延时
   delay();
   delay();
   ADCON1=0X82;                  //1000 0010   AN4-AD-RA5    AN3-RA3-ad    AN2-RA2-ad    AN1-RA1-AD    AN0-AD-RA0   Vref+=vdd   Vref-=vss

   //ADCON1=0X83;                    //1000 0011   Vref=2.5v    AN4-AD-RA5    AN3-RA3-Vref+    AN2-RA2-ad    AN1-RA1-AD    AN0-AD-RA0      Vref-=vss

   //ADCON1=0X8C;                  //1000 1100   Vref=2.5v    AN4-AD-RA5    AN3-RA3-Vref+    AN2-RA2-Vref-    AN1-RA1-AD    AN0-AD-RA0 
   
 }

//-------------------------------------------
//显示LOGO信息
void show1(void)
{
  init();                       //调用I/O口设置函数
  lcd_init();                   //调用LCD初始化函数   
  clear_p();                    //调用清屏函数

  han_wr2a();                   //调用显示公司名称函数      
  han_wr2c();                   //调用显示公司tel函数
  han_wr2d();                   //申明显示公司fax函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  han_wr2b();                   //调用显示公司web函数
  delay1();                     //延长显示一段时间
}

//-------------------------------------------
//显示主界面函数信息
void show2(void)
{
  //init();                      //调用I/O口设置函数
  //lcd_init();                  //调用LCD初始化函数   
  //clear_p();                   //调用清屏函数   
  
  send_i(0x80);qushu11(0X10,TABCL);
  send_i(0x90);qushu11(0X10,TABCL);
  send_i(0x88);qushu11(0X10,TABCL);
  send_i(0x98);qushu11(0X10,TABCL);

  send_i(0x81);              //设置显示位置:第一行
  qushu11(0x08,TABBAR);      //BATTERY:
  send_i(0x90);              //设置显示位置:第二行
  qushu11(0x0D,TABSP);       //SHOW PRESSURE   

  send_i(0x88);              //设置显示位置:第三行  
  qushu11(0x04,TABTF);       //通风
  qushu11(0x04,TABYL);       //压力

  send_i(0x98);              //设置显示位置:第四行
  qushu11(0x04,TABCN);       //舱内
  qushu11(0x04,TABYL);       //压力  

  
}

//-------------------------------------------
//显示菜单界面
void show3(void)
{
  //init();                      //调用I/O口设置函数
  //lcd_init();                  //调用LCD初始化函数   
  clear_p();                   //调用清屏函数 

  send_i(0x80);qushu11(0X10,TABCL);
  send_i(0x90);qushu11(0X10,TABCL);
  send_i(0x88);qushu11(0X10,TABCL);
  send_i(0x98);qushu11(0X10,TABCL);
  
  send_i(0x80);              //设置显示位置:第一行
  send_d(0x4D);              //M
  send_d(0x45);              //E
  send_d(0x4E);              //N
  send_d(0x55);              //U
  send_d(0x3A);              //:

  //send_i(0x90);            //设置显示位置:第二行
  send_i(0x91);              //设置显示位置:第二行
  //send_d(0x10);            //> 
  send_d(0x31);send_d(0x2E); //1.
  qushu11(0x04,TABTF);       //通风
  qushu11(0x04,TABYL);       //压力
  qushu11(0x04,TABJZ);       //校准
 
  //send_i(0x88);              //设置显示位置:第三行
  send_i(0x89);              //设置显示位置:第三行
  send_d(0x32);send_d(0x2E); //2.
  qushu11(0x04,TABCN);       //舱内
  qushu11(0x04,TABYL);       //压力
  qushu11(0x04,TABJZ);       //校准
  
  //send_i(0x98);              //设置显示位置:第四行
  //send_i(0x99);              //设置显示位置:第四行
  //send_d(0x33);send_d(0x2E); //3.
  //qushu11(0x08,TABBG);       //背光设置
}

//-------------------------------------------
//显示背光时间界面
void show4(void)
{
  //init();                      //调用I/O口设置函数
  //lcd_init();                  //调用LCD初始化函数   
  //clear_p();                   //调用清屏函数  

  send_i(0x80);qushu11(0X10,TABCL);
  send_i(0x90);qushu11(0X10,TABCL);
  send_i(0x88);qushu11(0X10,TABCL);
  send_i(0x98);qushu11(0X10,TABCL);
  
  /*
  send_i(0x80);                //设置显示位置:第一行  BACKLIGHT MENU:
  send_d(0x42);send_d(0x41);send_d(0x43);send_d(0x4B);send_d(0x4C);send_d(0x49);send_d(0x47);send_d(0x48);send_d(0x54);
  send_d(0x20);                //
  send_d(0x4D);   send_d(0x45);    send_d(0x4E);    send_d(0x55);    send_d(0x3A);    
   
  send_i(0x90);                //设置显示位置:第二行
  send_d(0x10);                //> 
  send_d(0x31);send_d(0x2E);   //1.
  send_d(0x32);send_d(0x30);   //20
  send_d(0x73);send_d(0x65);send_d(0x63);    //sec
  send_d(0x20); send_d(0x20);
  send_d(0x34);send_d(0x2E);   //4.
  send_d(0x6F);send_d(0x70);send_d(0x65); send_d(0x6E);   //open  

  send_i(0x88);                //设置显示位置:第三行
  send_d(0x20);              
  send_d(0x32);send_d(0x2E);   //2.
  send_d(0x33);send_d(0x30);   //30
  send_d(0x73);send_d(0x65);send_d(0x63);    //sec

  send_i(0x98);                //设置显示位置:第四行
  send_d(0x20);
  send_d(0x33);send_d(0x2E);   //3.
  send_d(0x63);send_d(0x6C);send_d(0x6F); send_d(0x73); send_d(0x65);  //close 
  */
}

//-------------------------------------------
//显示公司名称函数
void han_wr2a()
{
  send_i(0x82);                     //设置显示位置:第一行
  qushu1(0x08,TAB1A);                 //调用取数函数,共14个数据,保存在数组TAB1A里
}

//-------------------------------------------
//显示公司web函数  
void han_wr2b()
{
  //send_i(0x90);                    //设置显示位置:第二行
  send_i(0x98);                  //设置显示位置:第四行
  qushu1(0x10,TAB1B);               //调用取数函数,共16个数据,保存在数组TAB1B里
}  
  
//-------------------------------------------
//显示公司tel函数
void han_wr2c()
{
  //send_i(0x88);                   //设置显示位置:第三行
  send_i(0x90);                    //设置显示位置:第二行
  qushu1(0X10,TAB1C);              //调用取数函数,共16个数据,保存在数组TAB1C里
}

//-------------------------------------------
//显示公司fax函数
void han_wr2d()
{
  //send_i(0x98);                  //设置显示位置:第四行
  send_i(0x88);                   //设置显示位置:第三行
  qushu1(0X10,TAB1D);             //调用取数函数,共16个数据,保存在数组TAB1D里
}

//有关显示设置函数
void wr_zb()
{
  send_i(0x34);
  send_i(lcd_y);
  send_i(lcd_x);
  send_i(0x30);
}

//-------------------------------------------
//显示闪烁函数
void flash()
{
  send_i(0x08);                  //关显示
  delay1();                      //延长一定时间
  send_i(0x0c);                  //开显示
  delay1();
  delay1();                      //延长关显示两倍的时间
  send_i(0x08);                  //关显示
  delay1();
  send_i(0x0c);                  //开显示
  delay1();
  delay1();
  send_i(0x08);                  //关显示
  delay1();
  send_i(0x0c);                  //开显示
  delay1();
  delay1();
}

//-------------------------------------------
//清屏函数
void clear_p()
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -