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


相关推荐

  • 【iOS7一些总结】9、与列表显示(在):列表显示UITableView

    【iOS7一些总结】9、与列表显示(在):列表显示UITableView

    2022年1月11日
  • springmvc接收字符串转list

    springmvc接收字符串转list多次试了下传入数组或者listjson格式感觉还是有问题。后面用最傻的方法先把参数设置成String类型传入到后台再做转换 publicObjectsaveScenceCheckDraw(CheckDrawingscheckDrawings,StringdrawingImgList){      GsonBuilderbuilder=newGsonBuilder();  …

    2022年5月14日
  • 计算机病毒对消息钩子的利用与对抗

    计算机病毒对消息钩子的利用与对抗一、消息钩子的概念    1、基本概念   Windows应用程序是基于消息驱动的,任何线程只要注册窗口类都会有一个消息队列用于接收用户输入的消息和系统消息。为了拦截消息,Windows提出了钩子的概念。钩子(Hook)是Windows消息处理机制中的一个监视点,钩子提供一个回调函数。当在某个程序中安装钩子后,它将监视该程序的消息,在指定消息还没到达窗口之前钩子程序先捕获这个消息。这样就有

    2022年7月26日
  • EmguCv模板匹配[通俗易懂]

    模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。先贴上简陋的界面图  代码:Matsrc=newImage<Bgr,byte>(ib_o…

    2022年4月8日
  • 关于SetCapture() 和 ReleaseCapture()的使用方法

    关于SetCapture() 和 ReleaseCapture()的使用方法  查MSND,对SetCapture()函数的说明为:“该函数在属于当前线程的指定窗体里设置鼠标捕获。一旦窗体捕获了鼠标,全部鼠标输入都针对该窗体,不管光标是否在窗体的边界内。同一时刻仅仅能有一个窗体捕获鼠标。假设鼠标光标在还有一个线程创建的窗体上,仅仅有当鼠标键按下时系统才将鼠标输入指向指定的窗体。”一開始我看这个解释误觉得了仅仅要在属于窗体里的一个线程调用了SetCapture(hWn…

    2022年6月5日
  • win10键盘锁住了怎么解决

    win10键盘锁住了怎么解决有win10系统用户在使用的时候,发现键盘被锁住了,导致无法使用,经过分析可能是不小心按到了键盘上的锁住键锁定键盘的快捷键笔记本电脑:Fn+Numlock键第一种方法:1、外接键盘,是否按过“Numlock”键,如果按过“Numlock”键,再次使用外接键盘按一次“Numlock”键,就会恢复正常了。(仅仅锁定或者解锁数字键盘)2、可以在电脑键盘中找到“Fn”键,这个键又被称为“第二功能键”,因为当你按下这个键,再去按另一个带有两种功能的键时,那个键就会出现第二种功能。3、再找到“F.

    2022年5月29日

发表回复

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

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