51单片机系列--LCD1602A
Lcd液晶屏幕带有背光显示,可选择蓝光白光黄光三种背光颜色的屏幕,它更具有美光性,在实际生活中有广泛的应用。
实物图
原理图
RS:1为数据/0为指令;RW:1为读/0为写;E1为数据有效,下降沿执行指令
示例代码
main.c
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;u8 Disp[]=" 5G NBiot At89c52";/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main(void)
{u8 i;LcdInit();for(i=0;i<16;i++){LcdWriteData(Disp[i]); }while(1);
}
lcd.c
#include "lcd.h"/*******************************************************************************
* 函 数 名 : Lcd1602_Delay1ms
* 函数功能 : 延时函数,延时1ms
* 输 入 : c
* 输 出 : 无
* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/void Lcd1602_Delay1ms(uint c) //误差 0us
{uchar a,b;for (; c>0; c--){for (b=199;b>0;b--){for(a=1;a>0;a--);} }}/*******************************************************************************
* 函 数 名 : LcdWriteCom
* 函数功能 : 向LCD写入一个字节的命令
* 输 入 : com
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时
void LcdWriteCom(uchar com) //写入命令
{LCD1602_E = 0; //使能LCD1602_RS = 0; //选择发送命令LCD1602_RW = 0; //选择写入LCD1602_DATAPINS = com; //放入命令Lcd1602_Delay1ms(1); //等待数据稳定LCD1602_E = 1; //写入时序Lcd1602_Delay1ms(5); //保持时间LCD1602_E = 0;
}
#else
void LcdWriteCom(uchar com) //写入命令
{LCD1602_E = 0; //使能清零LCD1602_RS = 0; //选择写入命令LCD1602_RW = 0; //选择写入LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1; //写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = com << 4; //发送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; //写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名 : LcdWriteData
* 函数功能 : 向LCD写入一个字节的数据
* 输 入 : dat
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS
void LcdWriteData(uchar dat) //写入数据
{LCD1602_E = 0; //使能清零LCD1602_RS = 1; //选择输入数据LCD1602_RW = 0; //选择写入LCD1602_DATAPINS = dat; //写入数据Lcd1602_Delay1ms(1);LCD1602_E = 1; //写入时序Lcd1602_Delay1ms(5); //保持时间LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat) //写入数据
{LCD1602_E = 0; //使能清零LCD1602_RS = 1; //选择写入数据LCD1602_RW = 0; //选择写入LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1; //写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4; //写入低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; //写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名 : LcdInit()
* 函数功能 : 初始化LCD屏
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS
void LcdInit() //LCD初始化子程序
{LcdWriteCom(0x38); //开显示LcdWriteCom(0x0c); //开显示不显示光标LcdWriteCom(0x06); //写一个指针加1LcdWriteCom(0x01); //清屏LcdWriteCom(0x80); //设置数据指针起点
}
#else
void LcdInit() //LCD初始化子程序
{LcdWriteCom(0x32); //将8位总线转为4位总线LcdWriteCom(0x28); //在四位线下的初始化LcdWriteCom(0x0c); //开显示不显示光标LcdWriteCom(0x06); //写一个指针加1LcdWriteCom(0x01); //清屏LcdWriteCom(0x80); //设置数据指针起点
}
#endif
lcd.h
#ifndef __LCD_H_
#define __LCD_H_
/**********************************
当使用的是4位数据传输的时候定义,
使用8位取消这个定义
**********************************/
//#define LCD1602_4PINS/**********************************
包含头文件
**********************************/
#include<reg52.h>//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif#ifndef uint
#define uint unsigned int
#endif/**********************************
PIN口定义
**********************************/
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;/**********************************
函数声明
**********************************/
/*在51单片机12MHZ时钟下的延时函数*/
void Lcd1602_Delay1ms(uint c); //误差 0us
/*LCD1602写入8位命令子函数*/
void LcdWriteCom(uchar com);
/*LCD1602写入8位数据子函数*/
void LcdWriteData(uchar dat) ;
/*LCD1602初始化子程序*/
void LcdInit(); #endif
效果图
51单片机系列--LCD1602A相关推荐
- 51单片机系列(三)51 单片机游戏设计 —— 双人对战小游戏(石头剪刀布)
本博客51单片机实训系列,旨在记录本人在大学上单片机技术这门课时所做的课程实训内容,并与大家分享基于51单片的课程作业,如果作业中的某些细节和代码能给大家一点启发那就更好了,希望大家能用51单片机做出 ...
- 51单片机系列--基础知识
51单片机系列--基础知识 主要参数及功能 引脚及功能 工作时序 主要参数及功能 (1)8位CPU (2)4KB程序存储器(ROM) (3)128字节的数据存储器(RAM) (4)32条 I/O 口线 ...
- 51单片机系列——基础指令
这学期开始学习51单片机,感觉比汇编简单,关键是51的汇编有一个好的ide,练习起来也比较方便,这个系列主要记录51的学习经验.下面是基础指令的练习: org 0000h ljmp main ...
- 51单片机系列--闪烁灯,呼吸灯与流水灯
51单片机是对兼容英特尔8051指令系统的单片机的统称.51单片机广泛应用于家用电器.汽车.工业测控.通信设备中.因为51单片机的指令系统.内部结构相对简单,所以国内许多高校用其进行单片机入门教学. ...
- Proteus仿真及应用——51单片机系列
Proteus简单操作 1. 绘制最小系统 2. 流水灯 3. 实现流水灯的通用方法 4.数码管显示 4.1静态显示:每个数码管与一组I/O口相连,全部亮. 4.2动态显示:段选线由==一组==I/O ...
- 51单片机系列--1WrieDS18B20温度模块
DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大.硬件简单.易扩展.抗干扰性强等特点 测温范围:-55°C 到 +125°C ...
- 51单片机系列--直流电机
直流电机是一种将电能转换为机械能的装置.一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转.直流电机主要由永磁体(定子).线圈(转子)和换向器组成,除直流电机外,常见的电机还有步 ...
- 51单片机系列--AT24C02(总线)
存储器介绍 易失性存储器/RAM 非易失性存储器/ROM SRAM(静态RAM) Mask ROM(掩膜ROM) DRAM(动态RAM) PROM(可编程ROM) EPROM(可擦除可编程ROM ) ...
- 51单片机系列知识5--并口(2)
2.P1口 P1口对应的专用寄存器的助记符是P1,它是一个8位的专用寄存器,字节地址是90H,它的每一位都有位地址,可以对位进行直接访问. PI口的位结构如图2-20所示.P1口也是准双向口,它的用途 ...
最新文章
- 正点原子串口函数分析
- 用python计算两个二维list依据第二维的前一个数据相加
- 在c++中使用gotoxy
- BugkuCTF-Crypto题rsa
- 云虚机php.ini在,虚拟主机php.ini在哪
- 一个关于从1到100的加法算法
- 基于检索的自然语言处理模型研究梳理
- 基于UCenter关联第三方网站与Discuz用户
- python信号处理的优点_python 信号处理
- HTML5 植物大战僵尸项目介绍 和源码分析
- 【Java基础】建立Java面向对象编程OOP模型
- 重装系统找不到固态_安装Win10系统没有固态硬盘(双硬盘找不到固态硬盘)怎么解决?...
- SpringBoot 深入浅出
- docker安装mssql
- vant上传图片 转二进制_土旦:移动端 Vue+Vant 的Uploader 实现 :上传、压缩、旋转图片-Go语言中文社区...
- 揭开CVE漏洞挖掘与编号申请那层神秘窗户纸
- Java + 腾讯企业邮箱 + javamail + SSL 发送邮件(转载:http://www.cnblogs.com/LUA123/p/5575134.html)
- 西南交通大学linux内核,GitHub - Laotree/SWJTU-Developer: 西南交通大学开发者社区——为交大开发者提供交流的平台...
- 问道手游《新手怎么玩转押镖流》
- 传智播客php电商项目源码,shop thinkphp写的电子商城代码,原 为传智播客的教学 源码 WEB(ASP,PHP,...) 256万源代码下载- www.pudn.com...