简单的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[]= { "风速风速风速风" "风速风速风速风" "风速风速风速风" "风速风速风速风" };

     

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

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