?? lcd.c
字號:
//*************************************************************************
//**模 塊 名: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(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 + -