📄 lcd16x2.c
字号:
//LCD 16X2 驱动程序
#include <INTRINS.H>
#include <AT89x51.H>
#define uchar unsigned char
#define en P2_7
#define rs P2_4
#define rw P2_3
//*************************************************
uchar idata good[]={ 0x47,0x4f,0X4F,0x44,0x21,0x00};//GOOD!
uchar idata uestc[]={ 0X55,0X45,0X53,0X54,0X43,0X20,0x20,0X39,0X38,0X31,
0X34,0X31,0Xb0,0x32,0x20,0x20,0x20,0x00};//UESTC__98141-2
uchar idata gongjun[]={ 0X67,0X6f,0X6e,0X67,0X20,0X6a,0x75,0X6e,0X20,
0X47,0X6f,0X6f,0X64,0x21,0x20,0x20,0x20,0x00};//gong_jun_Good!
uchar idata like[]={ 0x44,0x6f,0Xa0,0x79,0X6f,0X75,0Xa0,0x6c,0x69,
0x6b,0X65,0Xa0,0x69,0X74,0x3f,0x00};//Do you like it?
//#################################################
bdata uchar Bcc; //定义一个可位寻址的全局变量
sbit a0=Bcc^0; sbit a1=Bcc^1; sbit a2=Bcc^2; sbit a3=Bcc^3;
sbit a4=Bcc^4; sbit a5=Bcc^5; sbit a6=Bcc^6; sbit a7=Bcc^7;
//#################################################
void delay (uchar t) //延时子程序
{uchar s;while (t--){for (s=0xff;s>0;s--){_nop_();_nop_();_nop_();}}}
//*************************************************
void wait(void){ en=0; rs=0; rw=1; //读忙标志,忙则继续等待
do {en=0;en=1;_nop_();Bcc=P0;en=0;} while(a7==1); }
//*************************************************
void command(uchar a){ //向液晶里写入指令、控制字
en=0;rs=0;rw=0;en=1;P0=a;_nop_();en=0;wait();}
//*************************************************
void reset(void){ //液晶模块软件复位
en=0;rs=0;rw=0;en=1;P0=0x38;_nop_();en=0;delay(0x09);
en=0;rs=0;rw=0;en=1;P0=0x38;_nop_();en=0;delay(0x06);command(0x38);}
//置功能 (8位总线宽度、双行显示、5X7点阵显示)
//*************************************************
void lcdstart(void){ //液晶模块初始化
reset(); //液晶模块软件复位
command(0x38); //置功能 (总线宽度、单/双行显示、5X7或5X10显示)
command(0x06); //置输入模式(地址计数器自加减、画面左右移动)
command(0x0c); //显示、光标、光标闪烁的开关
command(0x01);} //清屏幕的显示
//*************************************************
void word_w(uchar s){ //向指定的显示存储器地址写入待显示的单个字符
en=0;rs=1;rw=0;en=1;P0=s;en=0;wait();} //写数据方式输出数据
//*************************************************
void display(s) uchar idata *s; //向指定的显示存储器地址写入待显示的字符串
{uchar i=0;while (s[i]!=0x00){en=0;rs=1;rw=0; //写数据方式
en=1;P0=s[i];en=0;wait();i++;_nop_();} } //输出数据
//*************************************************
main(){ uchar a,b;
lcdstart(); while(1){
command(0x80);display(uestc); //从液晶第一行开头显示UESTC 98141-2
command(0xc0);display(gongjun); //从液晶第二行开头显示gong jun Good!
delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);
command(0x80);a=0x30;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//1
command(0xc0);a=0x20;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//!
delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);
command(0x80);a=0x40;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//A
command(0xc0);a=0x50;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//Q
delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);
command(0x80);a=0x60;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//a
command(0xc0);a=0x70;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//q
delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);
command(0x80);display(uestc); //从液晶第一行开头显示UESTC 98141-2
command(0xc0);display(gongjun); //从液晶第二行开头显示gong jun Good!
delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);
command(0x80);a=0xa0;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//`
command(0xc0);a=0xb0;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//-
delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);
command(0x80);a=0xc0;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//=
command(0xc0);a=0xd0;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//"
delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);
command(0x80);a=0xe0;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//%
command(0xc0);a=0xf0;for(b=0;b<16;b++){word_w(a);a++;_nop_();}//^
delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);delay(0xff);
} }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -