这是计时器的程序和电路图,用的bcd数码管,仿真不成功,不知道哪里错了,求大神解答

#include<reg52.h>
#include<absacc.h>
#define PA XBYTE[0x7CFF]
#define PB XBYTE[0x7DFF]
#define PC XBYTE[0x7EFF]
#define CADDR XBYTE[0x7FFF]
int xdata a[100]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,
0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,
0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x60,0x61,0x62,0x63,0x64,0x65,0x66,
0x67,0x68,0x69,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x80,0x81,0x82,0x83,
0x84,0x85,0x86,0x87,0x88,0x89,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99};
unsigned int ms=0;
unsigned int js=0;
unsigned int ds=0;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;

void delay(int j){
int i;
for(i=0;i<1000;i++);
}

void main()
{CADDR=0x80;
while(1)
{if(key1==0)
{while(1)
{delay(1000);
ms++;
if(ms==100){
ms=0;js++;
if(js==100){
js=0;ds++;
if(ds==100){
ms=js=ds=0;
}}}
PA=a[ds];PB=a[js];PC=a[ms];
if(key2==0)
{while(1)
{delay(100000)
if(key2==0) break;}
}
if(key3==0) {PA=PB=PC=0x00;ms=js=ds=0;}
if(key4==0) break;
}
}
}
}
这是计时器的程序和电路图,用的bcd数码管,仿真不成功,不知道哪里错了,求大神解答

/***程序仿真用89c52 数码管用共阳极数码管
P0口段选,P3.0和P3.1位选
定时器2用法见百度“T2CON”***/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code num[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //共阳极数码管0-9数组以及全灭和“-”符号
uchar data da[2]; //定义显示缓存
uint sec; //定义秒
uchar a; //显示位选择
//延时子程序
void d(uint i)
{uint j;
for(;i>0;i--)
for(j=110;j>0;j--);
}
//显示函数
void prt()
{
da[0]=sec/10;//十位存入显示缓存
da[1]=sec%10;//各位存入显示缓存
P0=num[da[a]];//将要显示的数据付给P0
d(5);//延迟一小段时间
P3<<=1;//P3数据向左移移位
P0=0xff;//消隐
a++;//显示数据指向下一位
if(a>1) {a=0; P3=0x01;}//第二个数据扫完,指向第一个数据
}
//定时器中断子函数
timer2() interrupt 5
{
static uchar t;
TF2=0;
t++;
if(t==20) //定时够20次即1s
{
t=0; //t清零
sec++; //秒加1
if(sec==60) sec=0; //
}
}
//主函数
void main()
{ //
RCAP2H=(65536-50000)/256; //
RCAP2L=(65536-50000)%256; //定时器2定时50MS
TR2=1; //启动定时器2
ET2=1; //打开定时器2中断
EA=1; //开总中断
P3=0x01;
while(1)
{prt(); //显示
}
}

望采纳···
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-12
可以 啊 真的