#include<reg51.h>
#define uchar unsigned char
uchar sec=0,time=0; //sec每过一秒加一,time每中断一次加一
uchar code num[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};//0--9的编码
sbit DU=P2^6;
sbit WE=P2^7;
sbit SDA=P2^0;
sbit SCL=P2^1;
void delay(uchar n) //n=1,延时0.2ms
{
uchar i,j;
for(i=0;i<n;i++)
for(j=0;j<110;j++);
}
void t0_init() //定时器T0初始化函数{ P0=0xff; TMOD=0x01; //选择定时器T0方式为1 ,16位 TH0=60; TL0=176;//装初值 TR0=1; //让T0开始工作 ET0=1; //打开T0中断 EA=1; //打开全局中断 delay(5);}
void display(uchar sec) //数码管显示函数{ uchar Ge,Shi; //Ge用来显示个位,Shi 十位// if(sec>=100)// sec=0; Ge=sec%10; Shi=sec/10; DU=1; // 个位显示 P0=num[Ge]; DU=0; P0=0xff; WE=1; P0=0xfd;//1111 1101 WE=0; delay(5); DU=1; // 十位显示 P0=num[Shi]; DU=0; P0=0xff; WE=1; P0=0xfe; //1111 1110 WE=0; delay(5); //这个延时一定要加}void main(){ t0_init(); while(1) { display(sec); }}void t0()interrupt 1 //定时器T0中断函数{ time++; if(time==20) {// if(sec>=100)// sec=0; sec++; time=0; wr=1; } TL0=176; TH0=60;}本来作用是利用T0计时99秒上面有两个注销的部分,任选其中一个,为{:soso_e154:}{:soso_e154:}{:soso_e154:}什么选上面那个到了九十九,到零为什么会停好久才回又开始计时,而选后面那个到九十九,到零,又直接开始计时,不是两个作用一样吗?不知道有没表达清楚,但是还是请帮帮忙吧,谢谢了
|