?? lcd.c
字號:
//****************************************************************
//LCD驅動程序,保證LCD正常工作
//****************************************************************
#include <math.h>
#include <intrins.h>
//#include "mainloop.h"
#include "delay.h"
#include "lcd.h"
extern unsigned char data LCD_CurrentX,LCD_CurrentY,LCD_Mask;
//****************************************************************
//函數原型:void LCD_WaitIdle1(void);
//功 能:片1測忙
//****************************************************************
void LCD_WaitIdle1(void)
{
while(((LCD_Chip1_Sta_R_Reg)&0x80)==0x80);
}
//****************************************************************
//函數原型:void LCD_WaitIdle2(void);
//功 能:片2測忙
//****************************************************************
void LCD_WaitIdle2(void)
{
while(((LCD_Chip2_Sta_R_Reg)&0x80)==0x80);
}
//****************************************************************
//函數原型:void LCD_WaitIdle3(void);
//功 能:片3測忙
//****************************************************************
void LCD_WaitIdle3(void)
{
while(((LCD_Chip3_Sta_R_Reg)&0x80)==0x80);
}
//****************************************************************
//函數原型:void LCD_WC1(unsigned char cmdcode);
//功 能:寫指令代碼到片1
//****************************************************************
void LCD_WC1(unsigned char cmdcode)
{
LCD_WaitIdle1();
LCD_Chip1_Cmd_W_Reg=cmdcode;
}
//****************************************************************
//函數原型:void LCD_WC2(unsigned char cmdcode);
//功 能:寫指令代碼到片2
//****************************************************************
void LCD_WC2(unsigned char cmdcode)
{
LCD_WaitIdle2();
LCD_Chip2_Cmd_W_Reg=cmdcode;
}
//****************************************************************
//函數原型:void LCD_WC3(unsigned char cmdcode);
//功 能:寫指令代碼到片3
//****************************************************************
void LCD_WC3(unsigned char cmdcode)
{
LCD_WaitIdle3();
LCD_Chip3_Cmd_W_Reg=cmdcode;
}
//****************************************************************
//函數原型:void LCD_WD1(unsigned char dispdata);
//功 能:寫數據到片1
//****************************************************************
void LCD_WD1(unsigned char dispdata)
{
LCD_WaitIdle1();
LCD_Chip1_Data_W_Reg=dispdata;
}
//****************************************************************
//函數原型:void LCD_WD2(unsigned char dispdata);
//功 能:寫數據到片2
//****************************************************************
void LCD_WD2(unsigned char dispdata)
{
LCD_WaitIdle2();
LCD_Chip2_Data_W_Reg=dispdata;
}
//****************************************************************
//函數原型:void LCD_WD3(unsigned char dispdata);
//功 能:寫數據到片3
//****************************************************************
void LCD_WD3(unsigned char dispdata)
{
LCD_WaitIdle3();
LCD_Chip3_Data_W_Reg=dispdata;
}
//****************************************************************
//函數原型:void LCD_RD1(unsigned char dispdata);
//功 能:讀片1數據
//該操作將當前頁地址寄存器和列地址指針組合確定的顯示存儲器單元的內容讀出來.
//除了改寫方式操作以外,讀操作結束時將列地址指針加一
//****************************************************************
unsigned char LCD_RD1(void)
{
LCD_WaitIdle1();
return LCD_Chip1_Data_R_Reg;
}
//****************************************************************
//函數原型:void LCD_RD2(unsigned char dispdata);
//功 能:讀片2數據
//****************************************************************
unsigned char LCD_RD2(void)
{
LCD_WaitIdle2();
return LCD_Chip2_Data_R_Reg;
}
//****************************************************************
//函數原型:void LCD_RD3(unsigned char dispdata);
//功 能:讀片3數據
//****************************************************************
unsigned char LCD_RD3(void)
{
LCD_WaitIdle3();
return LCD_Chip3_Data_R_Reg;
}
//****************************************************************
//函數原型:void LCD_WC(unsigned char cmdcode);
//功 能:寫指令代碼
//****************************************************************
void LCD_WC(unsigned char cmdcode)
{
if((LCD_CurrentX)<64)
LCD_WC1(cmdcode);
else if((LCD_CurrentX)<128)
LCD_WC2(cmdcode);
else
LCD_WC3(cmdcode);
}
//****************************************************************
//函數原型:void LCD_WD(unsigned char dispdata);
//功 能:寫數據
//****************************************************************
void LCD_WD(unsigned char dispdata)
{
if(LCD_CurrentX<64)
LCD_WD1(dispdata);
else if(LCD_CurrentX<128)
LCD_WD2(dispdata);
else
LCD_WD3(dispdata);
}
//****************************************************************
//函數原型:void LCD_Pos(void);
//功 能:內部數據地址指針定位
//****************************************************************
void LCD_Pos(void)
{
LCD_WC(LCD_CMD_COL|(LCD_CurrentX & 0x3f)); //設置地址列指針
LCD_WC(LCD_CMD_PAGE|((LCD_CurrentY/8)&0x7)); //設置地址頁指針
}
//****************************************************************
//函數原型:unsigned char LCD_RD(void);
//功 能:讀數據
//****************************************************************
unsigned char LCD_RD(void)
{ unsigned char i;
if(LCD_CurrentX<64)
{
i=LCD_RD1(); //讀兩次,虛讀一次
i=LCD_RD1(); //真讀一次
}
else if(LCD_CurrentX<128)
{
i=LCD_RD2();
i=LCD_RD2();
}
else
{
i=LCD_RD3();
i=LCD_RD3();
}
LCD_Pos();
return i;
}
//****************************************************************
//函數原型:unsigned char LCD_Cursor_Next(void);
//功 能:當前坐標移動到下一個點
//****************************************************************
void LCD_Cursor_Next(void)
{
LCD_CurrentX++;
if(LCD_CurrentX>LCD_RIGHT)
{
LCD_CurrentX=LCD_LEFT;
LCD_CurrentY+=8;
if(LCD_CurrentY>LCD_BOTTOM)
LCD_CurrentY=LCD_TOP;
}
}
//******************************************************
//函數原型:void DispOneChar(unsigned char dispdata);
//功 能:按指定位置顯示數出一個字符
//******************************************************
void DispOneChar(unsigned char dispdata)
{
LCD_Pos(); //內部數據地址指針定位
LCD_WD(dispdata); //寫數據
LCD_Cursor_Next(); //當前坐標移動到下一個點
}
//******************************************************
//函數原型:LCD_Fill(unsigned char FillData);
//功 能:整屏顯示,也可以清屏
//******************************************************
void LCD_Fill(unsigned char FillData)
{
LCD_Mask=0xff;
for(LCD_CurrentX=LCD_LEFT,LCD_CurrentY=LCD_TOP;1;)
{
DispOneChar(FillData);
if((LCD_CurrentX==LCD_LEFT)&&(LCD_CurrentY==LCD_TOP))
break;
}
}
//****************************************************************
//函數原型:void LCD_Init();
//功 能:LCD初始化
//****************************************************************
void LCD_Init()
{
LCD_WC1(LCD_CMD_OFF); //開顯示
LCD_WC2(LCD_CMD_OFF);
LCD_WC3(LCD_CMD_OFF);
LCD_WC1(LCD_CMD_ON); //開顯示
LCD_WC2(LCD_CMD_ON);
LCD_WC3(LCD_CMD_ON);
LCD_WC1(LCD_CMD_STARTLINE);
LCD_WC2(LCD_CMD_STARTLINE); //設置顯示初始行
LCD_WC3(LCD_CMD_STARTLINE);
LCD_Fill(0); //清屏
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -