代码如下,错误在定义函数error处
#include <reg52.h>
#define LEDCA P0
#define shixu P2
#define key1 P3^0
#define key2 P3^1
/*0xFE最上=0
0xFD右上=1
0xFB右下=2
0xF7最下=3
0xEF左下=4
0xDF左上=5
0xBF中间=6
0x7F小数点=7
*/
int a[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //笔画
int b[8] = {0xFF,0xFE,0xFD,0xFC,0xFB,0xFA,0xF9,0xF8}; //收发器控制时序
int c[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF}; //数字+横杠
int shi = 0;
int feng = 0;
int miao = 0;
int i = 0; //计数单位
int x = 0;
int wei = 0;
int shan = 0;
int kaiguan = 0;
void delay_ms(unsigned num);
void init(){
EA = 1; //中断总开关
EX0 = 1; //外部中断开关
IT0 = 1; //下降沿触发
EX1 = 1;
IT1 = 1;
TMOD = 0x01; //T0为工作方式1
ET0 = 1; //计时器开关
TR0 = 1; //计时器运行开关
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256; //设置50ms为一个计数单位
PX0 = 1; //外部中断优先
PX1 = 1;
}
void shizhong(){ //时间计算法则
if(miao>=60){
miao = miao%60;
feng++;
}
if(feng>=60){
feng = feng%60;
shi++;
}
if(shi>=24){
shi = shi%24;
}
}
void show(){
int d[8];
d[0] = miao%10;
d[1] = miao/10;
d[2] = 10;
d[3] = feng%10;
d[4] = feng/10;
d[5] = 10;
d[6] = shi%10;
d[7] = shi/10;
for(x = 0;x<=7;x++){
shixu = b[x];
if(wei==1 && x==0){
if(shan==0){
LEDCA = c[d[x]];
}else{LEDCA = 0xFF;}
}else if(wei==2 && x==1){
if(shan==0){
LEDCA = c[d[x]];
}else{LEDCA = 0xFF;}
}else if(wei==3 && x==3){
if(shan==0){
LEDCA = c[d[x]];
}else{LEDCA = 0xFF;}
}else if(wei==4 && x==4){
if(shan==0){
LEDCA = c[d[x]];
}else{LEDCA = 0xFF;}
}else if(wei==5 && x==6){
if(shan==0){
LEDCA = c[d[x]];
}else{LEDCA = 0xFF;}
}else if(wei==6 && x==7){
if(shan==0){
LEDCA = c[d[x]];
}else{LEDCA = 0xFF;}
}else{
LEDCA = c[d[x]];
}
delay_ms(100);
}
}
void yiwei(){
if(kaiguan == 1 && key1 == 0){
wei++;
if(wei == 7){
TR0 = 1;
wei = 1;
}
}
void error(){
if(kaiguan == 1 && key2 == 0){
switch (wei){
case 1:
miao--;
shizhong();
break;
case 2:
miao = miao-10;
shizhong();
break;
case 3:
feng--;
shizhong();
break;
case 4:
feng = feng-10;
shizhong();
break;
case 5:
shi--;
shizhong();
break;
case 6:
shi = shi-10;
shizhong();
break;
}
}
}
void main(){
init();
while(1){
yiwei();
for(shan = 0;shan<4;shan++){
show();
}
delay_ms(100);
}
}
void EXINTO0() interrupt 0{
TR0 = !TR0;
kaiguan = !kaiguan;
}
}
void EXINTO1() interrupt 2{
EX1 = 0;
switch (wei){
case 0:
break;
case 1:
miao++;
shizhong();
break;
case 2:
miao = miao+10;
shizhong();
break;
case 3:
feng++;
shizhong();
break;
case 4:
feng = feng+10;
shizhong();
break;
case 5:
shi++;
shizhong();
break;
case 6:
shi = shi+10;
shizhong();
break;
}
EX1 = 1;
}
void TIMER0() interrupt 1{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;//恢复初值
i++;
if(i==20){
miao++;
shizhong();
i = 0;
}
}
void delay_ms(unsigned num){
unsigned int x,y ;
for(x=num;x>0;x--);
for(y=110;y>0;y--);
}