📄 st7920_parallel.c
字号:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define DATABUS P0 //数据总线为P0,并行方式
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
void delay(uchar t) //延时子程序
{ uchar i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}
void chk_busy() //测忙
{ RS=0;
RW=1;
EN=1;
while((DATABUS&0x80)==0x80);
EN=0;
}
uchar lcdrd()//读数据
{ uchar i;
P2=0x07;
_nop_();
EN=1;
delay(5);
i=DATABUS;
_nop_();
EN=0;
return i;
}
void lcdwd(uchar dispdata) //写数据
{ chk_busy();
_nop_();
RS=1;
RW=0;
EN=1;
DATABUS=dispdata;
delay(5);
EN=0;
_nop_();
DATABUS=0xff;
}
void lcdwc(uchar cmdcode) //写指令代码
{ chk_busy();
_nop_();
RS=0;
RW=0;
EN=1;
DATABUS=cmdcode;
delay(5);
EN=0;
_nop_();
DATABUS=0xff;
}
void lcd_init() //初始化lcd
{ delay(255);
lcdwc(0x30);//选择基本指令集
lcdwc(0x30);//选择8bit数据流
delay(1);
lcdwc(0x0c);//开显示(无游标、不反白)
delay(1);
lcdwc(0x01);//清除显示,并且设定地址指针为00H
delay(1);
lcdwc(0x06);//指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
}
void hzkdis(uchar code *s)
{ while(*s>0)
{ lcdwd(*s);
s++;
delay(5);
}
}
void display()
{ lcdwc(0x80);
hzkdis("经度:108.5448 E");
lcdwc(0x90);
hzkdis("纬度: 34.1458 N");
lcdwc(0x88);
hzkdis("地区: 陕西西安");
lcdwc(0x98);
hzkdis("时间:21:12:20");
}
main()
{
RW=0;
lcd_init(); //初始化LCD
lcdwc(0x01);//清屏
while(1)
{
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -