#include<reg52.h> //51头文件
#define uchar unsigned char //重定义变量
#define uint unsigned int
sbit u1=P2^6; //申明U1锁存器锁存端
sbit u2=P2^7; //申明U2
uchar code cbw[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void cc(uchar);
uchar num0,num;
void timeplay(uchar num) //数码管显示函数
{
uint shi,ge;
shi=num/10; //分离出要显示数字
ge=num%10;
u1=1;
P0=cbw[shi]; //送十位段选数据
u1=0;
P0=0xff; //防混乱
u2=1;
P0=0xfe;
u2=0;
cc(5); //延时
u1=1;
P0=cbw[ge]; //送个位段选数据
u1=0;
P0=0xff; //防混乱
u2=1;
P0=0xfd;
u2=0;
cc(5); //延时
}
void mian() //主函数
{
TMOD=0x01; //设置定时器0为工作方式1
TH0=(65536-45872)/256; //装入初值50ms一次中断
TL0=(65536-45872)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
while(1) //数码管循环扫描
{
timeplay(num);
}
}
void cc(uchar a) //延时函数
{
uint i,j;
for(i=a;i>0;i--) //延时a毫秒
for(j=110;j>0;j--);
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256; //重装初值
TL0=(65536-45872)%256;
num0++;
if(num0==20) //如遇到20次中断,1秒到了,重新再记20次
{
num0=0;
num++;
if(num==60) //60秒到了,记秒变量归零
num=0;
}
}
编译程序的时候有
WARNING L16:UNCALLED SEGMENT , IGNORED FOR OVERLAY PROCESS
SEGMENT: ?RR?MIAN? P2_5
而且在实验板上运行也有严重问题,数码管全部都在亮,而且还有“哔哔哔”的声音。
PS:运行说明,这个程序是让TX-1C学习板上的数码管一二位显示60秒倒计时的。
程序结构上是没有任何问题的,郭老师这么教的....
主要问题已经发现了,是main写错了,其他运行良好。
P0=0xff //防混乱
这个事郭老师书上写的防止位选出现混乱,他的程序里面都是这样写的哦
呵呵
郭天祥的...发现是main出问题了哈,谢谢您的热心哦
还是wolf同志比较犀利哈,一语中的~
本回答被提问者采纳