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

📄 s12864.c

📁 240*128液晶显示的初始化和数据命令读写子函数
💻 C
字号:
/*
*	文件名称 : s12864.c
*	摘    要 : 本文件描述液晶控制器s12864接口函数
*
*	当前版本 : v2.0
*	作    者 : Catherine
*	完成日期 : 2007年6月30日
*/
//#pragma ot(9)
//#pragma small
#pragma ot(9)
#pragma large
#include <w77e58.h>
#include <stdio.h>
#include <string.h>

#include "s12864.h"
#include "FONTLIB.h"
sbit  DOG = P1^4;        //喂狗端
//#define ComReg     0x2001
//***************读lcd口状态****************
char   TestLcd()//等待LCD显,可以接受数据
{
      char  data1;
      //int  *p;
      for(;;)
      {
         LcdCd =1;       //lcd 写命令端口
         data1=ComRegWr;
         //data1=0x03;
         if((data1&0x03)==0x03)break;
      }
      return(0x01);
}

//***************向lcd写命令****************
void  OrderCode(char com)
{
      if(TestLcd()==1)
      {
         LcdCd =1;       //lcd 写命令端口
         ComRegWr=com;
      }
         DOG = 1;             //喂狗
        DOG = 0;             //喂狗
}
//***************向lcd写数据****************
void  OrderData(char dat1,char dat2,char com)
{
      if(TestLcd()==1)
      {
        LcdCd =0;       //lcd 写数据端口
        DataRegWr=dat1;
      }
      if(TestLcd()==1)
      {
        LcdCd =0;       //lcd 写数据端口
        DataRegWr=dat2;
      }
      if(TestLcd()==1)
      {
        LcdCd =1;       //lcd 写命令端口
        ComRegWr=com;
      }
        DOG = 1;             //喂狗
        DOG = 0;             //喂狗
}
void  OrderData1(char dat2,char com)
{
      if(TestLcd()==1)
      {
        LcdCd =0;       //lcd 写数据端口
        DataRegWr=dat2;
      }
      if(TestLcd()==1)
      {
        LcdCd =1;       //lcd 写命令端口
        ComRegWr=com;
      }
        DOG = 1;             //喂狗
        DOG = 0;             //喂狗
}

/***********************************************
*显示一个汉字子程序,图形方式 16*16
*图形方式显示汉字子程序
*显示方式为:左上角,左下角,右上角,右下角
***********************************************/
/*void   WriteWord(char o_x,char o_y,char code1)
{
       char i;
       int  dot1=0;
       int  addr=0;

       addr=o_y*32+o_x+2048;
       dot1=(code1-1)*32;
       for(i=0;i<32;i=i+2)
       {
           o_x=addr%256;
           o_y=addr/256;
           OrderData(o_x,o_y,0x24);
           OrderData1(FontLib16[dot1+i],0xc0);
           OrderData1(FontLib16[dot1+1+i],0xc0);
           addr+=32;
       }
} */

//************写入一个字符子程序,字符格式为 16*8
void  WriteNum(char o_x,char o_y,char code1)
{
       char i;
       int  dot1;
       int  addr=0;

       addr=o_y*16+o_x+2048;  //2048是设置的图形区的首地址0x0800
       dot1=(code1-1)*16;
       for(i=0;i<16;i++)
       {
           o_x=addr%256;
           o_y=addr/256;
           OrderData(o_x,o_y,0x24);
           OrderData1(FontLib8[dot1+i],0xc0);
           addr+=32;
       }
}
//************反显一个字符子程序,字符格式为 16*8
void  WriteNum_N(char o_x,char o_y,char code1)
{
       char i;
       int  dot1;
       int  addr=0;

       addr=o_y*16+o_x+2048;  //2048是设置的图形区的首地址0x0800
       dot1=(code1-1)*16;
       for(i=0;i<16;i++)
       {
           o_x=addr%256;
           o_y=addr/256;
           OrderData(o_x,o_y,0x24);
           OrderData1(~FontLib8[dot1+i],0xc0);
           addr+=32;
       }
}
//*************** 液晶清屏子程序******************
void    ClearLcd()
{
     char  data1;
     int  i;
     OrderData(0x00,0x00,0x24);
     OrderCode(0xb0);
     for(i=0;i<8000;i++)
     {
        for(;;)
        {
           LcdCd =1;       //lcd 写命令端口
           data1=ComRegWr;
           //data1=0x08;
           if((data1&0x08)==0x08)
             break;
        }
        LcdCd =0;       //lcd 写数据端口
        DataRegWr=0x00;
     }
     OrderCode(0xb2);
}
//************** 字串显示 ****************
void   ShowWord(char o_x,char o_y,char *code1,char count)
{
       char i;
       for(i=0;i<count;i++)
       {
          WriteNum(o_x,o_y,*code1);
          code1++;
          o_x++;
       }
}
//***********反显字串*******************************
void   ShowWord_N(char o_x,char o_y,char *code1,char count)
{
       char i;
       for(i=0;i<count;i++)
       {
          WriteNum_N(o_x,o_y,*code1);
          code1++;
          o_x++;
       }
}
//**************** 液晶初始化程序 ********
void   IntLcd()
{
       OrderData(0x00,0x00,0x40);    //设置文本显示区域首地址
       OrderData(0x20,0x00,0x41);    //设置文本显示区域宽度,即一行显示所占字节数
       OrderData(0x00,0x08,0x42);    //设置图形显示区域首地址,或为文本属性区域首地址
       OrderData(0x20,0x00,0x43);    //设置图形显示区域宽度,或为文本属性区域首地址,即一行显示所占字节数
       OrderCode(0xa0);              //光标形状设置
       OrderCode(0x81);              //显示方式设置,逻辑异或合成
       OrderCode(0x9c);              //显示开关设置
}


⌨️ 快捷键说明

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