51单片机 用定时器T1控制两位数码管做从0计数到60的实验,每一秒加1,可是怎都不显示,求高手帮忙找原因

//****************************************************************//用定时器T0和T1分别控制P1…同... //****************************************************************
//用定时器T0和T1分别控制P1…同时数码管从0增加到60,循环
//****************************************************************
#include<reg52.h>
#define uchar unsigned char
uchar shi,ge;
uchar num1 = 0;
uchar num2 = 0;
sbit dula = P2^6;
sbit wela = P2^7;
void delay(int);
void display(uchar,uchar);
uchar code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};

void main(void)
{
TMOD = 0X10; //T1工作方式1,16位定时器
TH1 = (65536-46080)/256; //赋初值
TL1 = (65536-46080)%256;
EA = 1; //开中断
ET1 = 1;
TR1 = 1;
while(1)
{
display(shi,ge); //显示函数
}
}
//************************************
//****************延时函数************ //用于动态扫描
//************************************
void delay(int i)
{
int x,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);
}
//************************************
//*************display函数********
//************************************
void dispiay(uchar ge,uchar shi)
{
dula = 1;
P0 = table[shi];
dula = 0;
P0 = 0xff;

wela = 1;
P0 = 0xfe;
wela = 0;
delay(2);

dula = 1;
P0 = table[ge];
dula = 0;
P0 = 0xff;

wela = 1;
P0 = 0xfd;
wela = 0;
delay(2);
}

//*********************************
//*************中断T1**************
//*********************************

void Timer_1() interrupt 3
{
TH1 = (65536-46080)/256;
TL1 = (65536-46080)%256;
num1++;
if(num1 == 20) // 1s
{
num1 = 0;
num2++;
if(num2 == 60) //计数到60
{
num2 = 0; //清零
}
shi = num2/10; //分离两位数
ge = num2%10;

}

}

该程序编译后如图:无错误,3警告。但不提示警告在哪里,版本为Keil uVision2.下载后板子无反应,请问前辈们这是怎么回事??
展开
 我来答
a451993547
2013-11-06 · TA获得超过1593个赞
知道小有建树答主
回答量:595
采纳率:100%
帮助的人:709万
展开全部
通过定时器初值可以看出单片机使用的是11.0592MHz晶振

把函数void dispiay(uchar ge,uchar shi)
改成void display(uchar shi,uchar ge)
即可编译通过

只是函数拼写错误和变量顺序错误
siduestc
2013-11-06 · TA获得超过527个赞
知道小有建树答主
回答量:655
采纳率:100%
帮助的人:146万
展开全部
第一个问题:
如果你的晶振是12M的话
你的TH1 和TL1 的设置,表示你大约定时20ms,20ms*20=400ms
你需要的是1s定时,不是400ms定时

第二个问题是:

你的函数定义是 void dispiay(uchar ge,uchar shi)
你的调用却是 display(shi,ge); //显示函数
两个形参是相反的

第三个问题:★★★★★★★★★这是最主要的问题所在
你的函数申明和定义中:void dispiay(uchar,uchar); 将其中的 l 错写成 i 了
但是你的函数调用却是拼写正确的,所以函数调用失败
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式