|
利用51單片機(jī)測小車的速度。
b3c11518763231126edb111a.jpg (160.74 KB, 下載次數(shù): 25)
下載附件
2018-5-31 15:10 上傳
- #include <reg52.h>
- #define uint unsigned int
- #define ulong unsigned long
- #define uchar unsigned char //定義一下方便使用
- sbit d0=P2^0; // 數(shù)度公共端
- sbit d1=P2^1; // 數(shù)度公共端
- sbit d2=P2^2; // 數(shù)度公共端
- sbit d3=P2^3; // 數(shù)度公共端
- uchar code ledp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0xa0};//數(shù)字顯示 //數(shù)字顯示
- uchar code ledpd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶小數(shù)點(diǎn)的數(shù)字顯示
- uint l,c,x,x1;
- uint a8; //進(jìn)入循環(huán)的窗口
- uint i; //時間計數(shù)
- delay(uint t) //時間軟件延時函數(shù)
- {
- uint z,x;
- for(z=0;z<t;z++)
- for(x=0;x<120;x++);
-
- }
- void int1() interrupt 0 //0外中斷函數(shù) 接P3,2
- { x1=1;
- }
- void int0() interrupt 2 //2外中斷函數(shù) 接P3,3 子彈先穿過P3,3
- {
- x=1;
- }
-
- void main(void) // 主程序
- {
- P1=0xc0; //P1口初始化
- d0=0;
- d1=0;
- d2=0;
- d3=0;
- TMOD=0x01; //工作方式
- TH0=0xff; //設(shè)置初值
- TL0=0xf6;
- TR0=1; //打開定時器
- IT1=1; //外中斷低電位產(chǎn)生中斷 2外中斷函數(shù) 接P3,3
- EX1=1;
- IT0=1; //外中斷低電位產(chǎn)生中斷 0外中斷函數(shù) 接P3,2
- EX0=1; //
- EA=1; //打開總中斷
- a8=1;
-
-
- while(a8) //子彈發(fā)射完成后進(jìn)入數(shù)度中斷信號等待
- { while(x) //進(jìn)入第2個線圈程序
- {
- if(TF0==1)
- {
- TF0=0;
- TH0=0xff; //設(shè)置初值 10us單位
- TL0=0xf6;
- i++;
- }
- if(x1==1)
- { x=0;
- x1=0;
- break;
- }
- }
- if(i!=0)
- {c=10000/i; //數(shù)度公式 i是指中斷時間 這里顯示的是實(shí)際速度 10000距離為0.1米
- d0=0; d1=1;d2=1; d3=1;
-
- P1=ledp[c/1000%10]; //百位
- delay(5); //百位顯示延時 可以更改 時間很短
-
-
- d1=0; d0=1;d2=1; d3=1;
-
- P1=ledp[c/100%10]; //十位
- delay(5);
-
- d2=0; d1=1;d0=1; d3=1;
-
- P1=ledp[c/10%10];//帶小數(shù)點(diǎn) //個位
- delay(5);
- d3=0; d2=1;d1=1;d0=1;
-
- P1=ledp[c%10]; //小數(shù)點(diǎn)的后一位
- delay(5);
- l++; //循環(huán)累計 延時
- }
- if(l==450) //延時時間可更改
- {
- l=0;
- P1=ledp[0]; //速度顯示完畢后,顯示為0
- c=0; //速度歸零
- i=0; //中斷時間歸零
- a8=0;
-
- break;
-
- }
- }
- }
復(fù)制代碼
|
-
-
測速.docx
2018-5-31 15:11 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
15.33 KB, 下載次數(shù): 27, 下載積分: 黑幣 -5
|