蓝桥杯单片机AT24C02芯片上电自启动编程「建议收藏」

蓝桥杯单片机AT24C02芯片上电自启动编程

大家好,又见面了,我是全栈君。

蓝桥杯单片机AT24C02芯片上电自启动读取数据,写入数据的实现也是挺重要的一个模块,往年的考试就有考到过,下面就来解说一下具体的分析过程吧。

编写一个记录上电次数的代码,每一次上电自加一,使用数码管显示。

首先,官方提供的数据包中有提供了IIC总线的底层驱动代码,我们是可以直接调用这个底层驱动代码的,方便自己编写代码;
其次,系统设置一个记录上电次数的变量,上电的时候,上电之后把变量自加一,写入到芯片中;
之后,对芯片数据进行读取,读取到的数据进行显示;
最后,大概流程就差不多了,开始动手吧。

#include "reg52.h"
#include "iic.h"
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;

u8 shuma[12] = { 
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xbf};

// 外设初始化
void init_system()
{ 
   
    P2 = (P2 & 0x1f) | 0x80;
	P0 = 0xff;
	P2 = (P2 & 0x1f);

	P2 = (P2 & 0x1f) | 0xa0;
	P0 = 0x00;
	P2 = (P2 & 0x1f);

	P2 = (P2 & 0x1f) | 0xc0;
	P0 = 0x00;
	P2 = (P2 & 0x1f);
}

	// 外设导通选择
void select(u8 local)
{ 
   
    switch(local)
	{ 
   
	    case(4): P2 = (P2 & 0x1f) | 0x80; break;
		case(5): P2 = (P2 & 0x1f) | 0xa0; break;
		case(6): P2 = (P2 & 0x1f) | 0xc0; break;
		case(7): P2 = (P2 & 0x1f) | 0xe0; break;
	}
}


void delay()
{ 
   
    u8 t = 200;
	while(t--);
}

void display(u8 local, u8 num)
{ 
   
    select(6);
	P0 = 0x80 >> (local - 1);
	P2 = P2 & 0x1f;
	delay();

    // 消隐
	select(7);
	P0 = num;
	P2 = P2 & 0x1f;	
}


void write_at24c02(u8 add, u8 data1)    // 往AT24C02芯片写入数据函数
{ 
   
    IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();

	IIC_SendByte(add);
	IIC_WaitAck();

	IIC_SendByte(data1);
	IIC_WaitAck();
	IIC_Stop();
  
}

unsigned char read_at24c02(u8 add)   // 读取ATC24C02的数据函数
{ 
   
    u8 temp;      
    IIC_Start();   // 启动总线 ,函数主体在底层函数中
	IIC_SendByte(0xa0);     // 发送标志字节
	IIC_WaitAck();      // 等待总线响应

	IIC_SendByte(add);  // 发送读取数据的地址
	IIC_WaitAck();     // 等待总线响应

	IIC_Start();	  // 重新启动再发送地址单元写进去
	IIC_SendByte(0xa1);   
	IIC_WaitAck();

	temp = IIC_RecByte();
	IIC_WaitAck();
	IIC_Stop();
	return temp;
}


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

	_nop_();
	_nop_();
	i = 22;
	j = 128;
	do
	{ 
   
		while (--j);
	} while (--i);
}


void main()
{ 
   
    u8 num;
    init_system();
	num = read_at24c02(0x55);  // 读取数据的地址可以0x00-0xff,自行选择,注意写入到那个地址,之后读取数据就在那个地址进行读取
	write_at24c02(0x55,++num);   // 写入数据到上面读取数据的地址(地址需要一致)
    while(1)
	{ 
   
		display(1,shuma[num%10]);
		display(2,shuma[num/10]);
		close_display();
		Delay2ms();

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115103.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ora-01006:绑定变量不存在_ora-00001: 违反唯一约束条件

    ora-01006:绑定变量不存在_ora-00001: 违反唯一约束条件java.sql.SQLException:ORA-01008:并非所有变量都已绑定此异常为sql异常,我遇到的时候看java代码如下publicvoidsavegdzcysxx(Gdzcxxgdzcxx){  Stringsql=”insertintogdzcxx(id,zcmc,ggxh)values(SEQ_GDZC_ID.nextVAL,?,?)”;  Mys

    2025年9月27日
    4
  • StateMachine

    StateMachine

    2021年9月10日
    58
  • awk从放弃到入门(9):awk数组详解

    awk从放弃到入门(9):awk数组详解 这篇文章中的知识点是建立在前文的基础上的,如果你还没有掌握前文中的知识,请先参考之前的文章。注:在阅读这篇文章之前,最好已经了解了一些开发的基本语法,比如,for循环、数组的基本使用等,否则在阅读时有可能遇到障碍。 前文中提及过,awk其实可以算作一门脚本语言,因为它包含了一个脚本语言的各种语法结构,比如条件判断语句,比如循环语句,那么,awk中能否使用"数组"呢?必须能啊,今天我们就来聊聊…

    2022年7月19日
    16
  • cmd输入java, javac命令都无效详细解决方案

    cmd输入java, javac命令都无效详细解决方案问题:安装jdk后,配置完环境变量,可在cmd输入java和javac都无反应,解决下面教大家分析一下出错原因。1、检验jdk是否成功安装到计算机中(可能单单是环境变量出错导致指令无效)到自己jdk的安装目录的bin文件夹下,在地址栏输入cmd回车(本人jdk安装在D:\MySoft\jdk)在打开的cmd窗口分别输入java,javac命令验证jdk是否安装成功。出现以上提示,表明我们的jdk是安装成功的,所以问题出在环境变量。如果输入java让然无效,显然,是你的jdk安装失败了

    2022年5月28日
    101
  • docker(1)下载安装for mac

    docker(1)下载安装for mac前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

    2022年7月29日
    6
  • Onenote插件,云扩容

    Onenote插件,云扩容目录1.onenote2.插件3.云空间扩容4.onenote教程这些博主找了好久,现在一步到胃。特发布这篇文章,为后来的人指路。onenote各系列,公众号“软件管家”,有365,2016-2021系列,可正常同步。插件onetastic,直接官网免费onenoteclipper同onenotegem珍,有16版的,亲测可用于365版本。复制这段内容打开「百度网盘」APP即可获取链接:https://pan.baidu.com/s/1DtWmSRQ3cy1S6upA6DLU

    2025年10月12日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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