时钟一:51单片机用替换的方法在数码管上显示时钟

该博客介绍了如何使用51单片机通过替换方法在数码管上显示时钟。主要内容包括主文件`clock.c`中的数码管显示代码,以及延时函数的实现,详细解释了如何逐帧更新数码管显示以形成时钟效果。
摘要由CSDN通过智能技术生成

主文件clock.c:

#include <reg52.h>
#include "./delay/delay.h"


#define PORTLEN P0


sbit bit_select = P2^0;
sbit seg_select = P2^1;


unsigned char src[8] = {0x3f,0x3f,0x40,0x3f,0x3f,0x40,0x3f,0x3f};
unsigned char qrc[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char second1[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


void main()
{

    unsigned char i;
    unsigned char j = 0;

    unsigned char k = 0;

    unsigned char l = 0;
    unsigned char m = 0;
    unsigned char n = 0;
    unsigned char q = 0;
    unsigned char num = 0;
    unsigned char count = 0;


    while(1)
    {
 
         for(i = 0; i < 8; i++)
 {
PORTLEN = src[i];
seg_select = 1;
seg_select = 0;

        PORTLEN = qrc[i];
bit_select = 1;
bit_select = 0;

delay_ms(2);
           }

count++;

if(count == 65)
{
                    j++;
    count = 0;
    if(j == 10)
    {
k++;
j = 0;
if(k == 6)
{
    l++;
    k = 0;
    if(l == 10)
    {
m++;
l = 0;
if(m == 6)
{
    n++;
    m = 0;
    if(n == 10)
    {
q++;

n = 0;
src[0] = second1[q];
    }   
    if(n == 4)
    {
num++;
if(num == 3)
{

    src[7] = second1[0];

                     src[6] = second1[0];
                     src[4] = second1[0];
                     src[3] = second1[0];
                     src[1] = second1[0];
                     src[0] = second1[0];
     n = 0;
     q = 0;
     num =0;
     continue;
}

    }
            src[1] = second1[n];
}
src[3] = second1[m];
    }
    src[4] = second1[l];
}
src[6] = second1[k];
    }
   src[7] = second1[j];  
        }

    }
}


延时函数delay.c

void delay_us(unsigned char t)
{
    while(--t);
}


void delay_ms(unsigned char t)
{
    while(t--)
    {
        delay_us(245);
delay_us(245);
    }
}


包含声明头文件delay.h

#ifndef _DELAY_H_
#define _DELAY_H_


extern void delay_us(unsigned char t);
extern void delay_ms(unsigned char t);


#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值