单片机源程序如下:
/* ***************************************************** */
/* ***************************************************** */
// 工 程 : 51单片机开发板
// 文件名 : LCD12864.c
// 处理器 : STC89C52RC
// 编译环境 : Keil4 C51
// 系统时钟 : 11.0592MHZ
// 版 本 : V1.0
// 生成日期 : 2017-09-20
// 修改日期 :
// 简单描述 : 本文件是带字库LCD12864显示程序
/* ***************************************************** */
#include
#define uint unsigned int
#define uchar unsigned char
#define Lcd_Bus P0 //数据总线
/* ***************************************************** */
// 位定义
/* ***************************************************** */
sbit RS=P2^4; //数据/命令选择端(H/L)
sbit RW=P2^5; //数/写选择端(H/L)
sbit E=P2^6; //使能信号
/* ***************************************************** */
// 函数名称:DelayMS()
// 函数功能:延时毫秒数(ValMS)
// 入口参数:无
// 出口参数:无
/* ***************************************************** */
void DelayMS(uint ValMS)
{
uint uiVal,ujVal;
for(uiVal = 0; uiVal < ValMS; uiVal++)
for(ujVal = 0; ujVal < 121; ujVal++);
}
/* ***************************************************** */
// 函数名称hk_busy()
// 函数功能:检测状态标志位(判断是忙/闲)
// 入口参数:无
// 出口参数:无
/* ***************************************************** */
void chk_busy()
{
Lcd_Bus=0x00;
RS=0;
RW=1;
E=1;
DelayMS(1);
while(Lcd_Bus & 0x80); // 若LCD忙,停止到这里,否则走起
E=0; // 之后将EN初始化为低电平
}
/* ***************************************************** */
// 函数名称rite_com()
// 函数功能:LCD写指令
// 入口参数:指令(cmdcode)
// 出口参数:无
/* ***************************************************** */
void write_com(unsigned char cmdcode)
{
chk_busy(); //忙检查
RS=0;
RW=0; //RS=0,RW=0;表示MCU写指令到暂存器IR
E=1;
Lcd_Bus=cmdcode; //Lcd_Bus=P0;
E=0; //E由高到低变化配合W进行写指令或写数据
}
/* ***************************************************** */
// 函数名称rite_data()
// 函数功能:LCD写数据
// 入口参数:数据(Dispdata)
// 出口参数:无
/* ***************************************************** */
void write_data(unsigned char Dispdata)
{
chk_busy(); //忙检查
RS=1;
RW=0; //RS=1;RW=0;表示MCU写数据到暂存器IR
E=1;
Lcd_Bus=Dispdata; //Lcd_Bus=P0;
E=0; //E由高到低变化配合W进行写指令或写数据
}
/* ***************************************************** */
// 函数名称:lcm_init()
// 函数功能:LCD初始化
// 入口参数:无
// 出口参数:无
/* ***************************************************** */
void lcm_init()
{
write_com(0x30); //选择8bit数据流 0X30=0011,0000
DelayMS(10);
write_com(0x0C); //开显示(无游标,不反白)
DelayMS(10);
write_com(0x01); //清除显示,并且设定地址指针为00H
DelayMS(10);
}
//============================================================//写数据或指令(被调用层)
void lcm_w_test(bit i,unsigned char word)
{
if(i == 0) //根据i的状态区分指令或数据
{
write_com(word);//写数据或指令(0,指令)
}
else
{
write_data(word);//写指令或数据(1,数据)
}
}
//-----------------------------------------------------------//清屏函数
void lcm_clr(void){
lcm_w_test(0,0x01);
}
//===========================================================//向LCM发送一个字符串,长度64字符之内(被调用层),
void lcm_w_word(unsigned char *s)
{
while(*s>0) //*s指针
{
write_data(*s);//用指针显示数据地址
s++; //自加显示下一个数据地址
}
}
void welcome(void) //初始化开机显示
{
lcm_w_test(0,0x81); //写指令和地址
lcm_w_word ("空山新雨后,"); //写显示数据
lcm_w_test(0,0x91);
……………………
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』