我定時50MS,數碼管顯示+1. 但是仿真時,延遲函數卻沒有用上,這是怎么回事呢?- #include <reg51.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit WE=P2^0;
- sbit DU=P2^1;
- sbit S1=P3^4;
- sbit S2=P3^5;
- uchar num,i,jia;
- uint Q,W,E,R;
- uchar code duan[]={
- 0x3F, //"0"
- 0x06, //"1"
- 0x5B, //"2"
- 0x4F, //"3"
- 0x66, //"4"
- 0x6D, //"5"
- 0x7D, //"6"
- 0x07, //"7"
- 0x7F, //"8"
- 0x6F, //"9"
- 0x77, //"A"
- 0x7C, //"B"
- 0x39, //"C"
- 0x5E, //"D"
- 0x79, //"E"
- 0x71, //"F"
- 0x76, //"H"
- };
- void fangdou()
- {
- uint a;
- for(a=0;a<2400;a++);
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=120;y>0;y--);
- }
- void display()
- {
- if(i>0&&!i<9)
- {
- WE=1;
- P0=0xfe;
- WE=0;
-
- P0=duan[i%10];
- DU=1;
- DU=0;
- delay(1);
- }
- if(i>10&&!i<99)
- {
- WE=1;
- P0=0xfc;
- WE=0;
- P0=duan[i%100/10];
- DU=1;
- DU=0;
- delay(1);
- }
- if(i>100&&!i<999)
- {
- WE=1;
- P0=0xf8;
- WE=0;
- P0=duan[i%1000/100];
- DU=1;
- DU=0;
- delay(1);
- }
- if(i>1000&&!i<9999)
- {
- WE=1;
- P0=0xf0;
- WE=0;
- P0=duan[i/1000];
- DU=1;
- DU=0;
- delay(1);
- }
- }
- void timer0_init()
- {
- TMOD=0x01;
- TL0=(65536-50000)%256;
- TH0=(65536-50000)/256;
- TR0=1;
- }
- void main()
- {
- timer0_init();
- while(1)
- {
- if(TF0==1)
- {
- TF0=0;
- TL0=(65536-50000)%256;
- TH0=(65536-50000)/256;
- num++;
- }
- if(num==20)
- num=0;
- i++;
- display();
- if(i>9999)
- i=0;
-
- }
- }
-
復制代碼
|