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

📄 lcd.c

📁 基于AT89S8253单片机的LCD驱动程序代码
💻 C
字号:
/*------------------------------------------------------------------------------------------------------------*-

  lcd.c(v1.00)

  ------------------------------------------------------------------------------------------------------------

  -these rountine are used for driving FYD12864-0402B LCD module.
 
 -*-----------------------------------------------------------------------------------------------------------*/

   //简单的LCD显示驱动程序,用于驱动FYD12864-0402B液晶显示模块。

   //fosc=11.0592MHz
   //硬件连接:
   //LCD上的VSS[1]连接到地
   //LCD上的VCC[2]连接到+5V
   //LCD上的VOUT[18]串联10K电位器连接到VO
   //LCD上的PSB[15]可选择VCC或GND(须加限流电阻100欧)
   //LCD上的/RESET[17]接复位电路
   //LCD上的A[19]连接VCC
   //LCD上的K[20]连接GND

   #include <AT89X52.H>
	#include"port.h"
   #include"lcd.h"

   //端口定义应放在端口头文件PORT.H中
   //#define Lcd_Bus P1

   //sbit RS=P2^1;  //数据指令选择信号
   //sbit RW=P2^2;  //读写控制信号
   //sbit E=P2^3;   //使能信号

   #define FIRST_ADDR 0       //定义字符/汉字显示起始位置

   //检查忙位
   void chk_busy()
   {  
        RS=0;
        RW=1;
        E=1;
        Lcd_Bus=0xff;
        while((Lcd_Bus&0x80)==0x80);
        E=0;
   }

   //延时子程序
   void delay(unsigned int t)
   {  
        unsigned int i,j;
        for(i=0;i<t;i++)
        for(j=0;j<10;j++)
           ;
    }

    //写命令到LCD
    void write_com(unsigned char cmdcode)
    {
	      chk_busy();
	      RS=0;
	      RW=0;
	      E=1;
	      Lcd_Bus=cmdcode;
	      delay(5);//在数据写入的时候加入适当的延时
	      E=0;
	      delay(5);
    }

    //写数据到LCD
    void write_data(unsigned char Dispdata)
    {
	      chk_busy();
	      RS=1;
	      RW=0;
 	      E=1;
	      Lcd_Bus=Dispdata;
	      delay(5);//在数据写入的时候加入适当的延时
	      E=0;
	      delay(5);
    }

    //初始化LCD显示屏
    void lcdreset()
    {  
         delay(2000);
         write_com(0x30);
         delay(10);             //选择基本指令集
         write_com(0x30);       //选择8bit数据流
         delay(5);
         write_com(0x0c);       //开显示(无游标、不反白)
         delay(10);
         write_com(0x01);       //清除显示,并且设定地址指针为00H
         delay(500);
         write_com(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
         delay(0);
    }

    //清屏命令  
    void clrscreen()
    { 
         write_com(0x01);
         delay(10);
    }

    //显示字符串
    void hzkdis(unsigned char code *s)
    {  
         while(*s>0)
         {  write_data(*s);
            s++;
            delay(50);
         }
    }

    /*该函数只在测试时使用*/
    //测试屏幕显示
    void ceshi()
    {
         write_com(0x01);//清除显示,并且设定地址指针为00H
         delay(5);
 
         write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
         hzkdis("乐山师院物电系制"); 

         write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)
         hzkdis("LCD12864点阵液晶");
 
         write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示)
         hzkdis("----测试程序----");
 
         write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)
         hzkdis("----------黄华彬");
     }

/*------------------------------------------------------------------------------------------------------------*-

  ---------------------------------------THE END OF FILE------------------------------------------------------

-*------------------------------------------------------------------------------------------------------------*/
   

⌨️ 快捷键说明

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