简单的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)
上一篇 2022年7月2日 上午7:46
下一篇 2022年7月2日 上午7:46


相关推荐

  • plsql直接连接远程数据库_mysql切换数据库命令

    plsql直接连接远程数据库_mysql切换数据库命令前言每次安装Oracle以后,都会出现使用plsql连接不上的问题!多次重启电脑、重装系统的磨人经历之后,终于做出这么一篇文章,希望能帮助广大技术人员减少一些时间,顺利进行连接。注:也可以用plsql连接远程数据库(只要有oracle的network\admin\tnsnames.ora就行)。首先下载64位oracle以及32位轻量级客户端(注意版本的对应,我用的是11g的oracl……

    2022年8月29日
    6
  • navicat 15 激活码 3月最新注册码

    navicat 15 激活码 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    55
  • Idea配置热部署「建议收藏」

    Idea配置热部署「建议收藏」Idea配置热部署一、概念热部署就是正在运行状态的应用,修改了他的源码之后,在不重新启动的情况下能够自动把增量内容编译并部署到服务器上,使得修改立即生效。热部署为了解决的问题有两个,一是在开发的时候,修改代码后不需要重启应用就能看到效果,大大提升开发效率;二是生产上运行的程序,可以在不停止运行的情况下进行升级,不影响用户使用。二、Idea开启热部署本篇文章主要是介绍Idea…

    2022年5月22日
    62
  • vimrc配置_vim环境配置

    vimrc配置_vim环境配置博文背景写代码没vim难受,装个vim它对于快捷键的设置并不能和visualstudio一样很方便地设置将所有快捷键映射到vim插件,所以记录配置后的文件非常有必要。具体操作切换vim插件状态的快捷键设置:文件路径:C:\Users\Administrator\AppData\Roaming\JetBrains\WebStormXXX\options\vim_settings.xml文件内容:<application><componentname=”VimEdito

    2026年4月15日
    4
  • BeanUtils的populate方法之日期处理

    BeanUtils的populate方法之日期处理BeanUtils的populate方法之日期处理BeanUtils.populate(Obj,Map);可以使map转对象,但是如果是Obj有个日期字段而Map中这个字段为空时候就会报错,无法赋值,这个时候就需要一个日期转换器!首先写一个日期转换器packagecom.hzdl.examination.web;importorg.apache.commons.beanutils.BeanUtilsBean;importorg.apache.commons.beanutils.Conve

    2022年7月13日
    29
  • sd u盘 速度测试软件,u盘速度测试(FlashBench)sd卡速度测试

    sd u盘 速度测试软件,u盘速度测试(FlashBench)sd卡速度测试这是一款简单实用的 u 盘读写速度测试软件 软件体积只有区区 35KB 左右 而且也只有 3 个文件 无需安装功能却一点也不输给体积是他几百倍的大块头 FlashBench 能够全方位的测试 U 盘和 SD 卡等使用 Flash 作为介质的移动存储设备的读写速度 它的测试结果是完全真实的 如果你在网上购买了 U 盘或者 microSD 卡 那么能够使用这个软件测试一下性能是否和宣传的一样 如果失实可以立刻退货 测试原理 这个软件对

    2026年3月17日
    1

发表回复

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

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