找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3519|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机小车的速度检测,中断输入P3.3,P3.4

[复制链接]
跳转到指定楼层
楼主
利用51单片机测小车的速度。



  1. #include <reg52.h>   
  2. #define uint  unsigned int
  3. #define ulong unsigned long
  4. #define uchar unsigned char //定义一下方便使用

  5. sbit d0=P2^0; // 数度公共端
  6. sbit d1=P2^1; // 数度公共端
  7. sbit d2=P2^2; // 数度公共端
  8. sbit d3=P2^3; // 数度公共端
  9. uchar code  ledp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0xa0};//数字显示 //数字显示
  10. uchar code ledpd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带小数点的数字显示
  11. uint l,c,x,x1;
  12. uint a8;  //进入循环的窗口
  13. uint i;    //时间计数

  14. delay(uint t)   //时间软件延时函数
  15.    {
  16.      uint z,x;
  17.    for(z=0;z<t;z++)
  18.    for(x=0;x<120;x++);
  19.    
  20.     }

  21. void int1() interrupt 0    //0外中断函数 接P3,2
  22. { x1=1;
  23. }
  24. void int0() interrupt 2   //2外中断函数 接P3,3        子弹先穿过P3,3
  25. {
  26.   x=1;  
  27.   }         
  28.   
  29. void main(void) // 主程序

  30. {  
  31.   P1=0xc0; //P1口初始化
  32.     d0=0;
  33.     d1=0;
  34.     d2=0;
  35. d3=0;
  36. TMOD=0x01; //工作方式
  37. TH0=0xff; //设置初值
  38. TL0=0xf6;
  39. TR0=1;  //打开定时器
  40. IT1=1;   //外中断低电位产生中断   2外中断函数 接P3,3     
  41. EX1=1;

  42.   IT0=1;   //外中断低电位产生中断   0外中断函数 接P3,2
  43. EX0=1; //
  44. EA=1;     //打开总中断

  45. a8=1;
  46.    
  47.             
  48. while(a8)    //子弹发射完成后进入数度中断信号等待
  49.    { while(x) //进入第2个线圈程序
  50.         {
  51.           if(TF0==1)
  52.             {
  53.               TF0=0;
  54.               TH0=0xff; //设置初值 10us单位
  55.               TL0=0xf6;
  56.               i++;
  57.             }
  58.    if(x1==1)  
  59.    { x=0;
  60.     x1=0;            
  61.     break;
  62.    }      
  63.             }
  64. if(i!=0)
  65. {c=10000/i;   //数度公式   i是指中断时间   这里显示的是实际速度  10000距离为0.1米

  66.   d0=0; d1=1;d2=1; d3=1;  
  67.      
  68.   P1=ledp[c/1000%10];  //百位     
  69.    delay(5);  //百位显示延时 可以更改  时间很短
  70.    
  71.   
  72.   d1=0; d0=1;d2=1; d3=1;
  73.    
  74.   P1=ledp[c/100%10];  //十位
  75.       delay(5);
  76.      
  77.   d2=0; d1=1;d0=1; d3=1;
  78.   
  79.   P1=ledp[c/10%10];//带小数点 //个位   
  80.     delay(5);


  81.   d3=0; d2=1;d1=1;d0=1;
  82.    
  83.   P1=ledp[c%10];  //小数点的后一位
  84. delay(5);
  85.     l++;    //循环累计  延时
  86. }
  87.   if(l==450)   //延时时间可更改
  88.    {
  89.    l=0;
  90.    P1=ledp[0]; //速度显示完毕后,显示为0
  91.    c=0;   //速度归零
  92.    i=0;    //中断时间归零
  93.    a8=0;
  94.   
  95.    break;
  96.    
  97. }
  98. }
  99.    }

复制代码


测速.docx

15.33 KB, 下载次数: 27, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表