C语言 如何用8051单片机制作数字钟

amrnrhlw  于 2023-03-01  发布在  其他
关注(0)|答案(2)|浏览(162)

我目前有一个项目,使8051微控制器的代码,但我不太清楚如何使定时慢的意图。我已经尝试了许多方法来调整计时器,但我不太清楚如何得到确切的定时下来或如何设置一个限制,为4位七段显示的第三位数被限制为增加,直到5之前,第二位数增加1。有谁能帮我吗?
代码如下所示:

#include <c8051f200.h>
#include <setSystem.c>

//display ones/tens/hundreds/thousand at different 7-segment
void starting_display(unsigned int num1, unsigned int num2, unsigned int num3, unsigned int num4)
{
unsigned int x,z;
for(z=0;z<1;z++)
{
    P2 = 0xE0|  num1;
    for (x=0;x<1000;x++);
    P2 = 0xD0 | num2;
    for (x=0;x<1000;x++);
    P2 = 0xB0 | num3;
    for (x=0;x<1000;x++);
    P2 = 0x70 | num4;
    for (x=0;x<1000;x++);
}
}

//Split number to ones/tens/hundreds/thousands
void display(unsigned int x)
{
unsigned int a,b,c,d;
a = x / 1000;
b = (x % 1000) / 100;
c = (x % 100) / 10;
d = (x % 10);
starting_display(a,b,c,d); //Function call to starting_display()
}

void main()
{
unsigned int x = 0, overflow_count;
setSystem();

P1 = 0x00;
TMOD=0x10; //Initialize and configure Timer
TR1=1; //Starts Timer 1
TF1=0; //Clear Timer 1 overflow flag
while(1)
{
    TH1=0x00; //Reload values into TH1
    TL1=0x00; //Reload values into TL1
    while (TF1==0) //Wait for overflow to occur
    {
        display(x); //Function call to split the number
    }

    TF1=0; //Clear overflow flag
    x++;
    if(overflow_count == 100)
    {
        x++;
        overflow_count = 0;
    }
    if (x>2359) //Reset the number
    x=0;
}
}
aemubtdh

aemubtdh1#

将变量x拆分为两个变量,分别命名为minuteshours。如果需要增加minutes,就增加minutes。如果minutes达到60,就将其重置为0并增加hours。如果hours达到24,就将其重置为0。
要“减慢时间”,可以提高overflow_count的限制,因为您选择unsigned int作为其类型,所以overflow_count的范围足够宽,可以计数到65535。

ibrsph3r

ibrsph3r2#

实际上,如果我们想要数字时钟上的确切时间或日期,最好选择RTC(真实的时钟)DS1307。将微控制器与RTC接口,并在七段显示器或LCD上显示时间。

相关问题