wulin 发表于 2019-3-15 21:17 不错不错,这才是负责任的回答!楼主记得打偿黑币哟! |
参与人数 5 | 黑币 +52 | 收起 理由 |
---|---|---|
![]() | + 8 | 很给力! |
![]() | + 16 | |
![]() | + 10 | 很给力! |
![]() | + 10 | 很给力! |
![]() | + 8 | 很给力! |
定时器设置有错误、延时函数有错误、显示程序位置错误。改好了。 #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit wela=P2^7; sbit dula=P2^6; void display(); void init(); void delay(uint z); uchar bai,shi,ge,temp,temp1; uchar aa; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void main() { init(); //初始化之程序 while(1) { if(aa==20) { aa=0; temp++; if(temp>120) { temp=0; } bai=temp/100; shi=temp%100/10; ge =temp%10; } display(); } } void init() { wela=0; dula=0; temp=0; temp1=0; TMOD=0x01; TH0=(63556-50000)/256; // TH0=(63556-50000)%256; TL0=(63556-50000)%256; TR0=1; EA=1; ET0=1; } void timer0() interrupt 1 { TH0=(63556-50000)/256; // TH0=(63556-50000)%256; TL0=(63556-50000)%256; aa++; } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=120;y>0;y--); } void display() //显示1-100变化的子程序 { P0=0xfe; wela=1; wela=0; P0=table[bai]; dula=1; dula=0; delay(2); P0=0xfd; wela=1; wela=0; P0=table[shi]; dula=1; dula=0; delay(2); P0=0xfb; wela=1; wela=0; P0=table[ge]; dula=1; dula=0; delay(2); } |
你的delay延时程序有问题,for(x=z;x>0;x++)和 for(y=z;y>0;y++)语句中分别应该是x--和y--,而不应该是x++和y++。话又说回来,累加到溢出=0应该也行吧,但你的x、y又是unsigned int型,这个延时也太长了吧 |