📄 mobiao.c
字号:
//铜桦LCM IC:ST7920 测试程序,使用周立功的DP-51+实验板,CPU:P 89C52X2BN,晶振频率:11.0592
//连线图:DB0~7--P1.0~7, RS--P3.0,RW--P3.1,E--P3.2,REST--P3.4,(PSB--P3.3 本实验接VCC)
/*如果LCD是20引脚,那么第15脚为PSB串行、并行方式选择,L为串行,H为并行
如果LCD是16引脚,那么就要通过焊接LCD背面的PSB跳线实现串行、并行方式的选择*/
/*LCD并行方式工作时序
空闲时E=1,MCU对LCD的读写无效
E 下降前,RS、RW 的数据必须稳定下来
E 下降时,RS、RW 的数据被LCD接受
E 下降后,MCU输出DATA数据
E 上升时,DATA的数据被LCD接受
RW=1时,MCU读LCD
RW=0时,MCU写LCD
RS=0时,MCU读写LCD指令
RS=1时,MCU读写LCD数据*/
/*写数据与写指令不需要考虑基本和扩充指令*/
#include<reg52.h> //加载头文件
#include <stdio.h> /* 加载输入输出库函数 */
//定义控制线的I/O引脚
sbit RESET=P3^4;
//sbit PSB=P3^3;
sbit E=P3^2;
sbit RW=P3^1;
sbit RS=P3^0;
#define uint unsigned int //定义函数缩写类型
#define uchar unsigned char
//字库定义
uchar code strsx[]={
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18};
uchar code strsl[]={"速率: ml/h "}; //LEIL需要打0x0d补丁如含有“数” 标点是16*16除去:
/*-- 文字: 8 --*/
/*-- 幼圆12; 此字体下对应的点阵为:宽x高=8x16 --*/
uchar code str0[64]={
0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x38,0x1C,0x38,0x1C,
0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,
0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,
0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x00,0x00};
uchar code str1[64]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xC0,0x07,0xC0,0x0F,0xC0,0x01,0xC0,
0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,
0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,
0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x00,0x00};
//uchar code str2[]={0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00};
//uchar code str3[]={0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00};
//uchar code str4[]={0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00};
//uchar code str5[]={0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00};
//uchar code str6[]={0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00};
//uchar code str7[]={0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00};
uchar code str8[64]={
0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x38,0x1C,0x38,0x1C,
0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x1C,0x38,0x0F,0xF0,
0x07,0xE0,0x07,0xE0,0x0F,0xF0,0x1C,0x38,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,
0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x00,0x00};
//uchar code str9[]={0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00};
uchar code strd[16]={0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00};
//函数定义
void initialize (void); //初始化函数(全屏数据清零)
void wrtins (uchar i); //写指令函数
void wrdata (uchar d); //写数据
void wrp(uchar q,uchar w,uchar i,uchar j,uchar m[]); //q w 为y x 坐标 i为行象素/8 j为列象素
void asame (uchar i); //写一样函数
void delay (uint x); //延时函数
//函数开始
void main(void){
uchar i;
initialize();
asame(0x00);
wrtins(0x30);
wrtins(0x80); //写DDRAM地址,第一行
for(i=0;i<6;i++){
wrdata(strsl[i]);
}
wrtins(0x90); //第二行
for(i=6;i<12;i++){
wrdata(strsl[i]);
}
wrtins(0x34);
wrp(0x80,0x83,2,32,str0);
wrp(0x80,0x84,2,32,str8);
wrp(0x98,0x85,2,8,strd);
wrp(0x80,0x86,2,32,str1);
wrtins(0x36);
while(1);
}
void initialize(void){
RESET=0; //LCM复位信号有效
delay(20); //延时
RESET=1; //LCM复位信号无效
wrtins(0x38);
delay(20);
wrtins(0x38);
delay(20);
wrtins(0x01);
delay(20);
wrtins(0x02);
delay(20);
wrtins(0x06); //AC加一
delay(20);
wrtins(0x0c); //显示开 游标关 游标闪关
delay(20);
}
void wrtins (uchar i) //入口参数为要写的指令的低8位
{
RS=0;
RW=0;
P1=i;
E=0;
delay(1);
E=1;
//delay(1);
P1=0xff;
}
void wrdata(uchar d)
{
RS=1;
RW=0;
P1=d;
E=0;
delay(1);
E=1;
P1=0xff;
}
void wrp(uchar q,uchar w,uchar i,uchar j,uchar m[]) //q w 为y x 坐标 i为行象素/8 j为列象素
{ uchar u,t,s,o;
for(u=0;u<j;u++){
s=q+u;
wrtins(s);
wrtins(w);
for(t=0;t<i;t++){
o=t+i*u;
wrdata(m[o]);
}
}
}
void asame (uchar i)
{uchar u,t,s;
for (u=0;u<32;u++){
wrtins(0x36);
s=0x80+u;
wrtins(s);
wrtins(0x80);
for(t=0;t<20;t++){
wrdata(i);
}
}
}
void delay (uint x) //入口参数控制延时的长短
{
uchar k;
while(x--){
for(k=0;k<125;k++)
{;}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -