proteus计时表仿真图+程序,下面是原理图:
51单片机源程序:
- //简易计时表,未开始计时时8循环左移,INT0计时开始,INT1计时停止,精确度为0.1s
- //单片机晶振选择12MHZ
- //收获,定时器计算1us为一个指令周期,可以通过公式直接 求的所需时间
- //在数据传输很容易犯错误,因此要注意在草稿纸上演练
- //在获得数值与运用数值时,除了必要的数据转化,尽量不要处理,直接运用有利于减少错误
- #include<reg52.h>
- unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void System_Init();
- unsigned char flag=0;
- unsigned int Timer,Time;
- unsigned char Dissbuf[3]={0,0,0};
- void main()
- {
- unsigned char i=0;
- System_Init();
- while(1)
- {
-
- if(flag==0)
- {
- i=Time/10;
- if(i%3==0)
- {P0=0x00;P2=0xff;P1=0xff;}
- if((i+2)%3==0)
- {P0=0xff;P2=0x00;P1=0xff;}
- if((i+1)%3==0)
- {P0=0xff;P2=0xff;P1=0x00;}
- }
- if(flag==1)
- {
- i=20;
- P0=0xff;
- P2=0xff;
- P1=0xff;
- while(i--);
- i=256;
- P0=Dissbuf[0];
- P2=Dissbuf[1];
- P1=Dissbuf[2];
- while(i--);
- }
- }
- }
- void System_Init()
- {
-
- TMOD = 0x01;
- TH0 = (65535-50000)/256;
- TL0 = (65535-50000)%256;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- IT0=1;
- EX0=1;
- IT1=1;
- EX1=1;
- }
- void into() interrupt 0
- {
- flag=1;
- P0=0xff;
- P2=0xff;
- P1=0xff;
- Time=0;
- TR0=1;
- }
- void TIMER0() interrupt 1
- {
- TH0 = (65535-50000)/256;
- TL0 = (65535-50000)%256;
- Timer++;
- if(Timer==2)
- {
- Timer=0;
- Time++;
- if(Time==999)
- {Time=0;}
- Dissbuf[0]=M[Time%10];
- Dissbuf[1]=M[Time%100/10]-0x80;
- Dissbuf[2]=M[Time/100];
- }
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
单片机计时表仿真工程文件和源码下载:
计时器.zip
(80.91 KB, 下载次数: 13)
|