天ノ忆 发表于 2021-12-17 14:01 哈哈哈 |
你真应该感谢这些替你找到错误的人,毕竟你这代码我看一眼就不想看了,他们忍着吃%一样的恶心给你找错误挺不容易的 |
第55行的if跑到keyscan外了 |
连缩进都不愿意,出这种错误就是活该。
|
#include<reg51.h> #define uchar unsigned char sbit start=P1^1; sbit stop=P1^0; uchar code dulatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40} ;//数字编码0-9 uchar code welatab[]={0xfe, 0xfd} ;//位控制字 uchar msec, sec; void delay(uchar time)// 延时 { uchar i, j; for (i=0;i<time;i++) for (i=0;j<110;j++); } void writeled(uchar num ,addr) { P2=0xff; P0=dulatab[num]; P2=welatab[addr]; delay(4); } void display(uchar sec) { uchar sech,secl ; sech=sec/10; secl=sec%10; writeled(sech,0); writeled(secl,1) ; } void init () { TMOD=0x10;//定时器1工作方式1 TH1=0xd8; TL1=0xf0; TR1=1; EA=1; ET1=1; } void keyscan() { if(start==0) { delay(2) ; if(start==0) { TR1=~TR1; while(start==0) { display(sec); } } } if(stop==0&&TR1==0) { delay(2);//延时方抖 if(stop==0) { sec=0; while(stop==0) { display(sec); } } } } void main() { init(); while(1) { display(sec); keyscan(); } } void timer1() interrupt 3 { TH1=0xd8; TL1=0xf0; msec++; if(msec==100) { msec=0; sec++; if(sec==100) { sec=0; } } } |
第55行改成if((stop==0)&&(TR1==0))试试。 |