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

📄 19264lcdtest.c

📁 19264液晶(三星KS0108控制器)调试程序
💻 C
字号:
/*------------------------------------------------------------------------------------------
[文件名] 19264lcdtest.c
[功能] 192X64驱动程序
[版本] 1.0
===========================================================================================*/

#include "absacc.h"
#include "intrins.h"

//自定义库 在"C:\comp51\UserLib\"文件夹中
#include ".\inc\ASCII816.h" //标准ASCII库
#include ".\inc\HZTable.h" //汉字点阵库(自做)
#include ".\inc\Menu.h" //菜单库(自做)


// LCD128*64 数据线
#define LCD19264DataPort P0

// LCD192*64 I/O 信号管脚
sbit p_csa=P3^3; 
sbit p_csb=P3^4; 
sbit p_lt=p3^5;


#define set_p_lt() (p_lt=1)                          //背光开

#define LCD_DAT_W_ADDR  0xA000H                    //  写数据地址
#define LCD_DAT_R_ADDR  0xB000H                     //读数据地址
#define LCD_CMD_W_ADDR 0x8000H                     //写指令地址
#define LCD_STA_R_ADDR  0x9000H                     //读状态地址
/*----------------------------------------------------------------------------------------------------*/
/* ****函数列表****

//开关显示
void SetOnOff(unsigned char onoff)

//选择屏幕
//screen: 0-全屏,1-左屏,2-中,3-右
void SelectScreen(unsigned char screen)

//清屏
//screen: 0-全屏,1-左屏,2-中,3-右
void ClearScreen(unsigned char screen)

//全黑
//screen: 0-全屏,1-左屏,2-中,3-右
void BlackScreen(unsigned char screen)

//显示8*8点阵
//旋转90度:字模被竖着切分
//lin:行(0-7), column: 列(0-23)
//address : 字模区首地址
void Show88(unsigned char lin,unsigned char column,unsigned int address)

//显示8*16字符
//旋转90度:字模被竖着切分
//lin:行(0-3), column: 列(0-23)
//character:字符代码(标准ASCII码)
void ShowChar(unsigned char lin,unsigned char column,unsigned char character)

//显示一个汉字
//旋转90度:字模被竖着切分
//lin:行(0-3), column: 列(0-11)
//hzcode: 汉字代码(自定义的)
void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)



//显示一屏汉字
//pageheadaddr:此屏汉字代码地址区首地址
void ShowPage(unsigned int pageheadaddr)

//反显一个8*8字块
//lin:行(0-3), column: 列(0-7)
void ReverseShow88(unsigned char lin,unsigned char column)


//反显一个字符
//lin:行(0-4), column: 列(0-15)
void ReverseShowChar(unsigned char lin,unsigned char column)


//反显一个汉字
//lin:行(0-3), column: 列(0-7)
ReverseShowHZ(unsigned char lin,unsigned char column)

//反显一行汉字
//lin:行
ReverseShow(unsigned char lin)

//初始化LCD
void InitLCD()

****函数列表结束**** */
/*----------------------------------------------------------------------------------------------------*/
/*--基本函数源程序------------------------------------------------------------------------------------*/
//延时
void Lcd19264delay(Byte count)
{
Timer40ms=count;
while(Timer40ms!=0);
}
void TimerlISR_40ms(void)
{
TL1=CLOCK_40MS&0xff;
TH1=CLOCK_40MS>>8;
TF1=0;
if(Timer40ms!=0)
	Timer40ms--;
}
/*----------------------------------------------------------------------------------------------------*/
//状态检查
void CheckState()
{
unsigned char dat;
P2=HIBYTE(LCD_STA_R_ADDR);
do{
dat=LCD19264DataPort; 
dat=0x90 & dat; //仅当第4,7位为0时才可操作
}while(!(dat==0x00));
}
/*----------------------------------------------------------------------------------------------------*/
//写显示数据
//dat:显示数据
void WriteByte(unsigned char dat)
{
CheckState();
P2=HIBYTE(LCD_DAT_W_ADDR);
LCD19264DataPort=dat;
}
/*-----------------------------------------------------------------------------------------------------*/
//向LCD发送命令
//command :命令
SendCommandToLCD(unsigned char command)
{
CheckState();
P2=HIBYTE(LCD_CMD_W_ADDR);
LCD19264DataPort=command;
}
/*----------------------------------------------------------------------------------------------------*/
//设定行地址(页)--X 0-7
void SetLine(unsigned char line)
{
line=line & 0x07; // 0<=line<=7 后三位
line=line|0xb8; //1011 1xxx
SendCommandToLCD(line);
}
//设定列地址--Y 0-63
void SetColumn(unsigned char column)
{
column=column &0x3f; // 0=<column<=63
column=column | 0x40; //01xx xxxx
SendCommandToLCD(column);
}
//设定显示开始行--XX
void SetStartLine(unsigned char startline) //0--63
{
startline=startline & 0x07;
startline=startline|0xc0; //1100 0000
SendCommandToLCD(startline);
}
//开关显示
void SetOnOff(unsigned char onoff)
{
onoff=0x3e | onoff; //0011 111x
SendCommandToLCD(onoff);
}
/*---------------------------------------------------------------------------------------------------*/
//选择屏幕
//screen: 0-全屏,1-左屏,2-中屏,3-右屏
void SelectScreen(unsigned char screen)
{ 
switch(screen)
{ case 0: //全屏
//?
break;
case 1: //左屏
p_csa=0;p_csb=0;
break;
case 2://中屏
p_csa=0;p_csb=1;
break;
case 3://右屏
p_csa=1;p_csb=0;
}
}
/*---------------------------------------------------------------------------------------------------*/
//清屏
//screen: 0-全屏,1-左屏,2-中,3-右
void ClearScreen(unsigned char screen)
{ unsigned char i,j;
SelectScreen(screen);
for(i=0;i<8;i++)
{ SetLine(i);
for(j=0;j<64;j++)
{
WriteByte(0x00);
}
}
}
/*---------------------------------------------------------------------------------------------------*/
//全黑
//screen: 0-全屏,1-左屏,2-中,3-右
void BlackScreen(unsigned char screen)
{ unsigned char i,j;
SelectScreen(screen);
for(i=0;i<8;i++)
{ SetLine(i);
for(j=0;j<64;j++)
{
WriteByte(0xff);
}
}
}
/*---------------------------------------------------------------------------------------------------*/
//黑白色块测试
void BlockLcd(unsigned char ccreen)
{unsigned char i,j,n;
SelectScreen(screen);

for(i=0,i<8;i++)
{unsigned char a;
if(i%2)
{for(a=0,a=3,a++)
{
for(j=2*a*8,j=2*a*8+7;j++)
	WriteByte(0x00);
for(j=(2*a+1)*8,j=(2*a+1)*8+1;j++)
	WriteByte(0xff);
}
}
else
{for(a=0,a=3,a++)
{
for(j=2*a*8,j=2*a*8+7;j++)
	WriteByte(0xff);
for(j=(2*a+1)*8,j=(2*a+1)*8+1;j++)
	WriteByte(0x00);
}
}
}
}
/*--------------------------------------------------------------------------------------------------*/
//显示8*8点阵
//旋转90度:字模被竖着切分

⌨️ 快捷键说明

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