/////LCD12864液晶屏测试程序(已通过)//////
////////液晶屏型号:HJ12864M-1//////////
///////////////////////////////////////
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//8bit数据接入IO口
#define Part P0 //P0接8位数据线
//控制数据端
sbit LCD_RS=P1^0; //定义12864液晶RS端,寄存器选择信号 H:数据寄存器 L:指令寄存器
sbit LCD_RW=P1^1; //定义12864液晶RW端,读/写信号 H:读 L:写
sbit LCD_EN=P2^5; //定义12864液晶LCDEN端, 片选信号 下降沿触发,锁存数据
//
sbit LCD_PSB=P1^3; //定义12864液晶PSB端, H:并行 L:串行
sbit LCD_RST=P1^7; //定义12864液晶RST端, H:不复位 L:复位
void lcd_write_string(uchar *str);
//=====================================
//毫秒延时函数
void delay(uint xms)
{
uint i,j;
for(j=0;i<xms;j++)
for(i=0;i<110;i++);
}
//====================================
//LCD忙检测函数
bit lcd_busy()
{
bit result;
LCD_RS=0;
LCD_RW=1;
LCD_EN= 1;
result=(bit)(Part & 0x80);
LCD_EN=0;
return result;
}
//=====================================
//液晶写命令函数
void lcd_write_cmd(uchar com)
{
while(lcd_busy());
LCD_RS=0; //选择指令寄存器
LCD_RW=0; //写
LCD_EN=0;
Part=com; //指令值赋给P0口
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
//=====================================
//液晶写一个字符数据函数
void lcd_write_dat(uchar date)
{
while(lcd_busy());
LCD_RS=1; //选择数据寄存器
LCD_RW=0; //写
LCD_EN=0;
P0=date; //数据值赋给P0口
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
//=====================================
//液晶写数值型数据
void lcd_write_data(uchar xinlv)
{
while(lcd_busy());
LCD_RS=1; //选择数据寄存器
LCD_RW=0; //写
LCD_EN=0;
P0=xinlv+0x30; //数据值赋给P0口
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
//=====================================
//液晶写一个字符串函数
void lcd_write_string(uchar *str)
{
while(*str!='\0') //未结束
{
lcd_write_dat(*str++);
delay(5);
}
}
//=====================================
//液晶显示位置函数
void lcd_pos(uchar x,uchar y) //从第X行的第Y位置开始显示
{
uchar pos;
if(x==1) //第一行
{ x=0x80;}
else if(x==2) //第二行
{ x=0x90;}
else if(x==3) //第三行
{ x=0x88;}
else if(x==4) //第四行
{ x=0x98;}
pos=x+y-1; //首地址为0X80
lcd_write_cmd(pos);
}
//=====================================
//液晶初始化函数
void lcd_init()
{
LCD_PSB=1; //并行方式
LCD_RST=1; //不复位
lcd_write_cmd(0x30);
delay(5);
lcd_write_cmd(0x0c); //开显示,不显示光标
delay(5);
lcd_write_cmd(0x06); //写一个字符后地址指针自动加1
delay(5);
lcd_write_cmd(0x01); //清屏
delay(5);
}
评论2
最新资源