STC89C51基础及项目第10天:LCD显示字符(非标协议外设)

这篇具有很好参考价值的文章主要介绍了STC89C51基础及项目第10天:LCD显示字符(非标协议外设)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 初识LCD1602(233.79)

非标协议外设

LCD1602显示

  • LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行)
    STC89C51基础及项目第10天:LCD显示字符(非标协议外设),单片机,嵌入式硬件
  • 引脚说明
    STC89C51基础及项目第10天:LCD显示字符(非标协议外设),单片机,嵌入式硬件
    • 第 1 脚: VSS 为电源地
    • 第 2 脚: VDD 接 5V 正电源
    • 第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。
    • 第 4 脚: RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
    • 第 5 脚: R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。
    • 第 6 脚: E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。
    • 第 7-14 脚 D0~D7 为 8 位双向数据线。
    • 第 15 脚: 背光源正极。
    • 第 16 脚: 背光源负极。
//和上官一号的接线
//(工作)电源
VSS -- GND
VDD -- 5V
//对比度
VO -- GND
//控制线
RS -- P1.0
R/W -- P1.1
E -- P1.4
//背光灯(电源)
BLA -- 5V
BLK -- GND
//数据(类似串口的SBUF)
D0到D7 -- P0.到P0.7

STC89C51基础及项目第10天:LCD显示字符(非标协议外设),单片机,嵌入式硬件

2. LCD在一个位置显示一个字母的逻辑(234.80)

开发逻辑

STC89C51基础及项目第10天:LCD显示字符(非标协议外设),单片机,嵌入式硬件

  • 在哪里显示
    • 例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H) +10000000B(80H)=11000000B(C0H)
      STC89C51基础及项目第10天:LCD显示字符(非标协议外设),单片机,嵌入式硬件
  • 显示什么(ASCII码,so代码时直接输入字符即可)
    STC89C51基础及项目第10天:LCD显示字符(非标协议外设),单片机,嵌入式硬件

3. LCD1602读写操作时序分析(235.81)

读操作时序

STC89C51基础及项目第10天:LCD显示字符(非标协议外设),单片机,嵌入式硬件

写操作时序

STC89C51基础及项目第10天:LCD显示字符(非标协议外设),单片机,嵌入式硬件

数序参数

STC89C51基础及项目第10天:LCD显示字符(非标协议外设),单片机,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-728018.html

4. 编程实现LCD1602显示字符C101(236.82)

  • 代码(16./LCD1602显示一个字符C)
#include "reg52.h"
#include "intrins.h"
/*
RS  -- P1.0
RW  -- P1.1 
E   -- P1.4*/
#define dataBuffer P0 //定义8位数据线,P0端口组
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;

void check_busy(){
	char tmp = 0x80;
	dataBuffer =0x80;
	
	while(tmp & 0x80){//1000 0000
		RS = 0; 
		RW = 1; //RS为低电平、R/W为高电平时可读忙信号
	
		EN = 0;
		_nop_();
		EN = 1;
		_nop_();
		_nop_();
		tmp = dataBuffer;//数据建立时间(读操作)tD时读数据
		EN = 0;
		_nop_();	
	}


}

void wirte_cmd(char cmd){
	check_busy();
	RS = 0; //低电平时为指令寄存器
	RW = 0; //全程低电平
	
	EN = 0;
	_nop_();//延迟(低电平+tR)的时间,so>=25ns(tR)即可,1us就足够
	dataBuffer = cmd;//把指令传给P0 //数据建立时间(写操作)tSP2时写数据
	_nop_();//最好在拉高之前延迟一会,因为还有一段tR的时间
	EN = 1;
	_nop_();//延迟一个机器周期(@11.0592MHz):1.085us即1085ns
	_nop_();//延迟(tPW+TF)的时间
	EN = 0;
	_nop_();//给低电平一点延迟
}
void wirte_data(char dataShow){
	check_busy();
	RS = 1; //高电平时为数据寄存器
	RW = 0; 
	
	EN = 0;
	_nop_();
	dataBuffer = dataShow;//把数据传给P0
	_nop_();
	EN = 1;
	_nop_();
	_nop_();
	EN = 0;
	_nop_();
}

void Delay15ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 27;
	j = 226;
	do
	{
		while (--j);
	} while (--i);
}
void Delay5ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 9;
	j = 244;
	do
	{
		while (--j);
	} while (--i);
}
void LCD1602_INIT(){
//(1)延时 15ms
	Delay15ms();
//(2)写指令 38H(不检测忙信号)
	wirte_cmd(0x38);
//(3)延时 5ms
	Delay5ms();
//(4)以后每次写指令,读/写数据操作均需要检测忙信号
//(5)写指令 38H:显示模式设置
	wirte_cmd(0x38);
//(6)写指令 08H:显示关闭
	wirte_cmd(0x08);
//(7)写指令 01H:显示清屏
	wirte_cmd(0x01);
//(8)写指令 06H:显示光标移动设置
	wirte_cmd(0x06);
//(9)写指令 0CH:显示开及光标设置
	wirte_cmd(0x0C);
}

void main(){
	char position = 0x80+0x05;
	char dataShow = 'C';
	LCD1602_INIT();
	wirte_cmd(position);
	wirte_data(dataShow);
}

5. 编程实现LCD1602显示一行(238.84)

  • 代码(17./LCD1602显示一行)
void showLine(char line,char list,char* string){
	switch(line){
		case 1:
			wirte_cmd(0x80+list);
			while(*string){
				wirte_data(*string);
				string++;
			}
			break;
		
		case 2:
			wirte_cmd(0x80+0x40+list);
			while(*string){
				wirte_data(*string);
				string++;
			}
			break;
	}
}

void main(){
	char position = 0x80+0x05;
	//char dataShow = 'C';
	LCD1602_INIT();
	showLine(1,5,"NO.1");
	showLine(2,0,"Jes is handsome");
}

到了这里,关于STC89C51基础及项目第10天:LCD显示字符(非标协议外设)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ST89C51单片机显示电路设计(Altium Designer 10)----绘制PCB原理图双层板】

    绝对不要坐等胜利的到来,集中起来的意志可以击穿顽石,好好看,好好学,正真的大师永远都怀着一颗血徒的心 ———易 集成库是AD 10推荐使用的标准库形式。这种库能够集中存放元件具有的各类模型,使得原本分散的资源整合在一起,极大提高了管理和使用的效率。用户

    2024年02月05日
    浏览(46)
  • STC89C52单片机LCD1602显示屏介绍与代码演示

    LCD1602显示屏介绍 引脚介绍 内部结构框图  存储器  DDRAM储存器地址  CGRAM与 CGROM的地址 时序介绍 LCD1602快捷指令  LCD1602指令操作流程: 字符、字符串的显示  各种进制的数字显示 在LCD1602上显示十进制数字 在LCD1602上显示十六进制数字 在LCD1602上显示二进制数字 LCD1602(Liq

    2024年02月08日
    浏览(41)
  • proteus 中89c51芯片如何显示vcc和gnd

    引脚介绍:一共40个引脚,32个并行口。 电源引脚 VCC(40口) +5v直流电 VSS (20口)接地 复位引脚 RST(9口) 复位输入信号 时钟引脚 XTAL1(19口) 晶振输入口 XTAL2 (18口) 晶振输入口 控制引脚 ALE(30口)地址锁存允许信号 PSEN (29口) 外部存储器选通信号 EA(31口)EA引脚表示

    2024年02月07日
    浏览(33)
  • 基于AT89C51单片机的LED点阵显示屏设计

    点击链接获取Keil源码与Project Backups仿真图: [[https://download.csdn.net/download/qq_64505944/88637464?spm=1001.2014.3001.5503]] **[源码获取] B 源码+仿真图+课程设计+50 工程实训(三)课题设计 LED点阵显示屏设计 LED点阵显示屏通过编程控制可以显示中英文字符、图形及视频动态图形,广泛用于指

    2024年02月02日
    浏览(44)
  • 初学51单片机(STC89C52)一个倒计时显示器和大家分享

      想要实现倒计时显示器,首先得确定从哪个时间开始倒计时,这就需要写出一个计数的程序来,通过按键来控制需要的数,从而开始倒计时。我的开发板上用的Key2,Key3,Key4,Key5这四个键,分别对应着加1,减1,乘2,开始计时四个功能。   通过加一,减一,乘2三个操作,

    2024年02月10日
    浏览(41)
  • 【STC89C52】学习51单片机的必备电子电路知识基础

    电子电路是学习51单片机的基础, 如果能把以下几个模块弄清楚学习51单片机就不成问题啦。 目录 1.电平 2.单片机IO口 3.电阻 4.电容  5.电路原理图 ​编辑 6.单片机最小系统结构  7.单片机工作的基本时序 单片机是一种数字集成芯片,数字电路中只有高电平和低电平。 单片

    2023年04月26日
    浏览(46)
  • 51单片机(At89C51)组成,引脚介绍

    一,单片机的发展史 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/0口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路

    2023年04月13日
    浏览(41)
  • 基于 AT89C51 单片机的数字时钟设计

    目录 1.设计目的、作用 2.设计要求 3.设计的具体实现 3.1 设计原理 3.2 硬件系统设计         3.2.1 AT89C51 单片机原理 3.2.2 晶振电路设计 3.2.3 复位电路设计 3.2.4 LED 数码管显示 3.3 系统实现 3.3.1 系统仿真与调试 3.3.2 演示结果 4.总结 附录 附录 1 附录 2 (1 )掌握 51 系列单片机的

    2024年02月01日
    浏览(40)
  • 基于AT89C51单片机的电子时钟设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87695258?spm=1001.2014.3001.5503 源码获取 主要内容: 1.设计出电子数字钟的电路,并用protus进行仿真画出对应的电路图 2.设计出电子数字钟的源程序,并用Keil进行编辑生成HEX文件 3.在protus中进行测试。

    2024年02月09日
    浏览(43)
  • 51单片机(二)8051内核及STC89C52介绍

    我们现在经常使用的STC89C52RC单片机就是基于8051内核的,它是深圳宏晶科技生产的一款单片机,它与MCS-51兼容,下面开始介绍STC89C52RC单片机。 1. STC89C52RC的兼容型号         STC89C52RC兼容 STC89C51RC,STCLE51RC,STC89C53RC,STC89LE52RC等。 以下是完整型号列表: 我们平时用的stc89c52已经能

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包