蓝桥杯单片机——24C02存储按键操作次数

题目来源:(28条消息) 蓝桥杯单片机 | 特训案例【进阶04】24C02存储按键触发次数_小蜜蜂老师的博客-CSDN博客

1、将J5的23脚短接,把S4、S5和S6设置为独立按键。

2、用24C02存储器的0x00、0x01和0x02这个三个地址单元分别存储S4、S5和S6的按下次数。
3、系统上电后,先从24C04存储器的0x00、0x01和0x02这三个地址单元读取数据,然后按照S4、S5和S6的顺序从左到右依次显示在数码管上,各个数字之间用“-”分隔。

4、S4、S5和S6按键每按下一次,就在对应读出的历史按下次数基础上进行加1累计,当累计值大于13时,复位清0。

5、将按键按下的最新次数写入24C02的对应单元,并在数码管上刷新显示。

#include <reg52.h>
#include <iic.h>
unsigned char count_s4=0;
unsigned char count_s5=0;
unsigned char count_s6=0;
sbit s4=P3^3;
sbit s5=P3^2;
sbit s6=P3^1;
unsigned char code smg_nodot[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code smg_dot[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
void delaysmg(unsigned int t)
{
 	while(t--);
}
void displaysmg_byte(unsigned char pos,unsigned char value)
{
	P2=0XE0;P0=0XFF;
	P2=0XC0;P0=0X01<<pos;
	P2=0XE0;P0=value;
}
void display()
{
  displaysmg_byte(0,smg_nodot[count_s4/10]);
  delaysmg(100);
  displaysmg_byte(1,smg_nodot[count_s4%10]);
  delaysmg(100);
  displaysmg_byte(2,0xbf);
  delaysmg(100);
  displaysmg_byte(3,smg_nodot[count_s5/10]);
  delaysmg(100);
  displaysmg_byte(4,smg_nodot[count_s5%10]);
  delaysmg(100);
  displaysmg_byte(5,0xbf);
  delaysmg(100);
  displaysmg_byte(6,smg_nodot[count_s6/10]);
  delaysmg(100);
  displaysmg_byte(7,smg_nodot[count_s6%10]);
  delaysmg(100);
}
void write_24c02(unsigned char add,unsigned char dat)
{
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();
}
unsigned char read_24c02(unsigned char add)
{
	unsigned char dat1;
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();

	IIC_Start();
	IIC_SendByte(0xa1);
	IIC_WaitAck();
	dat1=IIC_RecByte();
	IIC_WaitAck();
	IIC_SendAck(1);
	IIC_Stop();
	return dat1;
}
void key()
{
	if(s4==0)
	{
	  delaysmg(100);
	  if(s4==0)
	  {
	  		while(s4==0)
			{
				display();
			}
			count_s4++;
			write_24c02(0x00,	count_s4);
			if(count_s4>13) count_s4=0;
	  }
	}
	if(s5==0)
	{
	  delaysmg(100);
	  if(s5==0)
	  {
	  		while(s5==0)
			{
				display();
			}
			count_s5++;
			write_24c02(0x01,	count_s5);
			if(count_s5>13) count_s5=0;
	  }
	}
	if(s6==0)
	{
	  delaysmg(100);
	  if(s6==0)
	  {
	  		while(s6==0)
			{
				display();
			}
			count_s6++;
			write_24c02(0x02,	count_s6);
			if(count_s6>13) count_s6=0;
	  }
	}
}
void main()
{
  count_s4=	read_24c02(0x00);
  count_s5=	read_24c02(0x01);
  count_s6=	read_24c02(0x02);
  while(1)
  {
  	 key();
	 display();
  }
}

猜你喜欢

转载自blog.csdn.net/m0_57263863/article/details/124026888