我目前有一个项目,使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;
}
}
2条答案
按热度按时间aemubtdh1#
将变量
x
拆分为两个变量,分别命名为minutes
和hours
。如果需要增加minutes
,就增加minutes
。如果minutes
达到60,就将其重置为0并增加hours
。如果hours
达到24,就将其重置为0。要“减慢时间”,可以提高
overflow_count
的限制,因为您选择unsigned int
作为其类型,所以overflow_count
的范围足够宽,可以计数到65535。ibrsph3r2#
实际上,如果我们想要数字时钟上的确切时间或日期,最好选择RTC(真实的时钟)DS1307。将微控制器与RTC接口,并在七段显示器或LCD上显示时间。