设计一个秒表

1、通过LED数码管实现不停的加1计数。
2、分别设计暂停健与继续健。
3、通过(IIC)AT 24C02C保存计数数字(Proteus元件库中没有AT24C02,可用FM24C02芯片代替。),以便重启系统后继续计数。

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit SCL=P1^1;
sbit SDA=P1^0;

uchar Second,total=100;

uchar code DSY_CODE[]=
{
 	0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
uchar DSY_Buffer[4]={0,0,0,0};

void delay(){ ;; }

void Start()
{
 	SDA=1;SCL=1;delay();SDA=0;delay();SCL=0;
}

void Stop()
{
 	SDA=0;SCL=0;delay();SCL=1;delay();SDA=1;
}
void RACK()
{
 	SDA=1;delay();SCL=1;delay();SCL=0;
}
/*void NO_ACK()
{
 	SDA=1;SCL=1;delay();SCL=0;SDA=0;
} */
void initint()
{
	TMOD = 0x01;
	TH0 = 0xee;
	TL0 = 0x00;
	EA = 1;
	ET0 = 1;
	TR0 = 1;

	EX0 = 1;
	EX1 = 1;
	IT0 = 1;
	IT1 = 1;
	//PX0 = 0;
	//PX1 = 1;
}

void initiic()
{
	SDA=1;
	delay();
	SCL=1;
	delay();
}

void Write_A_Byte(uchar b)
{
 	uchar i;
	for(i=0;i<8;i++)
	{
	 	b<<=1;SDA=CY;_nop_();SCL=1;delay();SCL=0;
	}
	RACK();
}

uchar Receive_A_Byte()
{
 	uchar i,d;
	for(i=0;i<8;i++)
	{
	 	SCL=1;d<<=1;d|=SDA;SCL=0;
	}
	return d;
}

void delay1(uchar x)
{
	uchar a,b;
	for(a=x;a>0;a--)
	 for(b=100;b>0;b--);
}

void write_add(uchar address,uchar date)
{
	Start();
	Write_A_Byte(0xa0);	
	Write_A_Byte(address);
	Write_A_Byte(date);
	Stop();
}

uchar read_add(uchar address)
{
	uchar date;
	Start();
	Write_A_Byte(0xa0);
	Write_A_Byte(address);
	Start();
	Write_A_Byte(0xa1);
	date=Receive_A_Byte();
	Stop();
	return date;
}


void main()
{
	uchar i,m,Num;	
	initiic();
	initint();
	Second=read_add(23);
	while(1)
	{
		Num = Second;
	 	m = 0x7f;
		DSY_Buffer[1] = Num/100;
		DSY_Buffer[2] = Num/10%10;
		DSY_Buffer[3] = Num%10;
		DSY_Buffer[0] = 0;
		for(i=0;i<4;i++)
		{
		 	m = _crol_(m,1);
			P2 = m;
			P0 = DSY_CODE[DSY_Buffer[i]];
			delay1(10);
		}
	}	
}

void timer0() interrupt 1
{
	TH0 = 0xee;
	TL0 = 0x00;
	total--;
	if(total <= 0)
	{
		Second++;
		write_add(23,Second);
		delay1(100);
		total = 100;
	}

}  

void int0() interrupt 0
{
	ET0 = 0;
	TR0 = 0;
}

void int1() interrupt  2
{
	ET0 = 1;
	TR0 = 1;
}

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值