C51单片机驱动数码管实现59s计数器

【实验目的】
练习进位操作,数码管动态显示。
【实验现象】
用软件延时的方法实现0-59秒自动计数器,用数码管的前两位显示出来。
【实验说明】
熟练掌握数码管的驱动,清楚位选和片选的应用,以及计数器的使用。
【硬件电路】
在这里插入图片描述由于单片机的IO口资源有限,数码管的未选和片选使用同样一组IO口,使用74HC573锁存器来实现数据的分时传输。
【程序代码】(源代码在本博客,资源里边,可自行下载)
#include<reg51.h>
#define uchar unsigned char
uchar j,k,i,a,A1,A2,second;
sbit dula=P2^6; //锁存器控制端定义
sbit wela=P2^7;
uchar code table[]=
{ //数字编码
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
void delay(uchar i) //延时函数
{
for(j=i;j>0;j–)
for(k=125;k>0;k–);
}
void display(uchar sh_c,uchar g_c) //显示函数
{
dula=0;
P0=table[sh_c]; //显示十位
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5); //亮5ms
P0=table[g_c]; //显示个位
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5); //亮5ms
}
void main() //主函数
{
while(1)
{
second++; //秒加一
if(second==60) //判断是否到60
second=0; //如果到了则清零
A1=second/10; //没到则分离出十位和个位
A2=second%10;
for(a=50;a>0;a–) //显示部分。至于时间大概是多少
{ //请用户用软件仿真看时间约等于1秒
display(A1,A2);//便可,如果需要精确定时请用定时器
}
}
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C51单片机是一种被广泛应用于嵌入式系统中的单片机,它拥有强大的定时器功能和控制能力。定时器的作用是为系统提供准确的时间基准,而数码管则是一种常见的显示器件,可以用来显示数字或其他字符。 在C51单片机上使用定时器驱动数码管的过程分为以下几个步骤: 1. 配置定时器:首先需要配置定时器的工作模式和计数器的初始值。C51单片机通常会提供相关的寄存器用于设置定时器的参数。 2. 中断设置:为了控制定时器的运行以及定时器溢出时数码管的刷新,通常需要使用中断机制。需要设置相关的中断向量、使能中断以及编写中断服务函数。 3. 时钟源选择:C51单片机通常提供多个时钟源,可以选择不同的时钟源作为定时器的输入信号。根据具体情况选择合适的时钟源,以及设置频率分频系数。 4. 数码管驱动:在定时器中断服务函数中,可以通过控制数码管的引脚电平来实现数码管的刷新。根据需要,可以使用四位数码管、七段数码管或其他类型的数码管。 5. 数字显示:通过在定时器中断服务函数中编写相应的逻辑代码,可以将要显示的数字或其他字符通过设置数码管引脚电平实现。 最后,进行编译、烧录等操作,使程序在C51单片机上运行,实现定时器驱动数码管显示功能。这样,就可以根据定时器的计时精度和频率要求,实现数码管的准确显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

培林将军

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

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

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

打赏作者

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

抵扣说明:

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

余额充值