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

📄 lcd.c

📁 灭火控制盘(XMP4-2)
💻 C
📖 第 1 页 / 共 2 页
字号:
//*************************************************************************
//**模 块 名:LCD.c
//**说    明:液晶功能函数
//*************************************************************************
#include <AT89x55.H>
#include <INTRINS.H>
#include "main.h"
//*************************************************************************
//**函 数 名:Write_Com1
//**输    入:
//**          cmdcode:命令
//**输    出:无
//**功能描述:向液晶左屏写命令
//*************************************************************************
void Write_Com1(uchar cmdcode)
{
    //向液晶送命令
    WR_CMD1=cmdcode;
    //判断液晶是否忙
    while(RD_CMD1>0x7f);
}
//*************************************************************************
//**函 数 名:Write_Com2
//**输    入:
//**          cmdcode:命令
//**输    出:无
//**功能描述:
//**          1.向液晶右屏写命令
//*************************************************************************
void Write_Com2(uchar cmdcode)
{
    //向液晶送命令
    WR_CMD2=cmdcode;
    //判断液晶是否忙
    while(RD_CMD2>0x7f);
}
//*************************************************************************
//**函 数 名:Write_Data1
//**输    入:
//**          Dsipdata:数据
//**输    出:无
//**功能描述:
//**          1.向液晶左屏写数据
//*************************************************************************
void Write_Data1(uchar Dispdata)
{
    //向液晶送数据
    WR_DAT1=Dispdata;
    //判断液晶是否忙
    while(RD_CMD1>0x7f);
}
//*************************************************************************
//**函 数 名:Write_Data2
//**输    入:
//**          Dsipdata:数据
//**输    出:无
//**功能描述:
//**          1.向液晶右屏写数据
//*************************************************************************
void Write_Data2(uchar Dispdata)
{
    //向液晶送数据
    WR_DAT2=Dispdata;
    //判断液晶是否忙
    while(RD_CMD2>0x7f);
}
//*************************************************************************
//**函 数 名:Init_LCD
//**输    入:无
//**输    出:无
//**功能描述:
//**          1.液晶初始化
//*************************************************************************
void Init_LCD()
{
    //关左屏
    Write_Com1(Disp_Off);
    //关右屏
    Write_Com2(Disp_Off);
    //左屏页地址清0
    Write_Com1(Page_Add+0);
    //右屏页地址清0
    Write_Com2(Page_Add+0);
    //左屏起始行清0
    Write_Com1(Start_Line+0);
    //右屏起始行清0
    Write_Com2(Start_Line+0);
    //左屏列地址清0
    Write_Com1(Col_Add+0);
    //右屏列地址清0
    Write_Com2(Col_Add+0);
    //开左屏
    Write_Com1(Disp_On);
    //开右屏
    Write_Com2(Disp_On);
}
//*************************************************************************
//**函 数 名:Clr_Scr
//**输    入:
//**          DispStyle:清屏的类型 
//**          DispStyle=1		向液晶送0x00
//**          DispStyle=2		向液晶送0xFF
//**输    出:无
//**功能描述:
//**          1.液晶清屏
//*************************************************************************
void Clr_Scr(uchar DispStyle)
{
    //循环变量
    uchar xdata j,k;
    //初始化液晶
    Init_LCD();
    Write_Com1(Page_Add + 0);
    Write_Com1(Col_Add  + 0);
    //循环向液晶送数
    for(k = 0;k < 8;k++)
        {
         Write_Com1(Page_Add + k);
         for(j = 0;j < 64;j++ )
             {
              Write_Data1(DispStyle);
              }
         }
    Write_Com2(Page_Add + 0);
    Write_Com2(Col_Add  + 0);
    //循环向液晶送数
    for(k = 0;k < 8;k++)
        {
         Write_Com2(Page_Add + k);
         for(j = 0;j < 64;j++ )
             {
              Write_Data2(DispStyle);
              }
         }
}
//*************************************************************************
//**函 数 名:HzDisp1216
//**输    入:
//**          pag      :汉字显示的行地址
//**          col      :汉字显示的列地址
//**          *hzk     :汉字数组的首地址
//**          fan      :是否反白显示
//**输    出:无
//**功能描述:
//**          1.在指定位置显示12*16点阵的汉字
//*************************************************************************
void HzDisp1216(uchar pag,uchar col, uchar code *hzk,bit fan)
{
//循环变量
uchar xdata j,i;
//临时变量
uchar xdata temp;
//是否跨区
bit flag;
temp = col;
for(j = 0;j < 2;j++)
    {
     col = temp;
     Write_Com1(Page_Add + pag + j);
     Write_Com2(Page_Add + pag + j);
     if(col<64)
        {
         flag=0;
         Write_Com1(Col_Add + col);
         }
     else
        {
         flag=1;
         Write_Com2(Col_Add + col - 64);
         }
     for(i = 0;i < 12;i++)
         {
          if(flag == 1)
             {
              if(fan) Write_Data2(~hzk[12 * j + i]);
              else
                 Write_Data2(hzk[12 * j + i]);
              }
          if(flag == 0)
             {
              if(fan) Write_Data1(~hzk[12 * j + i]);
              else
                 Write_Data1(hzk[12 * j + i]);
              }
           col++;
           if((col >= 64) && (flag == 0))
             {
              flag = 1;
              Write_Com2(Col_Add + col - 64);
              }
           }
     }
}
//*************************************************************************
//**函 数 名:AscDisp68
//**输    入:
//**          pag      :汉字显示的行地址
//**          col      :汉字显示的列地址
//**          *hzk     :汉字数组的首地址
//**          fan      :是否反白显示
//**输    出:无
//**功能描述:
//**          1.显示8*16的符号
//*************************************************************************
void Asc_Disp68(uchar pag,uchar col, uchar code *hzk, bit fan)
{
//循环变量
uchar xdata i;
//临时变量
uchar xdata temp;
//是否跨区
bit flag;
temp = col;
col  = temp;
//设置字符显示的行地址(左屏)
Write_Com1(Page_Add + pag);
//设置字符显示的行地址(右屏)
Write_Com2(Page_Add + pag);
if(col < 64)
   {
    //flag=0,表示此字符在左屏显示
	flag = 0;
	//列地址小于64设置左屏的列地址
	Write_Com1(Col_Add + col);
    }
else
   {
	flag = 1;
	//列地址小于64设置左屏的列地址
	Write_Com2(Col_Add + col - 64);
    }
//循环6次向液晶送
for(i = 0;i < 6;i++)
    {
	 if(flag == 1)
	    {
         if(fan)
			//fan为1表示反白显示
            Write_Data2(~hzk[i]);
	     else
			//fan为0表示正常显示
            Write_Data2(hzk[i]);
	     }
	 if(flag == 0)
	    {
	     //flag为0表示写右屏
         if(fan)
			//fan为1表示反白显示
            Write_Data1(~hzk[i]);
	     else
			//fan为0表示正常显示
            Write_Data1(hzk[i]);
	     }
     //列地址加1
     col++;
     //如果列地址大于64并且现在正在写左屏时
	 if((col >= 64) && (flag == 0))
	    {
         //置写右屏的标志位
         flag = 1;
         //向右屏写数据
	     Write_Com2(Col_Add + col - 64);
	     }
     }
}
//*************************************************************************
//**函 数 名:Dis_Clock
//**输    入:无
//**输    出:无
//**功能描述:
//**          1.在指定的位置显示年月日时分秒
//*************************************************************************
void Dis_Clock()
{
    uchar xdata a,b;
    //在指定位置显示年月日之间的“/”
    Asc_Disp68(7,12,asc_xiexian,0);
    Asc_Disp68(7,30,asc_xiexian,0);
    //在指定位置显示时分秒之间的“:”
    Asc_Disp68(7,66,asc_maohao,0);
    Asc_Disp68(7,84,asc_maohao,0);
    //显示年
    a=Clock_Time[6]>>4;
    b=Clock_Time[6]&0x0f;
    Asc_Disp68(7,0,(asc_num+6*a),0);
    Asc_Disp68(7,6,(asc_num+6*b),0);
    //显示月
    a=Clock_Time[5]>>4;
    b=Clock_Time[5]&0x0f;
    Asc_Disp68(7,18,(asc_num+6*a),0);
    Asc_Disp68(7,24,(asc_num+6*b),0);
    //显示日
    a=Clock_Time[4]>>4;
    b=Clock_Time[4]&0x0f;
    Asc_Disp68(7,36,(asc_num+6*a),0);
    Asc_Disp68(7,42,(asc_num+6*b),0);
    //显示时
    a=Clock_Time[2]>>4;
    b=Clock_Time[2]&0x0f;
    Asc_Disp68(7,54,(asc_num+6*a),0);
    Asc_Disp68(7,60,(asc_num+6*b),0);
    //显示分
    a=Clock_Time[1]>>4;
    b=Clock_Time[1]&0x0f;
    Asc_Disp68(7,72,(asc_num+6*a),0);
    Asc_Disp68(7,78,(asc_num+6*b),0);
    //显示秒
    a=Clock_Time[0]>>4;
    b=Clock_Time[0]&0x0f;
    Asc_Disp68(7,90,(asc_num+6*a),0);
    Asc_Disp68(7,96,(asc_num+6*b),0);
}
//*************************************************************************
//**函 数 名:DISP_Information
//**输    入:
//**          aa:报警区号
//*           bb:报警设备类型
//**          cc:信息显示的位置
//**          dd:报警月份
//**          ee:报警日期
//**          ff:报警小时
//**          gg:报警分钟
//**          hh:报警类型
//**输    出:无
//**功能描述:
//**          1.清液晶显示
//*************************************************************************
void Disp_Qu_Device(uchar aa,uchar bb,uchar cc,uchar dd,uchar ee,uchar ff,uchar gg,uchar hh)
{
 uchar xdata a,b;
 //显示报警的区号
 switch(aa)
        {
         case 1:HzDisp1216(cc*3,16,hz_yi,0);
                HzDisp1216(cc*3,28,hz_qu,0);
                break;
         case 2:HzDisp1216(cc*3,16,hz_er,0);
                HzDisp1216(cc*3,28,hz_qu,0);
                break;
         case 3:HzDisp1216(cc*3,16,hz_san,0);
                HzDisp1216(cc*3,28,hz_qu,0);
                break;
         case 4:HzDisp1216(cc*3,16,hz_si,0);
                HzDisp1216(cc*3,28,hz_qu,0);
                break;
         default:break;
         }
 //显示报警的设备类型
 switch(bb)
        {
         case 1:HzDisp1216(cc*3,44,hz_gan,0);
                HzDisp1216(cc*3,83,hz_yan1,0);
                break;
         case 2:HzDisp1216(cc*3,44,hz_gan,0);
                HzDisp1216(cc*3,83,hz_wen,0);
                break;
         case 3:HzDisp1216(cc*3,44,hz_sheng,0);
                HzDisp1216(cc*3,83,hz_guang,0);

⌨️ 快捷键说明

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