当前位置: 首页 > article >正文

51单片机LCD1602程序

学习LCD1602过程的一个入门程序,在proteus8.3验证通过

/* Main.c file generated by New Project wizard** Created:   周三 6月 28 2017* Processor: AT89C52* Compiler:  Keil for 8051*/#include <stdio.h>
#include <reg52.h>
#include <string.h>
typedef unsigned char uchar;
typedef unsigned int uint;sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
sbit BTN = P3^3;
//判断液晶忙,如果忙则等待,因为1602也是一个CPU,要处理原来的指令,如果不判断会导致数据紊乱
void Read_Busy() //读写检查函数
{uchar busy;P0 = 0xff;   //P0口作为数据端 RS = 0;          RW = 1;             //读状态的操作时序为 RS=L,RW=H,E=H,D0~D7输出状态字do{ EN = 1;busy = P0; EN = 0;}while(busy & 0x80); //状态字为busy(8位2进制数)的最高位,//若为1则禁止读写,为0则允许读写,该状态用busy&0x80的结果表示
}void Write_Cmd(uchar cmd)  //写指令函数
{Read_Busy();//对控制器每次进行读写操作都要判断是否正忙,即要进行读写检测 RS = 0; RW = 0;P0 = cmd;   //写入十六进制形式的指令(command) EN = 1;     //写指令的操作时序:RS=0,RW=0,EN=高脉冲 EN = 0;         //获得高脉冲后使能端重新置零
}void Write_Dat(uchar dat)  //写入数据
{Read_Busy(); //写入数据前进行读写检测 RS = 1; RW = 0;P0 = dat;    //P0口写入数据 EN = 1;          //写数据操作时序:RS=0,RW=0,EN=高脉冲 EN = 0;          //获得高脉冲后使能端重新置零
}
void LCD1602_Init()
{Write_Cmd(0x38);//设置16*2显示Write_Cmd(0x0f);//开显示 显示光标,光标闪烁Write_Cmd(0x01);//清屏Write_Cmd(0x06);//地址指针移位命令Write_Cmd(0x80 | 0x00);//显示地址,0x80是第一行的的首地址。0x80|0x06表示数据从第一行第7个字符位置开始显示
}void PrintStr(char *str)
{char i,len;len = strlen(str); // 获取字符串长度for(i=0;i<len;i++){Write_Dat(*str);str++;}
}
void main()
{char *str="hello123";LCD1602_Init();  // 初始化LCD1602Write_Dat('H');Write_Dat('e');Write_Dat('l');Write_Dat('l');Write_Dat('o');Write_Dat(' ');Write_Dat(' ');Write_Dat(' ');Write_Dat('2');Write_Cmd(0x80 |0x40| 0x01);    // 显示第二行
//  显示地址,0x80|0x40表示第二行,0x40是第二行的的首地址。也可以写成0x80+0x40或者0xc0,
//      0xc0|0x0c表示数据从第一行第13个字符位置开始显示
//  由于1602一行只显示16个字符,所以从第十三个字符位置显示的话只能显示4位PrintStr(str);while(1);
}

实验结果如下:
这里写图片描述

参考文章:http://blog.csdn.net/u013151320/article/details/46663167


2017/6/28更正

更正main函数显示LCD第二行的程序,之前初始化错了

添加PrintStr(char *str)函数,输出字符串
使用到了strlen函数,记得头文件要include “string.h”

void PrintStr(char *str)
{char i,len;len = strlen(str); // 获取字符串长度for(i=0;i<len;i++){Write_Dat(*str);str++;}
}
http://www.lryc.cn/news/2417526.html

相关文章:

  • 彻底放弃IIS 让Apache也支持ASP.NET
  • c语言必背100代码,C语言代码大全(c语言必背项目代码)
  • Git入门及常用命令
  • webgis开发之mapbox(1)
  • 分享26个ASP江湖论坛源码,总有一款适合您
  • 代码埋点、可视化埋点、无埋点几种数据埋点方案的分析报告
  • H5 画布解决跨域问题,画布保存为图片显示在页面上
  • 五分钟免费获得自己的永久域名,免费!永久!
  • 如何用Moco-runner搭建测试服务器?
  • 张柏芝现任丈夫是孙东海
  • OpenCV轻松入门(七)——HSV颜色模型图像特效案例:判断白天夜晚抠图颜色过滤替换背景图
  • 车辆管理系统的设计与实现-附源码031034
  • Android中APK安装过程及原理解析
  • Visual Studio Code 如何编写运行 C、C++ 程序?(高赞回答)
  • 摄影常用词:光圈、快门、曝光、底片、ISO、焦距、景深
  • Flink系列四:Flink中并行度、算子链、任务槽详解
  • 【艾琪出品】《计算机应用基础》【试题汇总1】
  • CTR(Click-Through-Rate)即点击通过率
  • 代码随想录学习记录——字符串篇
  • PLSQL_性能优化系列03_Oracle Parallel并发处理
  • 深入浅出达梦SQL(基础篇)
  • 李宏毅《机器学习》| 神经网络训练不起来怎么办(上)
  • C++ 应用软件开发从入门到实战详解
  • 使用Python编写圣诞树
  • 开源虚拟化管理平台Ovirt简介和配置环境搭建
  • 获取同局域网其他用户数据_一些无线局域网的专业名词解释
  • c++ png图片合成_前端小知识 | 合理选择 PNG, JPG, SVG 图片格式
  • 因找不到d3dcompiler_42.dll文件导致游戏软件无法运行问题
  • 吴恩达机器学习系列课程--个人笔记
  • 【DDoS】钟南山:对抗DDoS的5大手段