?? lcm.c
字號:
/*=========================================================
* 開發環境:Keil uVision3 *
* 軟件名稱: *
* 開發日期:2007/1/10 *
* 開 發 者:LPC *
=========================================================*/
/*加入頭文件*/
#include<W77C32.h> //W77E58頭文件
#include<intrins.h> //
#include<stdio.h> //
#include<stdlib.h> //
#include<TYPE.H> //聲明定義
#include<WORD.H> //聲明字庫
#include<OUTTYPE.H> //
#include<INCLUDES.H> //聲明所有子函數
//=======================================================//
/********************LCM函數開始**************************/
//=======================================================//
/*=========================================================
函數名:LCM_WriteByteData()
功能:LCM寫數據字節函數
入口參數:Data
出口參數:無
=========================================================*/
void LCM_WriteByteData(Uchar Data)
{
LCM_CS=1; //置高片選
LCM_A0=1; //數據輸入使能
P0=Data; //寫入字節數據
LCM_A0=0; //輸入為數據輸入狀態
LCM_CS=0; //使能LCM
LCM_WR=0; //寫使能
_nop_(); //空操作
LCM_WR=1; //寫禁止
LCM_CS=1; //釋放LCM
LCM_A0=1; //數據傳輸狀態結束
}
/*=========================================================
函數名:LCM_WriteByteCon()
功能:LCM寫指令字節函數
入口參數:Data
出口參數:無
=========================================================*/
void LCM_WriteByteCon(Uchar Data)
{
LCM_CS=1; //片選置高
LCM_A0=0; //數據/指令選擇
P0=Data; //輸入指令
LCM_A0=1; //指令使能
LCM_CS=0; //片選使能
LCM_WR=0; //寫啟動
_nop_(); //空操作
LCM_WR=1; //寫結束
LCM_CS=1; //釋放片選
LCM_A0=0; //數據/指令選擇
}
/*=========================================================
函數名:LCM_ClrRam()
功能:LCM清除RAM函數
入口參數:無
出口參數:無
=========================================================*/
void LCM_ClrRam(void)
{
Uchar i,j; //臨時變量
LCM_WriteByteCon(0x46); //CSRW,指令代碼:46H
LCM_WriteByteData(0x00); //CSRL=0
LCM_WriteByteData(0x00); //CSRH=0
LCM_WriteByteCon(0x4C); //CSRDIR:指令代碼:4CH
LCM_WriteByteCon(0x42); //MWRTTE:指令代碼:42H
for(i=0;i<240;i++)
{
for(j=0;j<40;j++)
{
LCM_WriteByteData(0x00); //清空RAM
}
}
}
/*=========================================================
函數名:LCM_Screen()
功能:LCM全屏函數
入口參數:無
出口參數:無
=========================================================*/
void LCM_Screen(Uchar Data1,Uchar Data2)
{
Uchar i,j; //臨時變量
LCM_WriteByteCon(0x46); //CSRW,指令代碼:46H
LCM_WriteByteData(0x00); //
LCM_WriteByteData(0x40); //為什么送40H?
LCM_WriteByteCon(0x4C); //該指令設置光標右移
LCM_WriteByteCon(0x42); //該指令允許顯示數據連續輸入顯示區
for(i=0;i<120;i++)
{
for(j=0;j<40;j++)
{
LCM_WriteByteData(Data1); //黑屏
}
for(j=0;j<40;j++)
{
LCM_WriteByteData(Data2); //黑屏
}
}
}
/*=========================================================
函數名:LCM_WriteChinese()
功能:LCM顯示漢字函數
入口參數:字符位置參數(2字節),字符數據
出口參數:無
=========================================================*/
void LCM_WriteChinese(Uchar Row,Uchar Col,Uchar x[32])
{
Uchar i,j,k; //臨時變量
Uint Biao; //臨時變量
Biao=(Uint)((Row*40+Col)+0x4000); //計算位置
k=0;
for(i=0;i<16;i++)
{
LCM_WriteByteCon(0x46); //寫入指令,設置光標地址和緩沖區地址
LCM_WriteByteData((Uchar)(Biao&0x00FF)); //寫入附帶數據
LCM_WriteByteData((Uchar)((Biao&0xFF00)>>8)); //寫入附帶數據
for(j=0;j<2;j++)
{
LCM_WriteByteCon(0x4C); //光標右移操作
LCM_WriteByteCon(0x42); //連續寫操作
LCM_WriteByteData(x[k++]); //帶入數據
}
Biao+=(Uint)(40); //重新計算
}
}
/*=========================================================
函數名:LCM_WriteEnglish()
功能:LCM顯示英文字母和數字函數
入口參數:字符位置參數(2字節),內置字符代碼
出口參數:無
=========================================================*/
void LCM_WriteEnglish(Uchar Row,Uchar Col,Uchar x[16])
{
Uchar i,k; //臨時變量
Uint Biao; //臨時變量
Biao=(Uint)((Row*40+Col)+0x4000); //計算位置
k=0;
for(i=0;i<16;i++)
{
LCM_WriteByteCon(0x46); //寫入指令,設置光標地址和緩沖區地址
LCM_WriteByteData((Uchar)(Biao&0x00FF)); //寫入附帶數據
LCM_WriteByteData((Uchar)((Biao&0xFF00)>>8)); //寫入附帶數據
LCM_WriteByteCon(0x4C); //光標右移操作
LCM_WriteByteCon(0x42); //連續寫操作
LCM_WriteByteData(x[k++]); //帶入數據
Biao+=(Uint)(40); //重新計算
}
}
/*=========================================================
函數名:LCM_Write8x8()
功能:LCM顯示1/4漢字大小的字符函數
入口參數:字符位置參數(2字節),內置字符代碼
出口參數:無
=========================================================*/
void LCM_Write8x8(Uchar Row,Uchar Col,Uchar x[8])
{
Uchar i,k; //臨時變量
Uint Biao; //臨時變量
Biao=(Uint)((Row*40+Col)+0x4000); //計算位置
k=0;
for(i=0;i<8;i++)
{
LCM_WriteByteCon(0x46); //寫入指令,設置光標地址和緩沖區地址
LCM_WriteByteData((Uchar)(Biao&0x00FF)); //寫入附帶數據
LCM_WriteByteData((Uchar)((Biao&0xFF00)>>8)); //寫入附帶數據
LCM_WriteByteCon(0x4C); //光標右移操作
LCM_WriteByteCon(0x42); //連續寫操作
LCM_WriteByteData(x[k++]); //帶入數據
Biao+=(Uint)(40); //重新計算
}
}
/*=========================================================
函數名:LCM_Wel()
功能:LCM顯示歡迎使用函數
入口參數:無
出口參數:無
=========================================================*/
void LCM_Wel(void)
{
Uchar y; //聲明變量
//顯示【歡迎使用】
LCM_ClearWorkSpace(); //清除工作區
y=0x68; //定位縱坐標
LCM_WriteChinese(y,0x0D,W29); //“歡”
LCM_WriteChinese(y,0x11,W30); //“迎”
LCM_WriteChinese(y,0x15,W31); //“使”
LCM_WriteChinese(y,0x19,W32); //“用”
}
/*=========================================================
函數名:LCM_Welcom()
功能:LCM顯示歡迎界面函數
入口參數:無
出口參數:無
=========================================================*/
void LCM_Welcom(void)
{
Uchar i,j; //聲明變量
LCM_ClrRam(); //清除LCM中RAM
LCM_Screen(0xFF,0xFF); //黑屏
LCM_WriteByteCon(0x46); //準備顯示數據指令
LCM_WriteByteData(0x00); //附帶參數
LCM_WriteByteData(0x00); //
//顯示【歡迎使用】
LCM_Wel(); //調顯【歡迎使用】
//顯示【中央空調計費系統】
i=0x08; //定位縱坐標
LCM_WriteChinese(i,0x0C,W33); //“中”
LCM_WriteChinese(i,0x0E,W34); //“央”
LCM_WriteChinese(i,0x10,W35); //“空”
LCM_WriteChinese(i,0x12,W36); //“調”
LCM_WriteChinese(i,0x14,W37); //“計”
LCM_WriteChinese(i,0x16,W38); //“費”
LCM_WriteChinese(i,0x18,W39); //“系”
LCM_WriteChinese(i,0x1A,W40); //“統”
//顯示時間固定字符【20年月日星期】
i=0x20; //定位縱坐標
LCM_WriteEnglish(i,0x04,No2); //“2”
LCM_WriteEnglish(i,0x05,No0); //“0”
LCM_WriteChinese(i,0x08,W18); //“年”
LCM_WriteChinese(i,0x0C,W19); //“月”
LCM_WriteChinese(i,0x10,W20); //“日”
LCM_WriteChinese(i,0x14,W21); //“星”
LCM_WriteChinese(i,0x16,W22); //“期”
LCM_WriteEnglish(i,0x1E,FH3); //時鐘分割符號“:”
LCM_WriteEnglish(i,0x21,FH3); //時鐘分割符號“:”
//顯示【鄭州春泉暖通節能設備有限公司】
i=0xC8; //定位縱坐標
j=0x06; //定位起始橫坐標
LCM_WriteChinese(i,j,W0); //“鄭”
LCM_WriteChinese(i,j+2,W1); //“州”
LCM_WriteChinese(i,j+4,W2); //“春”
LCM_WriteChinese(i,j+6,W3); //“泉”
LCM_WriteChinese(i,j+8,W4); //“暖”
LCM_WriteChinese(i,j+10,W5); //“通”
LCM_WriteChinese(i,j+12,W6); //“節”
LCM_WriteChinese(i,j+14,W7); //“能”
LCM_WriteChinese(i,j+16,W8); //“設”
LCM_WriteChinese(i,j+18,W9); //“備”
LCM_WriteChinese(i,j+20,W10); //“有”
LCM_WriteChinese(i,j+22,W11); //“限”
LCM_WriteChinese(i,j+24,W12); //“公”
LCM_WriteChinese(i,j+26,W13); //“司”
//顯示【電話:(0371)67579116 67579117】
i=0xD8; //定位縱坐標
j=0x06; //定位起始橫坐標
LCM_WriteChinese(i,j,W70); //“電”
LCM_WriteChinese(i,j+2,W131); //“話”
LCM_WriteEnglish(i,j+4,FH3); //“:”
LCM_WriteEnglish(i,j+5,FH1); //“(”
LCM_WriteEnglish(i,j+6,No0); //“0”
LCM_WriteEnglish(i,j+7,No3); //“3”
LCM_WriteEnglish(i,j+8,No7); //“7”
LCM_WriteEnglish(i,j+9,No1); //“1”
LCM_WriteEnglish(i,j+10,FH2); //“)”
LCM_WriteEnglish(i,j+11,No6); //“6”
LCM_WriteEnglish(i,j+12,No7); //“7”
LCM_WriteEnglish(i,j+13,No5); //“5”
LCM_WriteEnglish(i,j+14,No7); //“7”
LCM_WriteEnglish(i,j+15,No9); //“9”
LCM_WriteEnglish(i,j+16,No1); //“1”
LCM_WriteEnglish(i,j+17,No1); //“1”
LCM_WriteEnglish(i,j+18,No6); //“6”
LCM_WriteEnglish(i,j+19,FH5); //“/”
LCM_WriteEnglish(i,j+20,No6); //“6”
LCM_WriteEnglish(i,j+21,No7); //“7”
LCM_WriteEnglish(i,j+22,No5); //“5”
LCM_WriteEnglish(i,j+23,No7); //“7”
LCM_WriteEnglish(i,j+24,No9); //“9”
LCM_WriteEnglish(i,j+25,No1); //“1”
LCM_WriteEnglish(i,j+26,No1); //“1”
LCM_WriteEnglish(i,j+27,No7); //“7”
/* LCM_WriteEnglish(0xD8,0x1C,No12); //“C”
LCM_WriteEnglish(0xD8,0x1D,No50); //“o”
LCM_WriteEnglish(0xD8,0x1E,No51); //“p”
LCM_WriteEnglish(0xD8,0x1F,No60); //“y”
LCM_WriteEnglish(0xD8,0x20,No53); //“r”
LCM_WriteEnglish(0xD8,0x21,No44); //“i”
LCM_WriteEnglish(0xD8,0x22,No42); //“g”
LCM_WriteEnglish(0xD8,0x23,No43); //“h”
LCM_WriteEnglish(0xD8,0x24,No55); //“t”
LCM_WriteEnglish(0xD8,0x25,FH1); //“(”
LCM_WriteEnglish(0xD8,0x26,No38); //“c”
LCM_WriteEnglish(0xD8,0x27,FH2); //“)”
*/
//顯示上述字符下短線【-】
for(i=0x06;i<0x22;i++)
{
LCM_Write8x8(0x18,i,L0); //畫單線
}
//顯示上述字符下短線【=】
for(i=0x02;i<0x26;i++)
{
LCM_Write8x8(0x30,i,L1); //畫粗線
}
for(i=0x02;i<0x26;i++)
{
LCM_Write8x8(0xC0,i,L1); //畫粗線
}
}
/*=========================================================
函數名:LCM_ClearWorkSpace()
功能:LCM清除工作區函數
入口參數:無
出口參數:無
=========================================================*/
void LCM_ClearWorkSpace(void)
{
Uchar i,j,y; //聲明變量
y=0x40; //變量賦值
for(i=0;i<8;i++,y+=0x10)
{
for(j=0;j<40;j++)
{
LCM_WriteEnglish(y,j,FH4); //清除工作區
}
}
}
/*=========================================================
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -