这程序哪出错了,求指教!
时间:10-02
整理:3721RD
点击:
我想用定时器T0的工作方式0去定时60秒,并显示在数码管上;为什么我的程序下载到PROTUES中数字1、2、3和7不显示。谁能告诉我这程序哪里出错了吗?
#include<reg52.h>
typedef unsigned char CHAR;
typedef unsigned int INT;
CHAR code LED_CODES[]=
{ 0xc0,0xF9,0xA4,0xB0,0x99,//0-4
0x92,0x82,0xF8,0x80,0x90,//5-9
};
sbit dula = P2^7;//段选信号
sbit wela = P2^6;//位选信号
void display(CHAR,CHAR);//显示函数
CHAR shi,ge,j,i;
void delayxms(INT x){ //延时X毫秒
INT m,n;
for(m=x;m>0;m--)
for(n=110;n>0;n--);
}
void init(){ //初始化
TMOD = 0x01;//定义定时器0的工作方式1
TH0 = (65536-50000)/256;//装初值
TL0 = (65536-50000)%256;
EA = 1;//开总中断
ET0 = 1;//开定时器中断
TR0 = 1;//启动定时器
}
void main(){
init();
while(1){
display(shi,ge);//调用显示函数
}
}
//显示函数,显示个位和十位
void display(CHAR shi,CHAR ge){
wela = 1;
P1 = 0x10;
wela = 0;
P1 = 0xff;
dula = 1;
P1 = LED_CODES[shi];
dula = 0;
delayxms(5);
wela = 1;
P1 = 0x20;
wela = 0;
P1 = 0xff;
dula = 1;
P1 = LED_CODES[ge];
dula = 0;
delayxms(5);
}
//中断函数
void T0_timer() interrupt 1{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
j++;
if(j==20){
j=0;
i++;
if(i==60)
i = 0;
shi = i/10;
ge = i%10;
}
}
#include<reg52.h>
typedef unsigned char CHAR;
typedef unsigned int INT;
CHAR code LED_CODES[]=
{ 0xc0,0xF9,0xA4,0xB0,0x99,//0-4
0x92,0x82,0xF8,0x80,0x90,//5-9
};
sbit dula = P2^7;//段选信号
sbit wela = P2^6;//位选信号
void display(CHAR,CHAR);//显示函数
CHAR shi,ge,j,i;
void delayxms(INT x){ //延时X毫秒
INT m,n;
for(m=x;m>0;m--)
for(n=110;n>0;n--);
}
void init(){ //初始化
TMOD = 0x01;//定义定时器0的工作方式1
TH0 = (65536-50000)/256;//装初值
TL0 = (65536-50000)%256;
EA = 1;//开总中断
ET0 = 1;//开定时器中断
TR0 = 1;//启动定时器
}
void main(){
init();
while(1){
display(shi,ge);//调用显示函数
}
}
//显示函数,显示个位和十位
void display(CHAR shi,CHAR ge){
wela = 1;
P1 = 0x10;
wela = 0;
P1 = 0xff;
dula = 1;
P1 = LED_CODES[shi];
dula = 0;
delayxms(5);
wela = 1;
P1 = 0x20;
wela = 0;
P1 = 0xff;
dula = 1;
P1 = LED_CODES[ge];
dula = 0;
delayxms(5);
}
//中断函数
void T0_timer() interrupt 1{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
j++;
if(j==20){
j=0;
i++;
if(i==60)
i = 0;
shi = i/10;
ge = i%10;
}
}
