对于需要实时处理的代码语句 就用定时器中断模式,实现多线程模式,建议不要用查询模式。
示例代码1:
查看代码
#include"delay.h"
#include"sysInt.h"
#include"intrins.h"
char SMGDuan[]={0x5B,0x3F,0x5B,0x66, 0x40,0x40, 0x3F,0x3F}; //2024--MM
char segDuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0-9
char month;
//SMG
void segDisp()
{
char i=0;
for(i=0;i<8;i++)
{
P0=~SMGDuan[i];
HC573(7);
P0=_crol_(0X01,i);
HC573(6);
delayMs(2);
P0=0X00;
HC573(6);
}
}
//
void delayMs(uint xms)
{
xms/=50;
while(xms--)
{
TL0 = 0xB0; //设置定时初始值 50ms
TH0 = 0x3C; //设置定时初始值
TR0=1;
while(!TF0);
TF0=0;
}
}
// ------------------------分 隔 符------------------------
//main
void main()
{
sysInt();
TMOD &= 0xF0; //设置定时器模式
while(1)
{
delayMs(1000);
if(++month == 13)month=1;
SMGDuan[6]=segDuan[month/10];
SMGDuan[7]=segDuan[month%10];
segDisp();
}
}
定时器查询方式1s,但是“2024--MM”是要一直显示着,通过这种方式,并不能一直执行到segDisp();部分,所以就没有效果。
对于数码管需要实时显示,还是建议用定时器中断方式(多线程),达到实时处理。查询方式的定时本质上还是执行空语句。
标签:实时处理,0x3F,模式,char,定时器,多线程 From: https://www.cnblogs.com/YYZYCS/p/18049441