📄 12864并行接口参考程序.txt
字号:
//12864并行接口参考程序,控制器st7920
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//12864 汉字显示模块 与MCU连接
sbit RS = P2^2;// 1:输入数据 ;0:输入命令
sbit RW = P2^3;//1:读数据 0:写数据
sbit E = P2^7;
sbit PSB = P2^5; //串并口选择 1:并口模式; 0:串口模式;
#define LcdData P0
//延时子程序
void delay(unsigned int t)
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
//测试LCD忙
bit Check_Busy()
{
bit busy;
RS = 0;
RW = 1;
E = 1;
_nop_();
busy = (bit)(LcdData&0x80);
E = 0;
return busy;
}
//等待LCD到空闲
void wait()
{
while(Check_Busy());
}
//写数据
void Lcd_Writedata(unsigned char dispdata)
{ wait();
RS=1;
RW=0;
E=0;
_nop_(); _nop_();
LcdData=dispdata;
E=1;
_nop_(); _nop_();
E=0;
}
//写指令代码
void Lcd_WriteCmd(unsigned char cmdcode)
{ wait();
RS=0;
RW=0;
E=0;
_nop_(); _nop_();
LcdData=cmdcode;
_nop_(); _nop_();
E=1;
_nop_(); _nop_();
E=0;
}
//初始化LCD
void Lcd_Reset()
{ PSB=1;
Lcd_WriteCmd(0x30); //选择基本指令集
delay(5);
Lcd_WriteCmd(0x0c); //开显示(无游标、不反白)
delay(5);
Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00H
delay(5);
Lcd_WriteCmd(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
}
void WriteStr(unsigned char code *s)
{
while(*s>0)
{ Lcd_Writedata(*s);
s++;
}
}
void hzDisp()
{
Lcd_WriteCmd(0x80);
WriteStr("黄河远上白云间,");
Lcd_WriteCmd(0x90);
WriteStr("一片孤城万仞山。");
Lcd_WriteCmd(0x88);
WriteStr("羌笛何须怨杨柳?");
Lcd_WriteCmd(0x98);
WriteStr("春风不度玉门关。");
}
/*绘图显示的步骤
1 关闭绘图显示功能
2 先将垂直的坐标(Y)写入绘图RAM地址
3 再将水平的位元组坐标(X)写入绘图RAM地址
4 将D15-D8写入RAM中
5 将D7-D0写入到RAM中
6 打开绘图显示功能*/
//整屏显示竖条
//当ii=0时显示上面128×32,当ii=8时显示下面128×32
void LcdFill_Vertical()
{ unsigned char x,y,ii;
for(ii=0;ii<9;ii+=8)
for(y=0;y<0x20;y++)
for(x=0;x<8;x++)
{
Lcd_WriteCmd(0x36);//扩充指令 绘图显示
Lcd_WriteCmd(y+0x80); //行地址
Lcd_WriteCmd(x+0x80+ii); //列地址
Lcd_Writedata(0x55); //写数据 D15-D8
Lcd_Writedata(0x55); //写数据 D7-D0
Lcd_WriteCmd(0x30);
}
}
//当ii=0时显示上面128×32,当ii=8时显示下面128×32
//整屏显示横条线
void LcdFill_Level()
{ unsigned char x,y,ii;
unsigned char k;
for(ii=0;ii<9;ii+=8)
for(y=0;y<0x20;y++)
{ if((y%2)==1)
k=0xff;
else
k=0;
for(x=0;x<8;x++)
{ Lcd_WriteCmd(0x36); //扩充指令 绘图显示
Lcd_WriteCmd(y+0x80); //行地址
Lcd_WriteCmd(x+0x80+ii); //列地址
Lcd_Writedata(k);
Lcd_Writedata(k);
Lcd_WriteCmd(0x30);
}
}
}
void Main()
{
Lcd_Reset(); //初始化LCD屏
while(1)
{
Lcd_Reset();
LcdFill_Vertical(); //显示竖条
delay(6000);delay(4000);delay(4000);
Lcd_Reset();
LcdFill_Level(); //显示横条
delay(6000);delay(4000);delay(4000);
Lcd_Reset();
hzDisp(); //显示汉字
delay(6000); delay(4000);delay(4000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -