⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd16x2.c

📁 该程序用来测试89C51与IDE硬盘的接口
💻 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 + -