把t=0放到cnt[1]=table[count%10]; m=0; 后面,并使EA=0,在if(A1==0 && flag==0) //按键扫描里面添加EA=1; |
刚写错了是 if(init==1&&flag==0) |
本帖最后由 1692483014 于 2020-7-16 12:31 编辑 display函数一行改为 if(init==1&&flag==0) 就好了 |
//----------------试试以下代码 #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit A1=P3^4; sbit A2=P3^5; uint m=0; //uint t,d,e,f; uchar code table[]={0x14,0xde,0x38,0x1a,0xd2,0x13,0x11,0x9e,0x10,0x12}; uchar cnt[6]={0};//小数缓存 bit flag=0; bit init=0; unsigned long SysTick,count,t; //new add void delay(void) //误差 0us { unsigned char a,b,c; for(c=67;c>0;c--) for(b=124;b>0;b--) for(a=167;a>0;a--); } void start() { TMOD=0x01; //T0 使用工作方式 1 TH0=(65536-1000)/256; //1ms 定时 TL0=(65536-1000)%256; EA=1; ET0=1; TR0=1; } void display() //显示子程序,从第一位开始逐位显示't 00秒 000毫秒' { static uint j; if(flag) P0=0xbf;//等待计数时显示'-' else { if(init==1) for(j=6;j>0;j--) {P0=cnt[j]; delay(); } } } void main(void) { start(); P0=0xb7;//上电提示符 while(1) { if(A1==0) //按键扫描 { flag=1; //count=0; //t=0; //init=1; } if(A2==0 && flag==1) { while(!A2); flag=0; cnt[6]=0xbf; cnt[5]=table[t/10000]; cnt[4]=table[t/1000%10];//加秒点 cnt[3]=table[t/100%10]; cnt[2]=table[t/10%10]; cnt[1]=table[t%10]; //m=0; } display(); } } void time0(void) interrupt 1 //T0 中断服务子程序 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; SysTick++; if(A1==0) { count = SysTick; } if(A2==0 && flag==1) { t = SysTick - count; flag = 0; } } |