1602A的基本描述[通俗易懂]

1602A的基本描述[通俗易懂]LCD1602的主控芯片是HD44780或者其它兼容芯片。与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD1602要丰富得多,除了普通字符外,还可以显示点阵图案,带有汉字库的还可以显示汉字,它的并行驱动方式与LCD1602相差无几,所以,在这里花点时间是值得的。//File1#ifndef__ZHANGTYPE_H__#define__ZHANGTYPE_H__#defineuint8unsignedchar#defineuin…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
LCD1602的主控芯片是HD44780或者其它兼容芯片。
与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD1602要丰富得多,除了普通字符外,还可以显示点阵图案,带有汉字库的还可以显示汉字,它的并行驱动方式与LCD1602相差无几,所以,在这里花点时间是值得的。

在这里插入图片描述

//File1
#ifndef __ZHANGTYPE_H__
#define __ZHANGTYPE_H__
#define uint8 unsigned char
#define uint16 unsigned short int
#define uint32 unsigned long int
#define int8 signed char
#define int16 signed short int
#define int32 signed long int
#define uint64 unsigned long long int
#define int64 signed long long int
#endif
//File2
#ifndef __FUN_H__
#define __FUN_H__
#include "ZhangType.h"
#include
void Delay(uint16 time);
#endif
//File3
#include "fun.h"
void Delay(uint16 time)
{ 

while(time--);
}
//File4
#ifndef __1602_H__
#define __1602_H__
#include
#include "ZhangType.h" //变量类型
#include "fun.h" //常用函数 
#define SETMODE 0x38 //16*2显示,5*7点阵,8位数据接口
#define DISOPEN 0x0C //显示开,不显示光标,光标不闪烁
#define DISMODE 0x06 //读写字符后地址加1,屏显不移动
#define SETADDR 0x80 //设置数据地址指针初始值
#define CLEAR 0x01 //清屏,数据指针清零
#define RET 0x02 //回车,数据指针清零
#define PORT P2 //I/O口
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
void Init1602(void);  //初始化1602
void Write1602_Com(uint8 com);  //写命令
void Write1602_Dat(uint8 dat);  //写数据
void CheckBusy(void);  //检查忙
void Write1602_One_Dat(uint8 X,uint8 Y,uint8 dat);
//写一个数据
void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf);
//写一个数据串
#endif//
//File5
#include "1602.h"
void Write1602_Com(uint8 com)
{ 

E=0;
RS=0;  //命令
Delay(50);  //延时
RW=0;  //写
Delay(50);
PORT=com;  //端口赋值
Delay(50);
E=1;  //高脉冲
Delay(50);
E=0;
}
void Write1602_Dat(uint8 dat)
{ 

E=0;
RS=1;  //数据
Delay(50);  //延时
RW=0;  //写
Delay(50);
PORT=dat;  //端口赋值
Delay(50);
E=1;  //高脉冲
Delay(50);
E=0;
}
void CheckBusy(void)
{ 

uint8 temp;
RS=0;  //命令
RW=1;  //读
E=0;
while(1)
{ 

PORT=0xFF;  //端口为输入
E=1;  //高脉冲
temp=PORT;
E=0;
if ((temp&0x80)==0)  //检查BF位是否为0
break;
}
}
void Init1602(void)
{ 

Write1602_Com(SETMODE);  //模式设置
Delay(500);
Write1602_Com(DISOPEN);  //显示设置
Delay(500);
Write1602_Com(DISMODE);  //显示模式
Delay(500);
Write1602_Com(CLEAR);  //清屏
Delay(500);
}
void Write1602_One_Dat(uint8 x,uint8 y,uint8 dat)
{ 

x&=0x0f;
y&=0x01;
if(y)
x|=0x40;
x|=0x80;
Write1602_Com(x);
Write1602_Dat(dat);
}
void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf)
{ 

uint8 i;
Write1602_Com(addr);
for(i=0;i
{ 

Write1602_Dat(pbuf[i]);
}
}
//File6
/******************************************************* *名称:主文件(_main.c) *功能:测试 *日期:2014/09/09 *******************************************************/
#include "1602.h"
#include "fun.h" 
uint8 code hot[8]={ 
  //摄氏温度字模
0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00
};
uint8 code pi[8]={ 

0x00,0x1f,0x0a,0x0a,0x0a,0x13,0x00,0x00  //pai
};
uint8 code strMCU[]="I love MCU!";
uint8 code strTest[]="LCD1602 Test!";
uint8 code blog[]="Welcome to my blog!";
uint8 i;
void main()
{ 

Init1602();  //初始化1602
//自定义CGRAM
Write1602_Str(0x40,8,hot);  //摄氏温标
Write1602_Str(0x48,8,pi);  //pai
Write1602_Str(0x80,strlen(strMCU),strMCU);
//"I love MCU!"
Write1602_Str(0x80+0x40,strlen(strTest),strTest);
//"LCD1602 Test!"
for(i=0;i<50;i++)  //延时一段时间
Delay(10000);
Write1602_Com(CLEAR);  //指令执行时间较长
Delay(500);  //多加一些延时
for(i=0;i<16;i++)
Write1602_Dat(0);
Write1602_Com(0xc0);  //设置DDRAM地址
for(i=0;i<16;i++)
Write1602_Dat(1);
for(i=0;i<50;i++)  //延时一段时间
Delay(10000);
Write1602_Com(CLEAR);  //指令执行时间较长
Delay(500);  //多加一些延时
Write1602_Str(0x80+0x10,strlen(blog),blog);
//写在显示之外
while(1)
{ 

Write1602_Com(0x18);  //左移
for(i=0;i<20;i++)  //延时
Delay(10000);
}
}

个人学习用途博客 部分内容摘抄自网络

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190603.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 微型计算机的主要因素,微型计算机的性能主要取决于( )。

    微型计算机的主要因素,微型计算机的性能主要取决于( )。【单选题】运用移动平均线研判股价趋势时,股价在一段时间下跌后,若短期均线开始上翘,继而穿越长期均线,形成:【单选题】在完成高度保密和紧急任务时往往不适用的领导方式是()【判断题】汽油和柴油发动机的负荷特性区别在于调节方式不同,汽油机属于质调节,柴油机属于量调节【判断题】为了让烙铁头充分接触焊点,焊接时可适当施加压力。【单选题】按构成空间视线限制的方向性可将植物构成空间分为水平空间和()…

  • Linux之netstat命令详解

    Linux之netstat命令详解netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。TCP连接状态详解LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTABLISHED:代表一个打开的连接 FIN-WA.

  • archwing任务流程_机器的武器任务流程

    archwing任务流程_机器的武器任务流程有两台机器 A,B 以及 K 个任务。机器 A 有 N 种不同的模式(模式 0∼N−1),机器 B 有 M 种不同的模式(模式 0∼M−1)。两台机器最开始都处于模式 0。每个任务既可以在 A 上执行,也可以在 B 上执行。对于每个任务 i,给定两个整数 a[i] 和 b[i],表示如果该任务在 A 上执行,需要设置模式为 a[i],如果在 B 上执行,需要模式为 b[i]。任务可以以任意顺序被执行,但每台机器转换一次模式就要重启一次。求怎样分配任务并合理安排顺序,能使机器重启次数最少。输入格

  • docker部署Kafka_kafka容器部署

    docker部署Kafka_kafka容器部署1.拉取镜像dockerpullwurstmeister/zookeeperdockerpullwurstmeister/kafka2.启动,先启动zookeeperdockerrun-d–namezookeeper-p2181:2181-twurstmeister/zookeeper再启动kafka,中间两个参数的172.17.137.55改为宿主机器的IP地址,如果不这么设置,可能会导致在别的机器上访问不到kafka。使用docker命令可快速在同一台机器搭

    2022年10月18日
  • 计算机专业选Java和Python哪个前景好点?[通俗易懂]

    计算机专业选Java和Python哪个前景好点?[通俗易懂]对于学习计算机专业的小伙伴,面对大二选课,开始陷入Java和python的纠结中,从以后的发展来看,这两个编程语言肯定是要通吃的,但前期的学习,可以有一个侧重点,说一下我自己的观点。应很多小伙伴的要求,我们从就业应用前景和学习难易度来分析一下:一、Java1、就业应用前景从目前的招聘量上来看,Java在编程语言中可以说是常胜将军,经常有各种新出的编程语言向它发起挑战,但是Jav…

  • ODA(Open Design Alliance)介绍「建议收藏」

    ODA(Open Design Alliance)介绍「建议收藏」注:与autocad兼容的软件,大部分基于Intellicad,另外刚冒出一个bricscad,天河的PCCADV10就是基于bricscad,bricscad是用ODA的库开发的,而开发brics

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号