蓝桥杯单片机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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 准备数据集用于flink学习

    准备数据集用于flink学习

    2020年11月19日
    224
  • 创建InetAddress对象的四个静态方法[通俗易懂]

    创建InetAddress对象的四个静态方法[通俗易懂]InetAddress类是Java中用于描述IP地址的类。它在java.net包中。在Java中分别用Inet4Address和Inet6Address类来描述IPv4和IPv6的地址。这两个类都是InetAddress的子类。由于InetAddress没有public的构造方法,因此,要想创建InetAddress对象,必须得依靠它的四个静态方法。InetAddress可以通过getLocalH

    2022年6月23日
    24
  • UI设计logo_ui图标设计图片

    UI设计logo_ui图标设计图片ui设计教程分享:关于Logo设计要素

    2022年4月21日
    81
  • android之switch控件的用法

    在做一个蓝牙开关时候,用到了switch,记一下用法,其实跟Button是几乎一样的.布局中:<Switch android:id=”@+id/open” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android…

    2022年3月10日
    40
  • linux安装pycharm教程_linux下pycharm使用

    linux安装pycharm教程_linux下pycharm使用在linux中安装pycharm很简单,解压后直接启动.1.先去官网下载安装包2.解压压缩包到自己指定的目录.第三方软件一般安装到/opt目录3.启动,可以直接运行的.进入到pycharm解压后的目录的bin目录下.pycharm.sh就是启动脚本,直接可以启动,但这样每次都要指定路径启动.shpycharm.sh启动pycharm将会阻塞一个终端,关闭终端pycharm也将随之关闭.4.创建一下快捷启动命令,指定一个别名.1.进入当前用户主目录.bashrc

    2022年8月27日
    3
  • K8s基本概念入门_k8s菜鸟教程

    K8s基本概念入门_k8s菜鸟教程序言    没等到风来,绵绵小雨,所以写个随笔,聊聊k8s的基本概念。    k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。那么,问题来了,要运维何用?    k8s可以更快的更新新版

    2022年10月22日
    0

发表回复

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

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