📄 yejing.c
字号:
#include "reg51.h"
#define uchar unsigned char
#define LCD_Data P0 //DO-D7数据总线
#define Busy 0x80 //用于检测LCM状态字中的Busy标识
sbit LCD_RS=P2^0; //定义引脚
sbit LCD_RW=P2^1;
sbit LCD_E=P2^2;
//sbit LCD_PS=P2^3;
uchar show[]="12864液晶测试程序0123456789ABCDEFGHIJKLMNOPQ";
/////////延时程序/////////
void delay(second) //second=1时,延时5ms子程序
unsigned char second;
{
unsigned char i,j,k;
for(i=second;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--) ;
}
////////读状态////////
void ReadStatusLCD(void)
{
LCD_E=0; //使能 取消选择
LCD_Data=0xFF;
LCD_RS=0; //instruction
LCD_RW=1; //read
LCD_E=1; //使能 选择
while (LCD_Data&0x80); //检测忙信号
LCD_E=0;
}
////////写指令////////
void WriteCommandLCD(uchar Command,BuysC) //BuysC为0时忽略忙检测
{
LCD_E=0;
if (BuysC) ReadStatusLCD(); //根据需要检测忙
LCD_RS=0;
LCD_RW=0;
LCD_Data=Command;
LCD_E=1;
LCD_E=0;
}
////////写数据////////
void WriteDataLCD(uchar Data,BuysC)
{
LCD_E=0;
if (BuysC) ReadStatusLCD(); //根据需要检测忙
LCD_RS=1;
LCD_RW=0;
LCD_Data=Data;
LCD_E=1;
LCD_E=0;
}
void LCDInit(void) //LCD初始化
{
WriteCommandLCD(0x01,1); //清除显示
delay(1);
WriteCommandLCD(0x03,1); //地址归位
delay(1);
WriteCommandLCD(0x0f,1); //开显示
//WriteCommandLCD(0x1c,1); //游标右移
WriteCommandLCD(0x30,1); //基本指令集动作
}
//显示一个汉字
void Display(uchar show[])
{
uchar *p,i=0;
p=show;
WriteCommandLCD(0x80,1);
while(*p!='\0')
{
WriteDataLCD(*p++,1);
i++;
if(i==16) WriteCommandLCD(0x90,1);
else if(i==32) WriteCommandLCD(0x88,1);
else if(i==48) WriteCommandLCD(0x98,1);
}
}
void main(void)
{
//LCD_PS=1;
delay(8); //启动等待,等LCM讲入工作状态
delay(8); //启动等待,等LCM讲入工作状态
LCDInit(); //LCM初始化
Display(show);
delay(250);
WriteCommandLCD(0xa7,1);
delay(250);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -