AT89C51单片机项目——秒表系统

这个单片机设计非常简单,主要是利用了74HC595芯片实现了51单片机的串口传输数据,计时范围从0.1秒到999.9秒,也可以自己改写代码,前两位用来作分,后两位显示秒数,转化为60进制,得到xx分xx秒
Protues仿真效果如下:
按下开始/继续按钮(从上往下第一个)
在这里插入图片描述
按下暂停按钮(从上往下第二个)
在这里插入图片描述
按下清零按钮(从上往下第三个)
在这里插入图片描述
源代码:

#include<reg51.h>
#include <intrins.h>
unsigned char Disp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

sbit SER 	=P3^0;
sbit LATCH 	=P3^1;
sbit SRCLK	=P3^2;
void delay(unsigned int i)
{
 	unsigned char j,k;
	for(i;i>0;i--)
	 	for(j=246;j>0;j--)
			k=0;
}
void bcdNz(unsigned int x,unsigned char *addr)
{
	char i;
	for(i=0;i<5;i++)
	{
		
	 	addr[i]=Disp_Tab[x%10];
		/*
		if(i==1)
		{
		 	addr[i]=0x80|addr[i];
		}*/
		x/=10;
	}
	addr[1]=0x80|addr[1];
	i=4;
	while(i>0 && addr[i]==0x3f)
	{
	 	addr[i]=0;
		i--;
	}
}
void Out595()
{
	 LATCH=0;	  //锁定数据
	 _nop_();	  //空指令
	 LATCH=1;	  //给一个上升沿

}
void SendByte(unsigned char dat)//一字节数据发送函数
{
	 unsigned char i;

	 for(i=0;i<8;i++)
	 {
		  SRCLK=0;
		  SER=dat&0x80;
		  dat<<=1;
		  SRCLK=1;
	 }
}
void Send595(unsigned char *addr,unsigned char x)  //发送x个数据,
{
    char i;
    for(i=0;i<x;i++)
	{
	 	SendByte(addr[i]);		
	}
	Out595();	 //	 给一个上升沿让74HC595芯片锁定并显示数据
}

void main()
{
	unsigned char flag=0;	  //设置标志位
	unsigned int Leds=0; 		//设置显示的数据
	unsigned char dispbufs[5];	//保存显示数据对应在数码管上的数值
	bcdNz(Leds,dispbufs);		//将需要显示的时间进行转化
	Send595(dispbufs,4);
	Out595();
	while(1)
	{
		if(P0==1){		//开始按钮按下
		   flag=1;
		}else if(P0==8)	   //停止按钮按下
		{
		   flag=0;
		}else if(P0==64)  //重新计时按钮按下
		{
		
		   Leds=0;
			bcdNz(Leds,dispbufs);
			Send595(dispbufs,4);
		}
		if(flag==1)		   //当flag为1时
		{	
			delay(85);	   //延时约0.1s
			Leds++;		   //
			bcdNz(Leds,dispbufs);
			Send595(dispbufs,4); //显示4位数字
		}		
	}
	
}


项目所有文件均已上传至百度网盘,感兴趣的可以自行下载
链接:https://pan.baidu.com/s/15L9AHs-9NcZ4o9Rc3H8_Mg
提取码:qwer

所有代码文件开源,仅供大家参考,如果还有疑问欢迎评论留言或私信我

  • 9
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

monster663

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值