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

📄 lcd.c

📁 经典的KS0108与KS0107的12864A液晶显示器的驱动程序
💻 C
字号:

/*lcd_show.h*/

#ifndef    _LCD_SHOW_H                 // 防止lcd_show.h被重复引用

#define    _LCD_SHOW_H

//#include <at898252.h>
#include <reg52.h>
#include <absacc.h>

unsigned char code QING[32]={
/* 请 */
0x20,0x22,0xEC,0x00,0x20,0x22,0xAA,0xAA,
0xAA,0xBF,0xAA,0xAA,0xEB,0xA2,0x20,0x00,
0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x0A,
0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x00
};

unsigned char code CHA[32]={
/* 插 */
0x10,0x10,0x10,0xFF,0x90,0x24,0x24,0xA4,
0x24,0xFC,0x22,0x23,0x22,0xB0,0x20,0x00,
0x02,0x42,0x81,0x7F,0x00,0xFF,0x49,0x48,
0x40,0x7F,0x40,0x49,0x49,0xFF,0x01,0x00
};

unsigned char code KA[32]={
/* 卡 */
0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x44,
0x44,0x44,0x46,0x44,0x40,0x60,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,
0x02,0x04,0x0C,0x18,0x00,0x00,0x00,0x00
};


#define LCD XBYTE[0xffff] /* LCD端口 */

#endif


#include "lcd_show.h" 

#define uint unsigned int 
#define uchar unsigned char 
/* 将单片机的输入IO端口用宏定义,方便使用 */
#define CSA P2_0 
#define CSB P2_1 
#define E P2_2 
#define RW P2_3 
#define DI P2_4
/* 定义标志位,表示液晶是否出于忙碌状态 */
sbit busy_bit=ACC^7; 

/*下面是对液晶屏gxm12864d操作的函数, 128x64点阵,汉字显示,CSA,CSB用来进行左右显示区的选择。*/ 

/* 发命令i到主窗口*/ 
void lcd_mwc(uchar i) 
{ 
/*这里用来发送命令给LCD,具体命令的格式和端口设置请参照你的LCD说明文档*/ 
CSA=1; 
CSB=0; 
RW=1; 
DI=0; 
do {ACC=LCD;} 
while (busy_bit) ; /*等待LCD处于非忙碌状态,即可进行数据传输的状态 */
RW=0; 
LCD=i; 
} 

/* 写数据i到主窗口*/ 
void lcd_mwd(uchar i) 
{ 
/*这里用来写数据给LCD,使之进行显示。具体命令的格式和端口设置请参照你的LCD说明文档 */
CSA=1; 
CSB=0; 
RW=1; 
DI=0; 
do {ACC=LCD;} 
while (busy_bit);/*wait for lcd not busy */
RW=0; 
DI=1; 
LCD=i; 
} 


void lcd_clear(void) 
{ 
/*将LCD上显示的内容清除,具体参照LCD说明文档 */
uchar i; 
uchar page; 
for (page=0xb8;page<0xc0;page++) 
{ 
lcd_mwc(page); 

lcd_mwc(0x40); 

for (i=0;i<64;i++) 

lcd_mwd(0); 
} 
} 



void lcd_init(void) 
{ 
/*初始化LCD*/ 
lcd_mwc(0xc0); // 将0xc0命令发送给LCD,命令内容请参照您的LCD说明文档 

lcd_mwc(0x3f); // 将0x3f命令发送给LCD,命令内容请参照您的LCD说明文档 

} 


void dispm_hz_up(uchar code * hz) 
{ 
/*将指针hz所指向数组的前16个数据写到LCD上面*/ 
uchar i; 
for (i=0;i<16;i++) 
lcd_mwd(*(hz+i)); 
} 


void dispm_hz_down(uchar code * hz) 
{ 
/*将指针hz所指向数组的后16个数据写到LCD上面*/ 
uchar i; 
for (i=16;i<32;i++) 
lcd_mwd(*(hz+i)); 
} 


void main(void) 
{ 
  E=1; 
  lcd_clear(); 
  lcd_init();  /* 初始化LCD */

  lcd_mwc(0xb8); /*将0xb8命令发送给LCD,命令内容请参照您的LCD说明文档 */
  lcd_mwc(0x40); /* 将0x40命令发送给LCD,命令内容请参照您的LCD说明文档*/ 
  dispm_hz_up(&QING); /*将QING所指向数组的前16个数据写到LCD上面 */
  dispm_hz_up(&CHA); /*将CHA所指向数组的前16个数据写到LCD上面 */
  dispm_hz_up(&KA); /*将KA所指向数组的前16个数据写到LCD上面*/ 

  lcd_mwc(0xb9);  /* 将0xb9命令发送给LCD,命令内容请参照您的LCD说明文档*/ 
  lcd_mwc(0x40); /*将0x40命令发送给LCD,命令内容请参照您的LCD说明文档 */
  dispm_hz_down(&QING); /* 将QING所指向数组的后16个数据写到LCD上面 */
  dispm_hz_down(&CHA); /* 将CHA所指向数组的后16个数据写到LCD上面 */
  dispm_hz_down(&KA); /* 将KA所指向数组的后16个数据写到LCD上面 */
}

⌨️ 快捷键说明

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