51单片机--实现静态数码管00-59的2位秒表(含10秒倒计时)

一、案例要求

设计一个显示00~59的2位秒表。用单片机控制2个LED静态显示。

二、案例分析

单片机有4个并行I/O口P0~P3,每个I/O口包括8条I/O口线。采用P1口、P2口来控制2个共阳极LED的段码,公共端com接在+5V上。P1口控制的LED显示十位数,P2口控制的LED显示个位数,从0开始显示。显示到59后,重新从0开始显示。

三、案例仿真电路

在这里插入图片描述

三、案例代码

//功能:静态LED显示2位秒表
#include<reg51.h>

//函数名:time50ms
//函数功能:T0工作方式1定时50ms
void time50ms(unsigned char i)
{
	unsigned char k;
	for(k=0;k<i;k++)             //循环i次
	{
		TH0=(65536-50000)/256;   //定时初值高8位
		TL0=(65536-50000)%256;   //定时初值低8位
		TR0=1;                   //启动T0
		while(!TF0);             //查询是否到50ms
		TF0=0;                   //50ms定时时间到,将标志位清零
	}
}

void main()
{
	unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
	//共阳极数码管从0-9的字形码
	unsigned char i;
	TMOD=0X01;                //T0工作方式1,定时功能
	P1=0XFF;                  //熄灭数码管的十位
	P2=0XFF;                  //熄灭数码管的个位
	while(1)
	{
		for(i=0;i<60;i++)
		{
			P1=led[i/10];    //显示十位
			P2=led[i%10];    //显示个位
			time50ms(20);    //定时1秒
		}
	}
}

四、案例延伸

将上述代码修改一下便可以实现10-1的倒计时秒表:

#include<reg51.h>

void time50ms(unsigned char i)
{
	unsigned char k;
	for(k=0;k<i;k++)
	{
		TH0=(65536-50000)/256;
		TL0=(65536-50000)%256;
		TR0=1;
		while(!TF0);
		TF0=0;
	}
}

void main()
{
	unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
	
	unsigned char i;
	TMOD=0X01;
	P1=0XFF;
	P2=0XFF;
	while(1)
	{
		for(i=10;i>=1;i--)//从10倒数到1,1秒数一次
		{
			P1=led[i/10];
			P2=led[i%10];
			time50ms(20);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值