请问我这样子对吗?
#include<reg52.h> //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P3^0;
sbit wei1=P1^0;
sbit wei2=P1^1;
sbit wei3=P1^2;
sbit wei4=P1^3;
uchar code table[]={
0x3f,0x60,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num,num1,num2,shi,ge;
void delay(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar shi,uchar ge) //关于显示子函数
{
dula=1;
P2=table[shi]; //送入段选数据
dula=0;
P2=0xff; //消影 送入位选数据前关闭所有显示,防止打开位选锁存时,原来段选数据通过位选锁存器造成混乱
wei1=1;
wei2=0;
wei3=0;
wei4=0;
P2=0xfe; //送入位选数据
wei2=0;
delay(5); //延时极短
dula=1;
P2=table[ge];
dula=0;
P2=0xff;
wei2=1;
wei1=0;
wei3=0;
wei4=0;
P2=0xfd;
wei2=0;
delay(5);
}
void T0_time() interrupt 3 //T1中断 数码管的中断函数
{
TH0=(65536-50000)/256; //重装初值
TL0=(65536-50000)%256;
num2++;
if(num2==20) //如果到了20次 说明1秒时间到
{
num2=0; //然后把num2清0再重新计20次
num++;
if(num==60) //这个数用来送数码管显示,到60后归0
num=0;
shi=num/10; //把一个2位数分离后成十位和个位分别送入数码管
ge=num%10; //%是求余,/是求模即取整数部分
}
}
void main()
{
TMOD=0x01; //定时/计数器工作方式1,即16位的定时计数器
TH0=(65536-50000)/256; //装入初值
TL0=(65536-50000)%256;
EA=1; //打开全局中断
ET0=1; //打开定时计数器T0的中断
TR0=1; //打开定时器T0的运行控制,即启动定时器0
while(1)
{
display(shi,ge);
}
}