本人学习单片机有段时间了,前段时间在网上淘了一个最小系统板,和LCD1602A液晶显示屏。折腾了半天不知道什么原因始终无显示,检查连接线没问题, 最小系统板也没问题。后来我分析可能是液晶显示屏是坏的,于是又在网上淘了两片,6元钱一片。回来一测试依旧没有显示。问题在哪呢?把代码发给朋友看,朋友检查了也没有问题,始终就是第一排黑色方块。今天闲来没事又拿出来摆弄,结果打开电源居然有显示了,但是关闭电源后再开又没有了,我就反复开关电源了一百多次依旧没有反应,后来我想既然有一次有显示代码就应该没有问题。那就是硬件了。于是花了两个小时自己焊接了一个最小系统板,一次成功。由于没有画图直接焊接的,现在把代买与大家分享。大虾请绕行。
制作出来实物图如下:
单片机源程序如下:
- #include <STC89C5xRC.H>
- #define uchar unsigned char
- #define uint unsigned int
- #define LCD1602_DB P0
- sbit LCD1602_RS = P2^0; //数据/命令选择端
- sbit LCD1602_RW = P2^1; //读写选择端
- sbit LCD1602_EN = P2^2; //使能信号
- void InitLcd1602(); //初始化液晶函数
- void Lcd1602Show(uchar x,uchar y,uchar *str); //显示数据函数
- /************************************这是主函数******************************************/
- void main()
- {
- uchar str[] = "This is demo!";
- InitLcd1602(); //初始化液晶
- Lcd1602Show(2,0,str); //指定坐标显示字符串
- Lcd1602Show(0,1,"WeChat:6731663"); //指定坐标显示字符串
- while(1);
- }
- /***********************************LCD遇忙等待函数****************************************/
- void LcdWaitReady()
- {
- uchar sta;
- LCD1602_DB = 0xFF;
- LCD1602_RS = 0;
- LCD1602_RW = 1;
- do{
- LCD1602_EN = 1;
- sta = LCD1602_DB;
- LCD1602_EN = 0;
- }while(sta & 0x80); //数据端口最高位一直为高电平时它会一直等待。
- }
- /***********************************液晶写指令函数*****************************************/
- void LCD1602WriteCMD(uchar cmd)
- {
- LcdWaitReady(); //LCD遇忙等待
- LCD1602_RS = 0;
- LCD1602_RW = 0;
- LCD1602_DB = cmd;
- LCD1602_EN = 1; //使能引脚高脉冲
- LCD1602_EN = 0;
- }
- /***********************************初始化液晶函数*****************************************/
- void InitLcd1602()
- {
- LCD1602WriteCMD(0x38); //显示模式设置:16*2显示,5*7点阵,8位数据接口
- LCD1602WriteCMD(0x0C); //显示开关及光标设置:显示开,光标关。
- LCD1602WriteCMD(0x06); //光标+1,并且整屏不动
- LCD1602WriteCMD(0x01); //显示清零,所有数据清零。
- }
- /**********************************液晶当前坐标函数****************************************/
- void LcdSetCursor(uchar x,uchar y)
- {
- uchar addr;
- if(y==0)
- {
- addr = 0x00 + x;
- }
- else
- {
- addr = 0x40 + x;
- }
- LCD1602WriteCMD(addr | 0x80); //LCD数据指针必须是0x80开头
- }
- /***********************************液晶写数据函数*****************************************/
- void LcdWriteDate(uchar dat)
- {
- LcdWaitReady(); //遇忙等待
- LCD1602_RS = 1;
- LCD1602_RW = 0;
- LCD1602_DB = dat;
- LCD1602_EN = 1; //使能引脚高脉冲
- LCD1602_EN = 0;
- }
- /***********************************液晶显示函数*******************************************/
- void Lcd1602Show(uchar x,uchar y,uchar *str)
- {
- LcdSetCursor(x,y); //LCD当前坐标函数
- while(*str != '\0') //字符串没有结束时执行
- {
- LcdWriteDate(*str++); //传递完STR数据在对地址加加
-
- }
- }
复制代码
所有资料51hei提供下载:
LCD1602-1.rar
(25.52 KB, 下载次数: 151)
|