#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char
sbit DU =P2^6;//段选
sbit WE =P2^7;//位选
sbit LED1 =P1^0;
//共阴极数码管0-9
uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
void delay(uint x) //@12.000MHz 延迟函数1毫秒
{
unsigned char i, j;
while(x--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void display(uchar i) //数码管显示函数
{
uchar bai, shi, ge;
bai = i / 100; //236 / 100 = 2
shi = i % 100 / 10; //236 % 100 / 10 = 3
ge = i % 10;//236 % 10 =6
P0 = 0XFF;//清除断码
WE = 1; //位选打开
P0 = 0XFE;//第一个数码管显示,共阴极1111 1110
WE = 0; //关闭位选寄存器
DU = 1; //段选寄存器打开
P0 = tabel[bai]; //百位数字
DU = 0; //段选寄存器关闭
delay(5); //延迟5秒
P0 = 0XFF;
WE = 1;
P0 = 0XFD; //二个数码管
WE = 0;
DU = 1;
P0 = tabel[shi];
DU = 0;
delay(5);
P0 = 0XFF;
WE = 1;
P0 = 0XFB;
WE = 0;
DU = 1;
P0 = tabel[ge];
DU = 0;
delay(5);
}
void timer0Init()//定时器0计数
{
TR0 =1; //TCON中的打开定时器
TMOD |=0x05; //TMOD不能位寻址 0000 0101中 1 01表示计数模式
TH0 =0;
TL0 =0;
}
void timer1Init()//定时器1定时
{
TR1 =1; //TCON中的打开定时器
TMOD |=0x10; //TMOD不能位寻址 0001 0000
TH1 =0x4b;
TL1 =0xfd;
}
void main()
{
uchar ms_50; //记录50ms的个数 20个为1s
timer0Init();
timer1Init();
while(1)
{
if(TF1==1) //
{
TF1 =0; //
TH1 =0x4b; //
TL1 =0xfd; //
ms_50++; //
if(ms_50 ==10)//
{
ms_50=0; //
LED1 =~LED1;//产生方波
}
}
display(TL0);
}
}
AT89C52定时器1位定时,定时器0位计数
最新推荐文章于 2024-08-24 20:02:06 发布