STC8H8K64U——LCD1602

2023-11-24 19:59
文章标签 lcd1602 stc8h8k64u

本文主要是介绍STC8H8K64U——LCD1602,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LCD的读写操作

RSR/WED0~D7
读状态011输出状态字
写命令00正脉冲输出无
读数据111输出数据
写数据10正脉冲输出无

LCD1602的控制命令表

指令码描述
01H清屏,向DDRAM写入空格码,光标返回显示屏左上角
02H光标归位,光标返回显示屏左上角
06H读或写一个字符后,光标右移,屏幕不动
04H读或写一个字符后,光标左移,屏幕不动
07H读或写一个字符后,光标和屏幕向右移动一个字符
05H读或写一个字符后,光标和屏幕向左移动一个字符
08H关显示,关光标,关闪烁
0EH开显示,开光标,关闪烁
0DH开显示,关光标,开闪烁
0CH开显示,关光标,关闪烁
0FH开显示,开光标,开闪烁
10H每输入该指令,光标左移一个字符
14H每输入该指令,光标右移一个字符
18H每输入该指令,画面左移一个字符
1CH每输入该指令,画面右移一个字符
30H单行显示,5X8点阵,8位总线
34H单行显示,5X11点阵,8位总线
38H两行显示,5X8点阵,8位总线
3CH两行显示,5X11点阵,8位总线

命令 7:CGRAM地址设置
命令格式:04H+地址码,该命令决定自定义字符的存储地址。
命令 8:DDRAM地址设置
命令格式:08H+地址码,该命令决定字符在LCD上的显示位置。
命令 9:读“忙”或状态字
BF = 1:LCD忙,不能接收命令或数据
BF = 0:LCD不忙,可以接收命令或数据

main.c

#include "lcd1602.h"unsigned char code temp1[] = {0x01,0x1F,0x11,0x1F,0x11,0x1F,0x01,0x01,0x00,0x1C,0x04,0x1C,0x04,0x1D,0x01,0x1E,    //电(占两个字符)0x07,0x04,0x04,0x04,0x05,0x04,0x08,0x13,0x1e,0x00,0x10,0x10,0x1C,0x10,0x14,0x1F};   //压(占两个字符)unsigned char Thousand;
unsigned char Hundred;
unsigned char Ten;
unsigned char One;	
unsigned int temp = 8421;void main(void)
{Thousand = temp/1000;   /*千位*/Hundred = temp/100%10;  /*百位*/	Ten = temp/10%10;       /*十位*/	One = temp%10;          /*个位*/
/*定时器T0延时,中断允许*/EA = 1;ET0 = 1;LCD1602_Init();LCD1602_WriteChar(1,0x00,'A'); LCD1602_WriteChar(1,0x01,0x30|Thousand); LCD1602_WriteChar(1,0x02,0x30|Hundred); LCD1602_WriteChar(1,0x03,0x30|Ten); LCD1602_WriteChar(1,0x04,0x30|One); 	LCD1602_WriteString(1,0x05,"Hello Word");
/*存储自定义字符*/	LCD1602_W(0x00,4,temp1);  
/*显示自定义字符*/	LCD1602_WriteChar(2,0x00,0x00); LCD1602_WriteChar(2,0x01,0x01); LCD1602_WriteChar(2,0x02,0x02); LCD1602_WriteChar(2,0x03,0x03); 		while(1);
}

lcd1602.h

#ifndef LCD1602_H
#define LCD1602_H#include <STC8H.H>
#include "delay.h"#define unchar unsigned char
#define unint unsigned int#define BF  0x80  //BF == 1为“忙”#define OUT P0    //数据线sbit RS = P2^6;   //寄存器选择;RS = 1 数据寄存器,RS = 0 命令、状态寄存器 
sbit R_W = P2^5;  //读、写操作选择;R_W = 1 读,R_W = 0 写 
sbit E = P2^7;    //使能信号void GPIO_Init(void);
void LCD1602_Init(void);                				//LCD1602 初始化void LCD1602_WriteCommand(unchar command); 				//写命令	
void LCD1602_WriteData(unchar Data);       			    //写数据	void LCD1602_WriteAddr(unchar x,unchar y); 		        //指定位置,第一行:00H到27H,第二行:40H到67H
void LCD1602_WriteString(unchar x,unchar y,unchar *s);  //指定位置,写入字符串
void LCD1602_WriteChar(unchar x,unchar y,unchar c);     //指定位置,写入字符void LCD1602_CheckBusy(void);              				//检查“忙”
void LCD1602_Write_0x38(void);                          //写命令 0x38/*向CGRAM写入自定义字符(5*8点阵),最多8个字符。先写起始地址:0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38再写数据表,至少8个数据参数:addr:起始地址n:写多少个字符*s:存储数据的数组 要显示自定义的字符,需访问CGROM,地址0x00~0x07
*/
void LCD1602_W(unchar addr,unchar n,unchar *s);#endif

lcd1602.c

#include "lcd1602.h"void GPIO_Init(void)
{
/*准双向口模式*/	P0M0 = 0x00;P0M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;	
}void LCD1602_Init(void)     //LCD1602 初始化
{GPIO_Init();LCD1602_Write_0x38();	delay_ms(5);	LCD1602_Write_0x38();	delay_ms(5);	LCD1602_Write_0x38();	delay_ms(5);		LCD1602_WriteCommand(0x38);  //8位数据线,两行显示,5*7点阵LCD1602_WriteCommand(0x01);  //清屏	delay_ms(5);LCD1602_WriteCommand(0x06);  //光标向右移动,AC自动加一LCD1602_WriteCommand(0x0c);  //显示开,光标关,闪烁关  
}void LCD1602_WriteCommand(unchar command) //写命令
{LCD1602_CheckBusy();RS = 0;   //选择命令寄存器R_W = 0;  //写 OUT = command;E = 1;delay_us(1);E = 0;
//	delay_us(50);	
}void LCD1602_WriteData(unchar Data) //写数据
{LCD1602_CheckBusy();RS = 1;  //选择数据寄存器  R_W = 0; //写OUT = Data;	E = 1;delay_us(1);E = 0;
//	delay_us(50);	
}void LCD1602_WriteAddr(unchar x,unchar y)   //指定位置,第一行:00H到27H,第二行:40H到67H
{if(x==1){LCD1602_WriteCommand(y|0x80);}else if(x==2){LCD1602_WriteCommand(y|0x80|0x40);}	
}void LCD1602_WriteChar(unchar x,unchar y,unchar c)     //指定位置,写入字符
{LCD1602_WriteAddr(x, y);LCD1602_WriteData(c); 
}void LCD1602_WriteString(unchar x,unchar y,unchar *s)  //指定位置,写入字符串
{LCD1602_WriteAddr(x, y);while(*s != '\0'){LCD1602_WriteData(*s);s++;}
}void LCD1602_CheckBusy(void) //检查“忙”
{unchar temp;OUT = 0xff;RS = 0;      //选择状态寄存器R_W = 1;     //读do{	E = 1;       temp = OUT; //读取IO口数据}while(temp&BF); //BF == 1为“忙”E = 0;    
}
void LCD1602_Write_0x38(void) 
{	E = 0;RS = 0;   //选择命令寄存器R_W = 0;  //写 OUT = 0x38;E = 1;delay_us(1);E = 0;
}void LCD1602_W(unchar addr,unchar n,unchar *s)
{unsigned char	i;	LCD1602_WriteCommand(0x40|addr);for(i=0;i<(8*n);i++){LCD1602_WriteData(*s);s++;		}	
}

结果显示

这篇关于STC8H8K64U——LCD1602的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/422472

相关文章

逗比学树莓派之lcd1602显示

通过树莓派GPIO连接LCD1602,使用wiringPi库和其附带的LCD库进行显示树莓派的CPU温度和内存使用情况。 1.首先按下图连接好硬件电路图: 2.然后在终端使用命令 sudo apt-get install git 安装版本管理软件Git 。

51单片机STC89C52RC——5.1 LCD1602液晶显示屏

目录 目的 一,STC单片机模块 二,LCD1602 2.1 模块简介 2.2 针脚 2.3 DDRAM地址与显示器对应关系 2.4 标准字库表 2.5 常用指令 2.6 读写操作 三,创建Keil项目 四,代码  五,代码编译、下载到51单片机 六,效果 目的 将LCD1602做成一个调试显示器使用。实现以下功能 LCD_Init();

C语言 | 基于MPU605(六轴传感器)的I2C实现LCD1602显示(代码类)

博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 基于MPU605(六轴传感器)的I2C实现LCD1602显示: #include <REG52.H>#include <math.h>    //Keil library  #include <stdio.h>   //Kei

【TB作品】MSP430G2533,读取dht11,显示到lcd1602显示屏,串口发送到电脑

功能 读取dht11,显示到lcd1602显示屏,串口发送到电脑。 部分程序 void main(void){char disp[20];char count = 0;WDTCTL = WDTPW + WDTHOLD; // Stop WDTP1DIR = 0Xff;P1SEL = 0X00;P1SEL2 = 0X00;P2DIR = 0Xff;P2SEL

基于51单片机简单时钟设计—LCD1602显示可调时钟

基于51单片机简单时钟设计 (仿真+程序) 功能介绍 具体功能: 1.由51单片机主控,LCD1602显示年、月、日、时、分、秒; 2.运行的初始时间可以在程序中修改; 3.运行后三个按键可以修改时间; ​演示视频: 基于51单片机简单时钟设计—LCD1602显示可调时钟  添加图片注释,不超过 140 字(可选) 硬件设计 使用元器件:

I2C LCD1602液晶显示屏

前言 本文实现在 LCD1602显示屏的使用。 显示屏使用带I2C转接板的,如下图所示。 并且会做一些有趣的显示方式。 效果预览 材料准备 材料数量价格Arduino nuo118杜邦线411602A显示屏110 依赖库下载 本文使用都库在 arduino ide 中搜索 LiquidCrystal_I2C 即可找到。 注意作者,别下载错! 接线 1602AArd

单片机LCD1602显示电子时钟设计

基于52单片机电子时钟的设计 摘要 本次设计的多功能时钟系统采用STC89C52单片机为核心器件,利用其定时器/计数器定时和记数的原理,结合液晶显示电路、时钟芯片DS1302电路、电源电路以及按键电路来设计计时器。将软硬件有机地结合起来,使得系统能够实现液晶显示,显示有年、月、日、时、分、秒以及星期,还可以设置闹钟和整点报时。其中软件系统采用单片机汇编语言编写程序,包括显示程序、闹钟程序、中断、

51单片机GPS+sim800c GSM定位短信LCD1602液晶显示 原理图+PCB+源码

目录 1、实物图 2、原理图  ​3、PCB​编辑 4、程序 资料下载地址:51单片机GPS+sim800c GSM定位短信LCD1602液晶显示 原理图+PCB+源码 1、实物图 2、原理图   3、PCB 4、程序 #include "common.h"#include "uart.h"#include "gps.h"#include "gsm.h"#includ

proteus+stm32+CubeMX+dht11+lcd1602

浅浅记录下过程遇到的问题🤡🤡🤡 1 供电网配置错误(加上就好了 新起个名也会出这个 / 电源不起名 不创建估计项目也会)没zet6的 proteus 里 固件库 账号注册半天没成 就用的stm32F103R6的然后发现单片机不输出高低电平 proteus里 设置晶振就好了 2 想用原子dht11代码 改个启动文件 不行 变量太多 不知道问题会出在哪启动文件(包含中断服务函数

STC8H8K64U I2C主机模式相关寄存器

STC8H8K64U I2C主机模式相关寄存器 STC8H8K64U-TSSOP20 I2CCFG I2C配置寄存器 I2CMSCR I2C主机控制寄存器 I2CMSST I2C主机状态寄存器 I2CMSAUX I2C主机辅助控制寄存器 I2CTXD I2C数据发送寄存器 I2CRXD I2C数据接收寄存器 I2CCFG I2C配置寄存器 B7=ENI2C ENI2C:I2C 功能使能控