基于STC12C5A60S2系列1T 8051单片读写掉电保存数据IIC总线器件AT24C02一字节并显示在液晶显示器LCD1602上应用

STC12C5A60S2系列1T 8051单片机管脚图

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

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

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

液晶显示器LCD1602简单介绍

在这里插入图片描述在这里插入图片描述
DDRAM : 数据显示随机存储器 液晶显示器显示数据是来于数据显示随机存储器
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
CGRAM:字符生成随机存储器 用户自定义字符会存储在字符生成存储器
在这里插入图片描述
CGROM:字符库只读存储器 只提供字符 用液晶显示器显示这些字符

总结:不管是CGRAM(字符生成随机存储器)自定义的字符 还是CGROM(字符库只读存储器)原有的字符 写进DDRAM(数据显示随机存储器)内存地址上 才能在液晶显示器屏幕显示出来
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

IIC通信简单介绍

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

掉电保存数据芯片AT24C02简单介绍

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

通过液晶显示器LCD1602显示掉电保存数据芯片AT24C02内存地址上的一字节数据

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
main.c

#include "STC12C5A60S2.h" 
#include "AT24C02.h" 
#include "AT24C02OfI2C.h" 
#include "LCD1602.h" 
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint 
 void main()//主函数
{
   
  uchar Data;//声明数据变量
  uchar String[10];//声明字符串数组变量
  LCD1602Init();//液晶显示器初始化函数
  Data = ReadByteFromAT24C02(0x50,0x20);//单片机作为主机通过I2C通信从AT24C02内存地址0x20上读取一个字节 
  LCD1602SetDisplayPosition(0,0);//液晶显示器LCD1602第一行第一个位置显示字符串
  LCD1602WriteData(Data/100 + '0');//液晶显示器LCD1602写数据函数 显示百位数据 为什么数据分解后+'0'? 因为液晶显示器LCD1602要显示数据的字符串 而单片机运算字符串的字符是字符对应的ASCII码的二进制数值或十进制数值或十六进制数值 这里取单片机运算字符串的字符对应的ASCII码十进制数值 如:字符'0'的ASCII码十进制数是48 字符'1'的ASCII码十进制数是49 字符'2'的ASCII码十进制数是50 .... 字符'9'的ASCII码十进制数是57 而编译器对于'0'会自动视为是'0'的ASCII码 即ASCII码十进制数是48 举例:拿Data = 251来分解 则有:Data/100=2 Data/10%10=5 data%10=1 要把数据251转化成字符串为"251" 可拆开看成字符'2' '5' '1' 它们对应的ASCII码十进制数分别为50 53 49 而Data/100=2+'0'=2+48=50 Data/10%10=5+'0'=5+48=53 data%10=1+'0'=1+48=49 算出50 53 49这三个ASCII码十进制数分别对上字符'2' '5' '1'的ASCII码十进制数为50 53 49 这就是为什么数据分解后+'0'的原因
  LCD1602WriteData(Data/10%10 + '0');//液晶显示器LCD1602写数据函数 显示十位数据
  LCD1602WriteData(Data%10 + '0');//液晶显示器LCD1602写数据函数 显示个位数据
  NumberTransformedToHexString(Data,String);//无符号字符型数据转化为十六进制数的字符串函数 无符号字符型数据要转化为十六进制数的字符串 可以把无符号字符型数据拆成高四位与低四位来分别转化成表示十六进制数的字符串两位数字符
  LCD1602ShowString(5,0,String);//液晶显示器LCD1602第一行第六个位置显示字符串
  Data++;//数据变量自加
  WriteByteToAT24C02(0x50,0x20,Data);//写字节给AT24C02函数 单片机作为主机通过I2C通信在AT24C02内存地址0x20上写一个字节 
  LCD1602SetDisplayPosition(0,1);//液晶显示器LCD1602第二行第一个位置显示字符串
  LCD1602WriteData(Data/100 + '0');//液晶显示器LCD1602写数据函数 显示百位数据 为什么数据分解后+'0'? 解释同上
  LCD1602WriteData(Data/10%10 + '0');//液晶显示器LCD1602写数据函数 显示十位数据
  LCD1602WriteData(Data%10 + '0');//液晶显示器LCD1602写数据函数 显示个位数据
  NumberTransformedToHexString(Data,String);//无符号字符型数据转化为十六进制数的字符串函数 无符号字符型数据要转化为十六进制数的字符串 可以把无符号字符型数据拆成高四位与低四位来分别转化成表示十六进制数的字符串两位数字符
  LCD1602ShowString(5,1,String);//液晶显示器LCD1602第二行第六个位置显示字符串
  while(
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: stc12c5a60s2是一款片机芯片,可以控制LCD1602液晶显示屏进行显示。通过编程序,可以实现在LCD1602上显示各种文字、数字、符号等内容。这种组合可以用于各种子设备中,例如计算器、温度计、子钟等。 ### 回答2: stc12c5a60s2是一种常用的片机,它拥有典型的8051指令集,并支持多达12MHz的系统时钟速度。该片机导出的I/O口数量比较多,可满足大多数应用LCD1602液晶显示器是一种16×2的字符型液晶显示器,它可以显示英文字母、数字、符号,也可用于中、日文字的显示stc12c5a60s2与LCD1602显示器的连接一般需要涉及到8个IO引脚,包括RS、RW、E、D0-D7。RS、RW、E是LCD的控制引脚,其中RS为RS=1时数据口D0-D7所输入的数据被认为是字符数据,RS=0时所输出的数据被认为是指令码;RW为RW=1时所数据,RW=0时所数据;E是LCD的使能引脚,当E有效时,LCD会响应RS和RW的数据。 对于stc12c5a60s2与LCD1602的连接,可以将RS接到P1.0引脚,RW连接到P1.1引脚,E连接到P1.2引脚,D0-D7分别连接到P2.0-P2.7引脚上。然后可以编程序通过片机控制LCD显示,例如可以使用stc-isp V6.86软件结合C语言编程序实现LCD显示。 总的来说,stc12c5a60s2与LCD1602显示屏的组合比较常见,使用起来相对简,也可以满足很多实际需求。对于初学者来说,可以通过学习相关的片机及显示器知识,逐步深入了解其原理与应用,从而逐步掌握实际的应用技巧。 ### 回答3: stc12c5a60s2是一款片机,而LCD1602则是一种常见的液晶显示器。 在使用stc12c5a60s2控制LCD1602显示之前,首先要确保硬件路接线正确,比如要保证输入压符合要求,数据线接对位置等等。 为了控制LCD1602显示,需要使用stc12c5a60s2的GPIO(通用输入输出)端口来给液晶显示器发送命令和数据。具体来说,需要对LCD1602液晶显示器进行初始化,包括设置模式和清屏等操作,然后才能将数据进行显示。 在控制LCD1602显示时,需要注意一些细节,比如操作速度、数据位长度、字库等。另外,为了简化程序编,还可以使用现成的LCD1602库,比如Keil中自带的“LCD1602”文件夹,或者其他第三方库。 总之,控制LCD1602显示需要综合考虑硬件和软件两个方面,需要对片机的GPIO端口有一定的了解和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值