找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机的速度测量系统设计(程序+电路原理图)

[复制链接]
跳转到指定楼层
楼主
ID:457523 发表于 2018-12-28 18:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求:
设计一个汽车速度测速系统,已知车轮直径D一米,
器件清单: 光电传感器,单片机,共阳极数码管
本系统设计主要内容
1信号采集  这部分主要采用光电信号传感器采集信号,并传向单片机

2单片机数据处理   这部分主要才用单片机采用适当的算法,对相关数据进行相关运算并得出结果
3 Led数字显示     这部分主要通过7位共阳极数码管显示给用户。
4 protues仿真
。 光电脉冲发生器
   在车轮上安装光电传感器,轮子转一次得到一个脉冲,经过信号处理,通过T1口传到单片机,经过单片机处理,通过数码管显示。如图所示:


单片机测速系统总原理图
二. 系统程序设计:
本设计软件主要分为主程序,中断服务子程序,led数码管显示子程序三个部分。软件功能在keil中编写c语言实现。
中断函数程序如下:
void  timero(void) interrupt 1    //中断子程序
{
TR1=0; TR0=0;
TF0=0;
TL0=0x00;
TH0=0x4c;
k++;
if(k>=20)       //每50ms中断一次,那么当K》=20是就是1s,每一秒计算一次颛顼
{
   js=TH1*256+TL1;
   TH1=0; TL1=0;              k=0;
  }
js=0;  TR0=1;
}

三.Led显示子程序  主要通过控制共阳极来实现由p1线控制四个数码管
while(1)
{
P0=SEG_TAB[ss/10000];
P2_0=0;
delay(10);
P0=SEG_TAB[(ss%100000)/100];
P2_1=0;
delay(10);
P0=SEG_TAB[(ss%100000)%100/10];
P2_2=0;
delay(10);
P0=SEG_TAB[(ss%100000)%100%10];
P2_3=0;
delay(10);
附录
单片机测量系统主程序如下:
  1. #include <reg51.h>
  2. #include <stdio.h>
  3. #define uchar unsigned char
  4. #define unit unsigned int
  5. #define ulong unsigned long
  6. #define R   5
  7. #define PI  314  //段暄定义
  8. sbit  P0_0=P0^0;
  9. sbit  P0_1=P0^1;
  10. sbit  P0_2=P0^2;
  11. sbit  P0_3=P0^3;
  12. sbit  P0_4=P0^4;
  13. sbit  P0_5=P0^5;
  14. sbit  P0_6=P0^6;
  15. sbit  P0_7=P0^7;
  16. //位选定义
  17. sbit  P2_0=P2^0;
  18. sbit  P2_1=P2^1;
  19. sbit  P2_2=P2^2;
  20. sbit  P2_3=P2^3;
  21. uchar  SEG_TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  22. ulong js=0;
  23. uchar k=0;
  24. void main()
  25. {
  26. int ss=js*2*PI*R;
  27. TMOD=0x51;
  28. TL1=0x00;  TH1=0x00;
  29. TL0=0x00;TH0=0x4c;
  30. IE=0x82;
  31. TR0=1;//定时开始
  32. while(1)
  33. {
  34. P0=SEG_TAB[ss/10000];
  35. P2_0=0;
  36. delay(10);
  37. P0=SEG_TAB[(ss%100000)/100];
  38. P2_1=0;
  39. delay(10);
  40. P0=SEG_TAB[(ss%100000)%100/10];
  41. P2_2=0;
  42. delay(10);
  43. P0=SEG_TAB[(ss%100000)%100%10];
  44. P2_3=0;
  45. delay(10);
  46. }
  47. }
  48. void  timero(void) interrupt 1    //中断子程序
  49. {
  50. TR1=0; TR0=0;
  51. TF0=0;
  52. TL0=0x00;
  53. TH0=0x4c;
  54. k++;
  55. if(k>=20)
  56. {
  57.    js=TH1*256+TL1;
  58.    TH1=0; TL1=0;              k=0;
  59.   }
  60. js=0;  TR0=1;

  61. }
  62. void delay(unsigned int time)
  63. {
  64. unsigned int j=0;
  65. for(;time>o;time--);
  66.    for(j=0;j<125;j++);


  67. }
复制代码

完整的Word格式文档51黑下载地址:
基于单片机的速度测量系统.doc (46.5 KB, 下载次数: 47)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:620780 发表于 2019-10-29 22:16 | 只看该作者
没有proteus的文件吗
回复

使用道具 举报

板凳
ID:893774 发表于 2021-3-19 09:05 | 只看该作者
这个是不是无法仿真,得有实际测试才可以
回复

使用道具 举报

地板
ID:664656 发表于 2022-3-6 16:39 | 只看该作者
大佬大佬,程序里面的js是时间吗,如果是时间的话ss=js*2*PI*R该怎么理解
回复

使用道具 举报

5#
ID:664656 发表于 2022-3-12 22:09 | 只看该作者
大佬,我按照你的仿真做了没反应呀,就算加了时钟激励源也没反应这是为啥呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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