C51单片机数码(显示时分秒)

3 篇文章 11 订阅
3 篇文章 0 订阅

前言:

✌ 作者简介:CC++Edge淇大家可以叫我--斯淇。(CSDN优质博主建议加这一条!)
📑 个人主页:CC++Edge淇主页
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥 如果感觉博主的文章还不错的话,还请不吝👍关注、点赞、收藏三连支持👍一下博主哦
💬 人生格言:这世界形形色色,做好自己才是真!-——从入门到现在不容易~💬
每日推荐歌曲:如愿.
————————————————

目录

扩展实验1:

 定时器显示建议使用:(烧录软件中的定时计时为(60))

 代码分享(建议使用模块化编程):

延迟函数模块化!

定时中断器模块化!

 视频效果:

时间效果会有一定的误差(我会再次改进)!!!

扩展实验1:

任务说明:视觉上8个LED数码管同时显示“17-32-55“,从00-00-00,每秒钟加1次数!

动态数码管(普中开发板图)!!

 74HC138译码器!

 定时器显示建议使用:(烧录软件中的定时计时为(60))

 最终效果:(会有一定的偏差可能是程序不完善) 

 代码分享(建议使用模块化编程):

#include <REGX52.H>
#include <intrins.h>
#include "delay.h"
#include "intrrupt.h"
typedef unsigned char time;

time code date[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D, 0x7D,0x07,0x7F,0x6F};
time hour=0,minute=0,second=0;//¶¨Òåʱ·ÖÃë³õʼ»¯ÊýÖµ£¡
time count=0;
/*2022.6.11ÈÕ´´½¨£ºÁõ˹俣»ÊýÂë¹ÜÏÔʾʱ·ÖÃ룡*/
void display(time hour,time minute,time second){  
    int i;
    for(i=1;i<=8;i++){
        switch(i){
           case 1: P2_4=0;P2_3=0;P2_2=0;P0=date[second%10];break;
           case 2: P2_4=0;P2_3=0;P2_2=1;P0=date[second/10];break;
           case 3: P2_4=0;P2_3=1;P2_2=0;P0=0x40;break; //ѡλ1000ÔòÏÔʾ
           case 4: P2_4=0;P2_3=1;P2_2=1;P0=date[minute%10];break;
           case 5: P2_4=1;P2_3=0;P2_2=0;P0=date[minute/10];break;
           case 6: P2_4=1;P2_3=0;P2_2=1;P0=0x40;break;//ѡλ1000ÔòÏÔʾ
           case 7: P2_4=1;P2_3=1;P2_2=0;P0=date[hour%10];break;
           case 8: P2_4=1;P2_3=1;P2_2=1;P0=date[hour/10];break;
        }
        Delay(1);//ÏûÓ°
        P0=0;        
    }
}
void interrupttimmes()interrupt 1  //¶¨Ê±ÖжÏÆ÷£¡
{
  TL0 = 0xB0;		    
	TH0 = 0x3C;	  
    count++;
    if(count==18){  
        count=0;     
        second++;
        if(second==60){  
            second=0;
            minute++;
            if(minute==60){ 
                minute=0;
                hour++;
                if(hour==24)
                    hour=0;               
           }
        }
    }
}
void main(){
    Timer0Init();
    while(1){
        display(hour,minute,second);   
    } 
}

延迟函数模块化!

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

定时中断器模块化!

#include <REGX52.H>
 
 
 void Timer0Init()		//³õʼ»¯ÖжÏÆ÷(¿ÉÒÔÔÚÖÐÉÕ¼Èí¼þÖÐÌáÈ¡£©
{
	TMOD &= 0xF0;		
	TMOD |= 0x01;		
	TL0 = 0xB0;		    
	TH0 = 0x3C;		    
	TF0 = 0;		    
	TR0 = 1;		    
  ET0=1;             
	EA=1;                  
}

代码注释格式可能有冲突(导致乱码)

 视频效果:

计时器

时间效果会有一定的误差(我会再次改进)!!!

  • 13
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员阿龙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值