验证通过的不带字库12864液晶显示程序.pdf
文本预览下载声明
#include reg52.h
#include intrins.h
#define uint unsigned int
#define uchar unsigned char
#define nop _nop_()
#define LCD_data P0 //数据口
sbit LCD_RS = P2^6; //寄存器选择输入
sbit LCD_RW = P2^5; //液晶读/写控制
sbit LCD_EN = P2^7; //液晶使能控制
sbit LCD_CS1 = P3^2; //低电平有效 控制左半屏
sbit LCD_CS2 = P3^3; //低电平有效 控制右半屏
//sbit LCD_RST = P3^4; //液晶复位端口
uchar code wo[]={0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,
0x20,0x00,
0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00,};
void delay(uchar a) //延时
{
uchar x,y;
for(x=0;xa;x++)
for(y=0;y10;y++);
}
void LCD_busy() //忙检测函数
{
LCD_data=0x00;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
while( LCD_data 0x80 );
LCD_EN = 0;
LCD_RS = 0;
LCD_RW = 1;
}
void LCD_write_cmmand(uchar cmd) //写指令函数
{
// LCD_busy();
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
LCD_data = cmd;
// nop;
// nop;
delay(2);
LCD_EN = 1;
// nop;
// nop;
delay(2);
LCD_EN = 0;
}
void LCD_write_data(uchar dat) //写数据函数
{
// LCD_busy();
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
LCD_data = dat;
delay(2);
LCD_EN = 1;
delay(2);
LCD_EN = 0;
}
void set_page(uchar page)//设置页,要那一页直接是那个数字就行了
{ //总共有8 页,一页是8 行点阵点,即128*8
page=0xb8|page; //页得首地址为0xB8 1011 1XXX
LCD_write_cmmand(page);
}
void set_line(uchar startline) //设置显示的起始行
{
startline=0xc0|startline; //起始行地址为0xc0
LCD_write_cmmand(startline); //设置从哪一行开始,共0--63 11XX XXXX
}
void set_column(uchar column) //设置显示的列
{
column=column0x3f; //列的最大值为64,因为分成两个屏了
column=0x40|column; //列的首地址为0x40; 01XX XXXX
LCD_write_cmmand(column); //设置列位置
}
void setonoff(uchar onoff) //显示开
显示全部