|
#include "lcd.h" //--------------------------------------------------------------------- //函数:判忙函数 //功能:判断液晶是否忙碌 void busy() { uchar sta; P0= 0xFF; //P0初始化 RS = 0; //选择指令寄存器 RW = 1; //读模式 do { EN = 1; _nop_(); sta = P0; //读取状态字 EN = 0; //当E端由高电平跳变成低电平时,液晶模块执行命令 } while (sta & 0x80); //bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止 } //--------------------------------------------------------------------- //函数:写命令函数 //功能:向液晶写入一字节命令(8位命令), cmd-待写入命令值 void LCD_Write_Com(unsigned char cmd) { busy(); //判断液晶是否忙碌 RS = 0; //选择指令寄存器 RW = 0; //写模式 P0 = cmd;//把数据给P0,即写入指令和地址 EN = 1; _nop_();//短暂延时1us _nop_();//短暂延时1us EN = 0; //当E端由高电平跳变成低电平时,液晶模块执行命令 } //--------------------------------------------------------------------- //函数:写数据函数 //功能:向液晶写入一字节数据(8位数据), dat-待写入数据值 void LCD_Write_Data(unsigned char dat) { busy(); //判断液晶是否忙碌 RS = 1; //选择数据寄存器 RW = 0; //写模式 P0= dat;//把数据给P0 EN = 1; _nop_();//短暂延时1us _nop_();//短暂延时1us EN = 0; //当E端由高电平跳变成低电平时,液晶模块执行命令 } //--------------------------------------------------------------------- //函数:初始化液晶函数 //功能:初始化液晶,并显示启动界面 void LCD_Init() { LCD_Write_Com(0x38); //16*2 显示, 5*7 点阵, 8 位数据传送 LCD_Write_Com(0x0C); //显示器开,光标关闭 LCD_Write_Com(0x06); //文字不动,地址自动+1 LCD_Write_Com(0x01); //清屏 } //--------------------------------------------------------------------- /*函数:写入字符函数*/ //功能:设置显示 DDRAM 起始地址,亦即光标位置, (x,y)-对应屏幕上的字符坐标 void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) //由输入的屏幕坐标计算显示 DDRAM 的地址 { LCD_Write_Com(0x80 + x); //第一行字符地址从 0x80 起始 } else { LCD_Write_Com(0xC0 + x); //第二行字符地址从 0xc0起始 } LCD_Write_Data( Data); //写数据-设置 DDRAM 地址 } /*函数:写入字符串函数*/ //可参考网上的 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { while (*s) //先取 s 指向的数据,然后s自加 1,指向下一个待写字符 { LCD_Write_Char(x,y,*s); s++; x++; } } |
lkc8210 发表于 2022-4-7 21:14 #ifndef __LCD_H_ #define __LCD_H_ /********************************** 包含头文件 **********************************/ #include <reg52.h> #include "intrins.h" //---重定义关键词---// #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif /********************************** PIN口定义 **********************************/ sbit EN = P2^7; sbit RW = P2^5; sbit RS = P2^6; /********************************** 函数声明 **********************************/ void busy();//忙检测函数 /*LCD1602写入8位命令子函数*/ void LCD_Write_Com(unsigned char cmd); /*LCD1602写入8位数据子函数*/ void LCD_Write_Data(unsigned char dat); /*LCD1602初始化子程序*/ void LCD_Init(void); void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data); void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s); #endif #ifndef __DELAY_H__ #define __DELAY_H__ void DelayUs2x(unsigned char t); void DelayMs(unsigned char t); #endif |
lj2443454061 发表于 2022-4-7 19:53 我又沒有lcd.h和delay.h |
lkc8210 发表于 2022-4-6 23:09 还是不能显示数据,还要其他的方法吗 |