问题遇到的现象和发生背景
代码运行出错,看不出来哪里错误
问题相关代码,请勿粘贴截图
#include <reg51.h>
#include <stdio.h>
unsigned char second=20, time0 = 100 ,time1=50,county=6;//定时计数变量
unsigned char seg[]={0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0x8f,0x9f}; //BCD字段码
unsigned char con[]={0xfe,0xfd}; //位选
sbit NB_G=P0^0;
sbit NB_Y=P0^1;
sbit NB_R=P0^2;
sbit DX_G=P0^3;
sbit DX_Y=P0^4;
sbit DX_R=P0^5;
bit DXT=1; //初始设定东西通,切换方向
void showtime(); //子函数原型声明,显示函数
main(){
unsigned int i,j;
for(j=6;j>=1;j--){ //开始所有灯闪烁几次
P0=~P0;
for(i=50000;i>0;i--);}
P0=0xFF;
for(i=50000;i>0;i--);
NB_R=0;DX_G=0; //南北红(P02),东西绿(P03)
showtime(); //调用显示函数
TMOD=0X11; //定时器0、1设为工作方式1
TL0=-10000;TH0=-10000>>8; //装初值,10ms定时
TL1=-10000;TH1=-10000>>8;
EA=1;ET0=1;ET1=1; //开中断
TR0=1; //启动T0
while(1);
}
void isr_time0() interrupt 1{
TL0=-10000;TH0=-10000>>8;
showtime(); //调用显示函数
time0--;
if (time0==0){ //到1s
time0=100;
second--;//改变数码管显示值
showtime(); //动态显示刷新
if (second==0){ //到20s
TR0=0; TR1=1; //关闭T0、启动T1
second=3; //从3开始倒计时
showtime(); //动态显示刷新
if (DXT){ //是否东西通
DX_G=1;
DX_Y=0; } //东西黄亮
else{
NB_G=1;
NB_Y=0; } //南北黄亮
}
}
}
void isr_time1()interrupt 3{
TL1=-10000;
TH1=-10000>>8;
showtime(); //调用显示函数
time1--;
if(time1==0){ //到0.5s
time1=50;
if (county%2!= 0) {
second--; //到1s
showtime(); } //动态显示刷新
county--;
if(county){ //闪烁未结束
if(DXT){DX_Y=~DX_Y;}
else{NB_Y=~NB_Y;}
}
else{ //闪烁结束
county=6;
if (DXT){ //切换灯的状态
DX_Y=1;DX_R=0;
NB_R=1;NB_G=0;
}
else{
DX_R=1;DX_G=0;
NB_Y=1;NB_R=0;
}
TR1=0;TR0=1; //关闭T1、启动T0
DXT=~DXT; //另一方向通车
second=20; //从20开始倒计时
showtime();}
}
} //动态显示刷新
void showtime(){ //显示子函数
unsigned int i,j;
//unsigned char time[2];
//time[0]=second/10; //十位
//time[1]=second%10; //个位
//for(j=10000000;j>0;j--);
//P1=0xFF; //关闭位选
for(i=10;i>=0;i--){
P1=seg[i]; //数据、位选同时送出
for(j=1000000000;j>0;j--); //延时
}
}
运行结果及报错内容
"D:\Program Files (x86)\Proteus 8 Professional\Tools\MAKE\RunTool.exe" --good-exits=0,1 --executable=BL51.exe "main.OBJ" TO "Debug.OMF"
BL51 BANKED LINKER/LOCATER V6.22 - SN: Eval Version
make: *** [Debug.OMF] Error 1
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009
*** ERROR L121: IMPROPER FIXUP
MODULE: MAIN.OBJ (MAIN)
SEGMENT: ABSOLUTE
OFFSET: 000BH
*** ERROR L121: IMPROPER FIXUP
MODULE: MAIN.OBJ (MAIN)
SEGMENT: ABSOLUTE
OFFSET: 001BH
******************************************************************************
* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 018DH BYTE (19%) *
******************************************************************************
Program Size: data=27.1 xdata=0 code=541
LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 2 ERROR(S)
错误代码2
我想要达到的结果
开始所有灯闪烁三次,先南北红灯,东西绿灯,并倒计时20秒;倒计时结束南北红灯不变,东西黄灯闪烁三次并倒计时3秒;然后东西红灯,南北绿灯,并倒计时20秒;倒计时结束东西红灯不变,南北黄灯闪烁三次并倒计时3秒,反复循环