?? 12864lcd.c
字號:
/*******************************************************************************
名 稱:12864液晶操作程序
功 能:本c文件封裝了對12864液晶的一些簡單的基本讀寫操作.
封裝函數:
void Lcd_WriteCmd(unsigned char a); //寫指令
void Lcd_WriteData(unsigned char a); //寫數據
int Lcd_ReadCmd(); //讀指令
int Lcd_ReadData(); //讀數據
void Lcd_Init(); //初始化液晶
void Lcd_XY(unsigned char a,unsigned char b); //設定光標位置
void Clear_GDRAM(void); //清除液晶GDRAM中的隨機數據
void Draw_PM(const uchar *ptr); //在整個液晶屏幕上畫圖
void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp); //顯示一個16*16大小的圖形
作 者:胡靜濤
最后修改時間:2011年7月25號
備注:該程序應在1M的系統時鐘下運行,讀忙信號函數已經被封裝到除讀指令函數以外的函數
中.
典型應用:
Lcd_XY( 1 , 1 );
i = 0;
while( num1[i] != '\0' )
{
Lcd_WriteData( num1[i] );
i++;
}
以上函數均進行測試可以正常使用
*******************************************************************************/
#include "12864LCD.h"
#include "define.h"
//******************************************************************************
//12864液晶讀指令
//典型應用 讀忙標志:while(Lcd_ReadCmd() & 0x80);
//******************************************************************************
int Lcd_ReadCmd()
{
int temp;
//LCD12864_CMDDIR;
//LCD12864_DATADIR = 0X00;
LCD12864_LCDRS_0;
LCD12864_LCDWR_1;
LCD12864_LCDEN_0;
//_NOP();
delay_ms(1);
LCD12864_LCDEN_1;
//_NOP();
//_NOP();
delay_ms(1);
delay_ms(1);
temp = LCD12864_DATAIN;
LCD12864_LCDEN_0;
return temp;
}
//******************************************************************************
//12864液晶讀數據
//******************************************************************************
int Lcd_ReadData()
{
int temp;
while(Lcd_ReadCmd() & 0x80); //讀忙信號
//LCD12864_DATADIR = 0X00;
//LCD12864_CMDDIR;
LCD12864_LCDRS_1;
LCD12864_LCDWR_1;
LCD12864_LCDEN_0;
//_NOP();
delay_ms(1);
LCD12864_LCDEN_1;
//_NOP();
//_NOP();
delay_ms(1);
delay_ms(1);
temp = LCD12864_DATAIN;
LCD12864_LCDEN_0;
return temp;
}
//******************************************************************************
//12864液晶寫指令
//******************************************************************************
void Lcd_WriteCmd(uchar a)
{
while(Lcd_ReadCmd() & 0x80); //讀忙信號
//LCD12864_DATADIR = 0XFF;
//LCD12864_CMDDIR;
LCD12864_LCDRS_0;
LCD12864_LCDWR_0;
LCD12864_LCDEN_0;
//_NOP();
delay_ms(1);
LCD12864_DATA = a;
//_NOP();
delay_ms(1);
LCD12864_LCDEN_1;
//_NOP();
//_NOP();
delay_ms(1);
delay_ms(1);
LCD12864_LCDEN_0;
}
//******************************************************************************
//12864液晶寫數據
//******************************************************************************
void Lcd_WriteData(uchar a)
{
while(Lcd_ReadCmd() & 0x80); //讀忙信號
//LCD12864_DATADIR = 0XFF;
//LCD12864_CMDDIR;
LCD12864_LCDRS_1;
LCD12864_LCDWR_0;
LCD12864_LCDEN_0;
//_NOP();
delay_ms(1);
LCD12864_DATA = a;
//_NOP();
delay_ms(1);
LCD12864_LCDEN_1;
//_NOP();
//_NOP();
delay_ms(1);
delay_ms(1);
LCD12864_LCDEN_0;
}
//******************************************************************************
//12864液晶初始化
//******************************************************************************
void Lcd_Init()
{
Lcd_WriteCmd(0x30);
Lcd_WriteCmd(0x0c);
Lcd_WriteCmd(0x01);
Lcd_WriteCmd(0x80);
}
//******************************************************************************
//12864液晶光標地址
//******************************************************************************
void Lcd_XY(unsigned char a,unsigned char b)
{
switch (a)
{
case 1:
a = 0x80;
break;
case 2:
a = 0x90;
break;
case 3:
a = 0x88;
break;
case 4:
a = 0x98;
break;
}
Lcd_WriteCmd(a + b - 1);
}
//******************************************************************************
//清除液晶GDRAM中的隨機數據
//******************************************************************************
void Clear_GDRAM(void)
{
uchar i,j,k;
Lcd_WriteCmd(0x34); //打開擴展指令集
i = 0x80;
for(j = 0;j < 32;j++)
{
Lcd_WriteCmd(i++);
Lcd_WriteCmd(0x80);
for(k = 0;k < 16;k++)
{
Lcd_WriteData(0x00);
}
}
i = 0x80;
for(j = 0;j < 32;j++)
{
Lcd_WriteCmd(i++);
Lcd_WriteCmd(0x88);
for(k = 0;k < 16;k++)
{
Lcd_WriteData(0x00);
}
}
Lcd_WriteCmd(0x30); //回到基本指令集
}
//******************************************************************************
//在整個液晶屏幕上畫圖
//******************************************************************************
void Draw_PM(const uchar *ptr)
{
uchar i,j,k;
Lcd_WriteCmd(0x34); //打開擴展指令集
i = 0x80;
for(j = 0;j < 32;j++)
{
Lcd_WriteCmd(i++);
Lcd_WriteCmd(0x80);
for(k = 0;k < 16;k++)
{
Lcd_WriteData(*ptr++);
}
}
i = 0x80;
for(j = 0;j < 32;j++)
{
Lcd_WriteCmd(i++);
Lcd_WriteCmd(0x88);
for(k = 0;k < 16;k++)
{
Lcd_WriteData(*ptr++);
}
}
Lcd_WriteCmd(0x36); //打開繪圖顯示
Lcd_WriteCmd(0x30); //回到基本指令集
}
//******************************************************************************
//功 能:顯示一個16*16大小的圖形
//參 數:Yaddr--Y地址
// Xaddr--X地址
// dp--指向圖形數據存放地址的指針
//******************************************************************************
void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp)
{
uchar j;
uchar k=0;
Yaddr = Yaddr + 0x80;
Xaddr = Xaddr + 0x80;
Lcd_WriteCmd(0x01); //清屏,只能清除DDRAM
Lcd_WriteCmd(0x34); //使用擴展指令集,關閉繪圖顯示
for(j=0;j<16;j++)
{
Lcd_WriteCmd(Yaddr++); //Y地址
Lcd_WriteCmd(Xaddr); //X地址
Lcd_WriteData(dp[k++]);
Lcd_WriteData(dp[k++]);
}
Lcd_WriteCmd(0x36); //打開繪圖顯示
Lcd_WriteCmd(0x30); //回到基本指令集模式
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -