标题:
单片机控制1602液晶显示电路图+程序
[打印本页]
作者:
大椰汁粉粉粉
时间:
2019-5-14 16:35
标题:
单片机控制1602液晶显示电路图+程序
利用51单片机控制lcd1602是非常普遍的,在此我将原理图和程序分享出来,供大家一起学习
这个程序实现的将超声波模块所检测到的距离和温度传感器接收到的温度显示到lcd上,只是一个参考
大家想显示其他的东西,原理图可以照着用,但是程序可能就要进行修改了
电路原理图如下:
1.png
(66.08 KB, 下载次数: 54)
下载附件
原理图
2019-5-14 16:33 上传
单片机源程序如下:
#include <reg52.h>
#define uchar unsigned char // 以后unsigned char就可以用uchar代替
#define uint unsigned int // 以后unsigned int 就可以用uint 代替
sbit LcdRs_P = P1^2; // 1602液晶的RS管脚
sbit LcdRw_P = P1^3; // 1602液晶的RW管脚
sbit LcdEn_P = P1^4; // 1602液晶的EN管脚
/*********************************************************/
// 毫秒级的延时函数,time是要延时的毫秒数
/*********************************************************/
void DelayMs(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=112;j>0;j--);
}
/*********************************************************/
// 1602液晶写命令函数,cmd就是要写入的命令
/*********************************************************/
void LcdWriteCmd(uchar cmd)
{
LcdRs_P = 0;
LcdRw_P = 0;
LcdEn_P = 0;
P0=cmd;
DelayMs(1);
LcdEn_P = 1;
DelayMs(1);
LcdEn_P = 0;
}
/*********************************************************/
// 1602液晶写数据函数,dat就是要写入的命令
/*********************************************************/
void LcdWriteData(uchar dat)
{
LcdRs_P = 1;
LcdRw_P = 0;
LcdEn_P = 0;
P0=dat;
DelayMs(1);
LcdEn_P = 1;
DelayMs(1);
LcdEn_P = 0;
}
/*********************************************************/
// 1602液晶初始化函数
/*********************************************************/
void LcdInit()
{
LcdWriteCmd(0x38); // 16*2显示,5*7点阵,8位数据口
LcdWriteCmd(0x0C); // 开显示,不显示光标
LcdWriteCmd(0x06); // 地址加1,当写入数据后光标右移
LcdWriteCmd(0x01); // 清屏
}
/*********************************************************/
// 液晶光标定位函数
/*********************************************************/
void LcdGotoXY(uchar line,uchar column)
{
// 第一行
if(line==0)
LcdWriteCmd(0x80+column);
// 第二行
if(line==1)
LcdWriteCmd(0x80+0x40+column);
}
/*********************************************************/
// 液晶输出字符串函数
/*********************************************************/
void LcdPrintStr(uchar *str)
{
while(*str!='\0')
LcdWriteData(*str++);
}
///*********************************************************/
//// 液晶输出数字
///*********************************************************/
//void LcdPrintNum(uchar num)
//{
// LcdWriteData(num/100+48); // 百位
// LcdWriteData(num%100/10+48); // 十位
// LcdWriteData(num%10+48); // 个位
//}
/*********************************************************/
// 主函数
/*********************************************************/
void main()
{
char num=78;
// 1、首先,执行液晶初始化
LcdInit(); // 液晶初始化
// 2、定位,确定行(0-1)和列(0-15)的数字
LcdGotoXY(0,3);
// 3.1 如果显示单个字符
LcdWriteData('Y');
// 3.2 如果显示一串字符
LcdPrintStr("hello!");
// 3.3 显示一个采集的数字
LcdWriteData(num/10+0x30);
LcdWriteData(num%10+0x30);
while(1);
}
复制代码
作者:
280570255
时间:
2019-5-16 09:06
不错,又长了一点见识.
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1