附件里面有程序和proteus仿真图,运行即可看到现象,用来显示hour的十位不正常,程序中有注明是哪段程序,把那段程序去掉显示就正常了,如果加上那段,点击运行秒不动,等一会儿才懂,走过几秒就又停止了,就是那段程序干扰了整个循环,还请帮忙看看怎么修改;还有就是是不是用proteus仿真定时不准,还是我的代码有问题,大概走1分钟会慢下来9秒
复制代码
- #include"reg51.h" //包含reg51.h头文件
- #define uchar unsigned char //宏定义
- #define uint unsigned int //宏定义
- sbit led1=P1^0; //定义LED连接关系
- sbit led2=P1^1;
- sbit w1=P2^0; //时-十位
- sbit w2=P2^1; //时-各位
- sbit w3=P2^2; //分-十位
- sbit w4=P2^3; //分-个位
- sbit w5=P2^4; //秒-十位
- sbit w6=P2^5; //秒-个位
- uchar sec,min,hour,num; //定义变量
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阳极字码表
- void delay(uint ims) //延时子函数
- {
- uint i,j;
- for(i=ims;i>0;i--) //ims为多少就是多少ms
- for(j=110;j>0;j--);
- }
- void main() //主函数
- {
- TMOD=0x01; //设置为定时器0工作方式1定时器1工作方式1
- TH0=(65536-45872)/256; //装入定时初值
- TL0=(65536-45872)%256;
- EA=1; //开总中断
- ET0=1; //开定时器0中断
- TR0=1; //开定时器0
- while(1) //大循环
- {
- P0=table[sec%10];
- w6=0; //秒-个位
- delay(10);
- w6=1;
- P0=table[sec/10];
- w5=0; //秒-十位
- delay(10);
- w5=1;
-
- P0=table[min%10];
- w4=0; //分-个位
- delay(10);
- w4=1;
-
- P0=table[min/10];
- w3=0; //分-十位
- delay(10);
- w3=1;
- P0=table[hour%10];
- w2=0; //时-个位
- delay(10);
- w2=1;
-
- /************这段程序有问题**************/
- P0=table[hour/10];
- w1=0; //时-十位
- delay(10); //问题可能就是这个延时破坏了循环,请高手指教
- w1=1;
- /***************************************/
- if(num==20)
- {
- num=0;
- led1=~led1;
- led2=~led2;
- if(sec<59)
- sec++;
- else
- {
- sec=0;
- if(min<59)
- min++;
- else
- {
- min=0;
- if(hour<11)
- hour++;
- else
- hour=0;
- }
- }
- }
- }
- }
- void timer0()interrupt 1
- {
- TH0=(65536-45872)/256;
- TL0=(65536-45872)%256;
- num++;
- }
复制代码 [ 此贴被role_2099在2009-04-23 19:17重新编辑 ]