要求: 设计一个汽车速度测速系统,已知车轮直径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); 附录 单片机测量系统主程序如下: - #include <reg51.h>
- #include <stdio.h>
- #define uchar unsigned char
- #define unit unsigned int
- #define ulong unsigned long
- #define R 5
- #define PI 314 //段暄定义
- sbit P0_0=P0^0;
- sbit P0_1=P0^1;
- sbit P0_2=P0^2;
- sbit P0_3=P0^3;
- sbit P0_4=P0^4;
- sbit P0_5=P0^5;
- sbit P0_6=P0^6;
- sbit P0_7=P0^7;
- //位选定义
- sbit P2_0=P2^0;
- sbit P2_1=P2^1;
- sbit P2_2=P2^2;
- sbit P2_3=P2^3;
- uchar SEG_TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- ulong js=0;
- uchar k=0;
- void main()
- {
- int ss=js*2*PI*R;
- TMOD=0x51;
- TL1=0x00; TH1=0x00;
- TL0=0x00;TH0=0x4c;
- IE=0x82;
- TR0=1;//定时开始
- 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);
- }
- }
- void timero(void) interrupt 1 //中断子程序
- {
- TR1=0; TR0=0;
- TF0=0;
- TL0=0x00;
- TH0=0x4c;
- k++;
- if(k>=20)
- {
- js=TH1*256+TL1;
- TH1=0; TL1=0; k=0;
- }
- js=0; TR0=1;
-
- }
- void delay(unsigned int time)
- {
- unsigned int j=0;
- for(;time>o;time--);
- for(j=0;j<125;j++);
-
-
- }
复制代码
完整的Word格式文档51黑下载地址:
基于单片机的速度测量系统.doc
(46.5 KB, 下载次数: 47)
|