×
单片机 > 单片机程序设计 > 详情

LCD12864中文液晶屏显示

发布时间:2020-06-17 发布时间:
|

单片机源程序如下:

/* ***************************************************** */ 

/* ***************************************************** */

// 工  程   : 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);

……………………



关键字:LCD12864  中文液晶屏显示  STC89C52RC 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP430F5529 上手小例程2