|
利用51单片机测小车的速度。
- #include <reg52.h>
- #define uint unsigned int
- #define ulong unsigned long
- #define uchar unsigned char //定义一下方便使用
- sbit d0=P2^0; // 数度公共端
- sbit d1=P2^1; // 数度公共端
- sbit d2=P2^2; // 数度公共端
- sbit d3=P2^3; // 数度公共端
- uchar code ledp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0xa0};//数字显示 //数字显示
- uchar code ledpd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带小数点的数字显示
- uint l,c,x,x1;
- uint a8; //进入循环的窗口
- uint i; //时间计数
- delay(uint t) //时间软件延时函数
- {
- uint z,x;
- for(z=0;z<t;z++)
- for(x=0;x<120;x++);
-
- }
- void int1() interrupt 0 //0外中断函数 接P3,2
- { x1=1;
- }
- void int0() interrupt 2 //2外中断函数 接P3,3 子弹先穿过P3,3
- {
- x=1;
- }
-
- void main(void) // 主程序
- {
- P1=0xc0; //P1口初始化
- d0=0;
- d1=0;
- d2=0;
- d3=0;
- TMOD=0x01; //工作方式
- TH0=0xff; //设置初值
- TL0=0xf6;
- TR0=1; //打开定时器
- IT1=1; //外中断低电位产生中断 2外中断函数 接P3,3
- EX1=1;
- IT0=1; //外中断低电位产生中断 0外中断函数 接P3,2
- EX0=1; //
- EA=1; //打开总中断
- a8=1;
-
-
- while(a8) //子弹发射完成后进入数度中断信号等待
- { while(x) //进入第2个线圈程序
- {
- if(TF0==1)
- {
- TF0=0;
- TH0=0xff; //设置初值 10us单位
- TL0=0xf6;
- i++;
- }
- if(x1==1)
- { x=0;
- x1=0;
- break;
- }
- }
- if(i!=0)
- {c=10000/i; //数度公式 i是指中断时间 这里显示的是实际速度 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];//带小数点 //个位
- delay(5);
- d3=0; d2=1;d1=1;d0=1;
-
- P1=ledp[c%10]; //小数点的后一位
- delay(5);
- l++; //循环累计 延时
- }
- if(l==450) //延时时间可更改
- {
- l=0;
- P1=ledp[0]; //速度显示完毕后,显示为0
- c=0; //速度归零
- i=0; //中断时间归零
- a8=0;
-
- break;
-
- }
- }
- }
复制代码
|
-
-
测速.docx
15.33 KB, 下载次数: 27, 下载积分: 黑币 -5
|