proteus仿真出错,提示源程序有错。但错在哪里就看不懂了。麻烦高手帮我看看 5
#include"reg51.h"#definecharunsignedcharcharcodedis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0...
#include"reg51.h"
#define char unsigned char
char code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0xb2,0xf8,0x80,0x90,0xff,0xbf};
//共阳极LED数码管的“0~9”“灭”“-”的字码段
char code scan_con[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//位选择码
char data dis[8]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};
//时分秒初始为0
char data timedata[3]={0x00,0x00,0x00};
//分别为秒、分、小时的值
char data ms50=0x00,con=0x00,con1=0x00,con2=0x00;
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
//1ms延时函数
void delay1ms(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
//按键处理函数
void keyscan()
{
EA=0;
if(key0==0)
{delay1ms(10);
while(key0==0);
con++;TR0=0; ET0=0;
if(con>2)
{con=0;TR0=1;ET0=1;
}
if(con!=0)
{
if(key1==0)
{
delay1ms(10);
while(key0==0);
timedata[con]++;
if(con==2)con1=24;else con1=60;
if(timedata[con]>=con1)
timedata[con]=0;
}
}
if(con!=0)
{
if(key2==0)
{
delay1ms(10);
while(key2==0);
timedata[con]--;
if(con==2)con2=23;else con2=59;
if(timedata[con]<=0)
timedata[con]=con2;
}
}
}
EA=1;
}
//数码管显示函数
void scan()
{
char k;
dis[0]=timedata[0]%10; dis[1]=timedata[0]/10;
dis[3]=timedata[1]%10; dis[4]=timedata[1]/10;
dis[6]=timedata[2]%10; dis[7]=timedata[2]/10;
for(k=0;k<8;k++)
{
P0=dis_7[dis[k]];
P2=scan_con[k];
delay1ms(1);
P2=0xff;
}
}
//主函数
main()
{TH0=0x3c;
TL0=0xb0;
TMOD=0x01;
ET0=1;
TR0=1;
EA=1;
while(1)
{scan();
keyscan();
}
}
//定时、计数器T0中断服务函数
void time_intt0() interrupt 1
{ ET0=0;
TR0=0;
TH0=0x3c;
TL0=0xb0;
TR0=1;
ms50++;
if(ms50==20)
{ ms50=0x00;timedata[0]++;
if(timedata[0]==60)
{
timedata[0]=0;timedata[1]++;
if(timedata[1]==60)
{
timedata[1]=0;timedata[2]++;
if(timedata[2]==24)
{
timedata[2]=0;
}
}
}
}
ET0=1;
} 展开
#define char unsigned char
char code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0xb2,0xf8,0x80,0x90,0xff,0xbf};
//共阳极LED数码管的“0~9”“灭”“-”的字码段
char code scan_con[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//位选择码
char data dis[8]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};
//时分秒初始为0
char data timedata[3]={0x00,0x00,0x00};
//分别为秒、分、小时的值
char data ms50=0x00,con=0x00,con1=0x00,con2=0x00;
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
//1ms延时函数
void delay1ms(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
//按键处理函数
void keyscan()
{
EA=0;
if(key0==0)
{delay1ms(10);
while(key0==0);
con++;TR0=0; ET0=0;
if(con>2)
{con=0;TR0=1;ET0=1;
}
if(con!=0)
{
if(key1==0)
{
delay1ms(10);
while(key0==0);
timedata[con]++;
if(con==2)con1=24;else con1=60;
if(timedata[con]>=con1)
timedata[con]=0;
}
}
if(con!=0)
{
if(key2==0)
{
delay1ms(10);
while(key2==0);
timedata[con]--;
if(con==2)con2=23;else con2=59;
if(timedata[con]<=0)
timedata[con]=con2;
}
}
}
EA=1;
}
//数码管显示函数
void scan()
{
char k;
dis[0]=timedata[0]%10; dis[1]=timedata[0]/10;
dis[3]=timedata[1]%10; dis[4]=timedata[1]/10;
dis[6]=timedata[2]%10; dis[7]=timedata[2]/10;
for(k=0;k<8;k++)
{
P0=dis_7[dis[k]];
P2=scan_con[k];
delay1ms(1);
P2=0xff;
}
}
//主函数
main()
{TH0=0x3c;
TL0=0xb0;
TMOD=0x01;
ET0=1;
TR0=1;
EA=1;
while(1)
{scan();
keyscan();
}
}
//定时、计数器T0中断服务函数
void time_intt0() interrupt 1
{ ET0=0;
TR0=0;
TH0=0x3c;
TL0=0xb0;
TR0=1;
ms50++;
if(ms50==20)
{ ms50=0x00;timedata[0]++;
if(timedata[0]==60)
{
timedata[0]=0;timedata[1]++;
if(timedata[1]==60)
{
timedata[1]=0;timedata[2]++;
if(timedata[2]==24)
{
timedata[2]=0;
}
}
}
}
ET0=1;
} 展开
展开全部
你的源码是 C 写的,不自行使用C编译器编译,
却取名为 KEYPAD.ASM,并让 Proteus 自带的组译器来组译
实在是牛头不对马嘴
却取名为 KEYPAD.ASM,并让 Proteus 自带的组译器来组译
实在是牛头不对马嘴
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你发的源程序没有发现错误,我在单片机上运行正常的呀?
更多追问追答
追问
是用proteus仿真时没有错误吗?我在keil上调试运行也是正常的,就是和电路图联调就错了,错误提示就是那个截图。。。。
追答
哦,没有用proteus仿真,你把proteus的文件给我,我试一下。我的proteus7.4版的。你的是什么版本的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询