• STC51单片机33——液晶12864显示


     

     
    **********************************************************/
    #include"reg51.h"
    #define uchar unsigned char
    #define uint unsigned int
    sbit lcdrst=P3^0;
    sbit cs2=P3^5;
    sbit cs1=P3^4;
    sbit  e=P3^2;
    sbit rw=P3^3;
    sbit rs=P3^1;
    /************************************************
    // 汉字字模表                                                          //
    // 汉字库: 宋体16.dot 纵向取模下高位,数据排列:从左到右从上到下
    ************************************************/
    uchar code hao[]={ 0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,
          0x82,0x82,0xE2,0x92,0x8A,0xC6,0x80,0x00,
          0x40,0x22,0x15,0x08,0x14,0x63,0x00,0x00,
          0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,};     //"好",
    uchar code xue[]={ 0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,
          0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,
          0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,
          0x06,0x05,0x04,0x04,0x04,0x06,0x04,0x00,};        //"学",
    uchar code xi[]={0x04,0x04,0x04,0x04,0x14,0x24,0xC4,0x04,
          0x04,0x04,0x84,0x04,0x04,0xFE,0x04,0x00,
          0x00,0x00,0x08,0x18,0x04,0x04,0x02,0x02,
          0x01,0x21,0x40,0x80,0x40,0x3F,0x00,0x00,};       //"习",
    uchar code tian[]={0x40,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,
          0x42,0x42,0x42,0x42,0x43,0x62,0x40,0x00,
          0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,
          0x03,0x0C,0x10,0x20,0x40,0xC0,0x40,0x00,};           //"天",
    uchar code xiang[]={0x00,0xF8,0x08,0x08,0xCC,0x4A,0x49,0x48,
          0x48,0x48,0xE8,0x48,0x08,0xFC,0x08,0x00,
          0x00,0xFF,0x00,0x00,0x1F,0x08,0x08,0x08,
          0x08,0x08,0x1F,0x40,0x80,0x7F,0x00,0x00,};        //"向",
    uchar code shang[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
          0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x00,
          0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,
          0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00};        //"上",
    uchar code dian[]={ 0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,
          0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,
          0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,
          0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,};        //"电",
    uchar code zi[]={0x80,0x80,0x82,0x82,0x82,0x82,0x82,0xE2,
          0xA2,0x92,0x8A,0x86,0x80,0xC0,0x80,0x00,
          0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};        // "子",
    uchar code lu[]={0x00,0xFE,0x42,0xC2,0x42,0x7F,0x12,0x08,
          0x8C,0x57,0x24,0x54,0x8C,0x84,0x80,0x00,
          0x40,0x7E,0x40,0x3F,0x22,0x22,0x01,0xFF,
          0x42,0x42,0x42,0x42,0x42,0xFF,0x02,0x00,};        //"路",
    uchar code dan[]={0x00,0x00,0xF8,0x49,0x4A,0x4C,0x48,0xF8,
          0x48,0x4C,0x4A,0x49,0xFC,0x08,0x00,0x00,
          0x10,0x10,0x17,0x12,0x12,0x12,0x12,0xFF,
          0x12,0x12,0x12,0x12,0x13,0x18,0x10,0x00,};        //"单",
    uchar code pian[]={0x00,0x00,0xFE,0x20,0x20,0x20,0x20,0x20,
          0x3F,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
          0x80,0x40,0x3F,0x01,0x01,0x01,0x01,0x01,
          0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,};        //"片",
    uchar code ji[]={0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFC,
          0x04,0x04,0x04,0xFE,0x04,0x00,0x00,0x00,
          0x04,0x03,0x00,0xFF,0x80,0x41,0x20,0x1F,
          0x00,0x00,0x00,0x3F,0x40,0x40,0x70,0x00};        //"机",
    /*************************************************
    延时函数
    **************************************************/
    void delay(uchar z)
    {
    uchar i,j;
    for(i=z;i>0;i--)
    for(j=110;j>0;j--);
    }
    /********************************************
    检查状态
    *********************************************/
    void checkbusy()
    {
    uchar dat;
    rs=0;        //数据\指令选择
    rw=1;        //允许读
    do
    {
    P2=0x00;     //清零P2口
    delay(5);
    e=1;
    dat=P2;          //读P2口
    e=0;
    dat>>=7;     //仅当第7位为0时才可操作(判别busy信号)
    }
    while(!(dat==0x00));
    }
    /*************************************
    写命令
    ***********************************/
    void write_com(uchar com)
    {
    checkbusy();  //检查是否忙
    rs=0;        //写命令
    rw=0;
    P2=com;
    e=1;
    e=0;
    }
    /*************************************
    写数据
    ***********************************/
    void write_data(uchar date)
    {
    checkbusy();    //检查是否忙
    rs=1;        //写数据
    rw=0;
    P2=date;
    e=1;
    e=0;
    }
    /*************************************
    显示汉字
    ***********************************/
    void  hanzi(uchar  ye,uchar lie,uchar  *daima)
    {
    uchar i,j;
    for(i=0;i<2;i++)
    {
      write_com(0xb8+ye+i);               //    ye页与 ye+1页
      write_com(0x40+lie);               //确定初始行
      for(j=0;j<16;j++)
      {
        write_data(daima[i*16+j]);         //写数据(汉字)
        }
     }
     }
    /*************************************
    显示数字
    ***********************************/
    void shuzi(uchar  ye,uchar lie,uchar  *daima)
    {
    uchar i,j;
    for(i=0;i<2;i++)
    {
      write_com(0xb8+ye+i);            //    ye页与 ye+1页
      write_com(0x40+lie);             //确定初始行
      for(j=0;j<8;j++)
      {
        write_data(daima[i*8+j]);       //写数据(数字)
        }
     }
     }
     /***************************************
    清屏
     ***************************************/
    void clearlcd()
    {
    uchar i,j;
    cs1=0;              //清全屏  有cs1=0  cs2=0 与无    cs1=0  cs2=0   效果不同
    cs2=0;    
    for(i=0;i<8;i++)
      {
      write_com(0xb8+i);
      write_com(0x40);
      for(j=0;j<64;j++)
      write_data(0x00);
      }
    }

    /****************************************
    初始化LCD
    ****************************************/
    void init()
    {
    write_com(0x3e);      //关显示
    delay(1);
    write_com(0x3f);       //开显示
    write_com(0xc0);       //行初始地址
    write_com(0xb8);       //页初始地址
    write_com(0x40);       //列初始地址
    }
    /****************************************
    显示数据
    ****************************************/
    void display()
    {
    cs1=0;            //左半屏 cs1=0   cs2=1
    cs2=1;
    hanzi(0,0,hao);
    hanzi(0,16,hao);
    hanzi(0,32,xue);
    hanzi(0,48,xi);
    cs1=1;            //右半屏 cs1=1   cs2=0
    cs2=0;
    hanzi(0,0,tian);
    hanzi(0,16,tian);
    hanzi(0,32,xiang);         // 如果清屏时加上cs1=0  cs2=0则可以不用,否则要加上
    hanzi(0,48,shang);
    cs1=0;
    cs2=1;
    hanzi(3,0,dian);
    hanzi(3,16,zi);
    hanzi(3,32,dian);
    hanzi(3,48,lu);
    cs1=1;
    cs2=0;
    hanzi(6,0,dan);
    hanzi(6,16,pian);
    hanzi(6,32,ji);

    }

    完整资料打包(含仿真):

    STC51单片机33-液晶12864显示汉字-单片机文档类资源-CSDN下载

  • 相关阅读:
    js基础知识整理之 —— 五种输出方式
    低噪声 256 细分微步进电机驱动MS35774/MS35774A(汽车应用级别)
    ASP.NET6 + Mongo + OData
    SpringSecurity - 自定义过滤器使用 Json 格式登录
    TRITC-Streptavidin/TRITC-SA, 四甲基罗丹明标记链霉亲和素 Streptavidin-TRITC
    WEB前端和JAVA薪资前景究竟哪个更高?
    力扣刷题日记/day7/6.30
    YOLOv8 C2f模块融合shuffleAttention注意力机制
    docker部署JAVA项目
    园子的商业化努力:欢迎关注DataFun联合行行AI举办的数据智能创新与实践人工智能大会
  • 原文地址:https://blog.csdn.net/fengyuzhe13/article/details/127932699