简单的12864显示程序

简单的12864显示程序12864

大家好,又见面了,我是你们的朋友全栈君。

  • 2864是128*64点阵液晶模块的点阵数简称。我使用的内部自带汉字库的一款液晶作为风速显示
  • 好了废话不多说,接下来就贴上我的程序
  • #//头信息
    #include <reg51.h>
    #include <math.h>
    #include <INTRINS.H>
    
    //定义数据类型
    #define  uchar unsigned char
    #define  uint unsigned int
    #define  xchar unsigned char code  
    
    #define      DataPort P1
    #define     DELAYMS 80
    
    //端口定义
    sbit RS_Port    =    P2^7;
    sbit RW_Port    =    P2^6;
    sbit E_Port      = P2^5;
    sbit PSB_Port    =    P2^4;
    
    
    //输入显示的内容   # 每行显示七个字 要改内内容直接在下边该就行了 
    // 但是需要留意的是,每行必须七个字 否则乱码  后期我会修改
    xchar CorpInf[]=
    {
         "风速风速风速风"
        "风速风速风速风"
        "风速风速风速风"
        "风速风速风速风"
    };
    
    //短延时函数
    #pragma disable         
    void delay(uchar uc_dly)
    {
        while (uc_dly--);
    }
    
    //长延时函数,以秒每单位
    #pragma disable      
    void delays() 
    {
        uchar uc_dly,uc_dly1,uc_dly2;
    
        uc_dly =DELAYMS;
        
        while (uc_dly --)
        {
            for (uc_dly1=0;uc_dly1<50;uc_dly1++)
                for (uc_dly2=0;uc_dly2<50;uc_dly2++);
        };
    }
    
    
    //写命令
    #pragma disable  
    void wr_cmd(uchar cmd)  
    {
        E_Port = 0;
        _nop_();
        _nop_();
    
        RS_Port=0;
        _nop_();
        _nop_();
    
        RW_Port=0;
        _nop_();
        _nop_();
    
        E_Port=1;
        _nop_();
        _nop_();
    
        DataPort=cmd;
        _nop_();
        _nop_();
    
        E_Port=0;
        _nop_();
        _nop_();
    
        delay(5);
    }
    
    //写数据
    #pragma disable
    void wr_dat(uchar dat) 
    {    
        E_Port = 0;
        _nop_();
        _nop_();
     RS_Port=1;
        _nop_();
        _nop_();
        
        RW_Port=0;
        _nop_();
        _nop_();
    
        E_Port=1;
        _nop_();
        _nop_();
            
        DataPort=dat;
        _nop_();
        _nop_();
    
        E_Port=0;
        _nop_();
        _nop_();
    
        delay(5);
    }
    
    //显示初始化
    #pragma disable
    void Init(void)   
    {
        wr_cmd(0x30);     //DL=1:8-BIT interface
        wr_cmd(0x30);     //RE=0:basic instruction
        wr_cmd(0x06);     //Entire display shift right by 1
        wr_cmd(0x08);     //Display OFF,Cursor OFF,Cursor position blink OFF
    
        wr_cmd(0x34);     //DL=1:8-BIT interface
        wr_cmd(0x34);     //RE=0:Extend instruction
        wr_cmd(0x03);
    }
    
    
    //写入数据的行数以及数据的分布
    #pragma disable
    void DisGBStr(xchar *CorpInf)
    {
        uchar uc_GBCnt;
    
        wr_cmd(0x30);     //DL=1:8-BIT interface
        wr_cmd(0x30);     //RE=0:basic instruction
        wr_cmd(0x0C);     //Display OFF,Cursor OFF,Cursor position blink OFF
    
        wr_cmd(0x80);
        for (uc_GBCnt=0;uc_GBCnt<16;uc_GBCnt++)
        {
            wr_dat(CorpInf[2 * uc_GBCnt]);
            wr_dat(CorpInf[2 * uc_GBCnt + 1]);
        };
    
        wr_cmd(0x90);
        for (uc_GBCnt=0;uc_GBCnt<16;uc_GBCnt++)
        {
            wr_dat(CorpInf[2 * uc_GBCnt + 32]);
            wr_dat(CorpInf[2 * uc_GBCnt + 33]);
        };
    
        delays();
    }
    
    #pragma disable
    void CRAM_OFF()
    {
        wr_cmd(0x30);     //DL=1:8-BIT interface
        wr_cmd(0x30);     //RE=0:basic instruction
        wr_cmd(0x08);    //Display ON,Cursor OFF,Cursor position blink OFF
        wr_cmd(0x01);     //CLEAR
        delay(250);
    }
    
    void main()
    {
        EA=1; //Interurupt Enabled
    
        IT0 = 1;//INT0 Low Level Trigger
    
        EX0 = 1;//INT0 Enabled
    
        PSB_Port =1;
        _nop_();
        delay(250);
    
        //ST7920 Init
        Init();
    
        while (1)
        {
            CRAM_OFF();
            DisGBStr(CorpInf);
        }
    }

     

  • 其中需要注意的是在数组中显示的是可以变化的 如果不想写这么多字的化 也可以修改后边的for循环来是显示的字变少,但是如果不这样操作的话,就会使显示乱码
    xchar CorpInf[]=
    {
         "风速风速风速风"
        "风速风速风速风"
        "风速风速风速风"
        "风速风速风速风"
    };

     

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155417.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2009安全硬件市场趋势暨我们思科ASA5500优势!

    2009安全硬件市场趋势暨我们思科ASA5500优势!

    2021年7月29日
    76
  • kfold交叉验证_SPSS交叉验证法

    kfold交叉验证_SPSS交叉验证法一、前言在机器学习建模过程中,通行的做法是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。在训练过程中,经常会出现过拟合的问题,就是模型可以很好的匹配训练数据,却不能很好在预测训练集外的数据。如果此时就使用测试数据来调整模型参数,就相当于在训练时已知部分测试数据的信息,会影响最终评估结果的准确性。通常的做法是在训练数据再中分出一部分做为验证(Validation)数据,用来评估模型的训练效果。验证数据取自训练数据,但不参与训练,这样可以相对客观的评估模型对于训

    2026年1月31日
    3
  • vim的复制粘贴命令_linux vim全选复制

    vim的复制粘贴命令_linux vim全选复制一、最基本的复制粘贴1.将光标移动到要复制的文本开始的地方,按v进入可视模式。2.将光标移动到要复制的文本的结束的地方,按y复制。此时vim会自动将光标定位到选中文本的开始的地方,并退出可视模式。3.移动光标到文本结束的地方,按p粘贴。…

    2025年11月30日
    8
  • 易语言入门教程学习「建议收藏」

    易语言入门教程学习「建议收藏」e入门教程

    2025年8月2日
    4
  • navicat 生成激活码时出错_在线激活2022.03.04

    (navicat 生成激活码时出错)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html40ZKSWCX8G-eyJsaWN…

    2022年3月13日
    710
  • idea2021激活码永久 json快捷键输出【最新永久激活】

    (idea2021激活码永久 json快捷键输出)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~9071407CR5-eyJsaWNlbnNlSWQiOi…

    2022年3月22日
    76

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号