基于51单片机的自行车测速测距程序

发布者:boyatang最新更新时间:2020-08-06 来源: 51hei关键字:51单片机  自行车测速测距 手机看文章 扫描二维码
随时随地手机看文章

实物图如下:

电路原理图如下:

单片机源程序如下:
#include
#include
#define CIRCLE  2.0   //宏定义 车轮的周长(这个要根据实际的车轮进行设置)
sbit Signal = P1^0;   //这里的Signal表示的是霍尔传感器的信号引脚
int m_second=0; //定义变量m_second,用来记录时间(以毫秒为单位)
float speed=0.0 ;  //定义速度变量
float length=0.0 ;//定义路程变量
void main()
{
        lcd_init(); //初始化液晶函数
        TMOD = 0x01; //打开定时器0,并设定其工作方式为16位定时模式。
        TH0=(65536-10000)/ 256;
        TL0=(65536-10000)% 256;   //设定定时器的初值,使得没10ms中断一次
        EA = 1;   //允许总中断
        ET0 = 1;   //允许定时器0终端
        TR0 = 1;  //启动定时器0
while(1)     //大循环
{
    while(Signal); //等待霍尔传感器信号线拉低;
        speed = CIRCLE *1000/ m_second ; //计算速度。
        m_second = 0;   //计时清零
        length+=CIRCLE ; //路程加一个车轮周期
                        //第一行,显示速度
        lcd_pos(0x00);  //设定液晶的写入位置为第一行第一格
        lcd_wdat('S');
        lcd_wdat('p');
        lcd_wdat('e');
        lcd_wdat('e');
        lcd_wdat('d');
        lcd_wdat(':');
        lcd_wdat((int)speed/10+0x30);        //显示速度的整数部分
        lcd_wdat((int)speed%10+0x30);
        lcd_wdat('.');
        lcd_wdat((int)(speed*10)%10+0x30 );        //显示速度的小数第一位
        lcd_wdat('m');
        lcd_wdat('/');
        lcd_wdat('s');
         
                        //第二行,显示里程
        lcd_pos(0x40);  //设定液晶的写入位置为第二行第一格
        lcd_wdat('L');
        lcd_wdat('e');
        lcd_wdat('n');
        lcd_wdat('g');
        lcd_wdat('t');
        lcd_wdat('h');
        lcd_wdat(':');
        lcd_wdat((int)length /10000+0x30);    //显示里程的万位;
        lcd_wdat((int)length %10000/1000+0x30);//显示里程的千位;
        lcd_wdat((int)length %1000/100+0x30);    //显示里程的百位;
        lcd_wdat((int)length %100/10+0x30);    //显示里程的十位;
        lcd_wdat((int)length %10+0x30);    //显示里程的个位;
        lcd_wdat('m');
        while(!Signal);
}

}
void  timer0_intt()  interrupt 1   //
{
        TH0=(65536-10000)/ 256;
        TL0=(65536-10000)% 256;   //设定定时器的初值,使得没10ms中断一次
        m_second += 10;  //因为中断每10毫秒一次,所以这里每次加10;
}
#include
#include

/*****************************************************************************
函数功能:LCD延时子程序
入口参数:ms
出口参数:
*****************************************************************************/
static void delay(unsigned char ms)
{
        unsigned char i;
        while(ms--)
                {
                for(i = 0; i< 5; i++);
                }
}

/*****************************************************************************
函数功能:测试LCD忙碌状态
入口参数:
出口参数:result
*****************************************************************************/
static bit lcd_bz()
{
        bit result;
        rs = 0;
        rw = 1;
        ep = 1;
        delay(5);
        result = (bit)(P0 & 0x80);
        ep = 0;
        return result;
}

/*****************************************************************************
函数功能:写指令数据到LCD子程序
入口参数:cmd
出口参数:
*****************************************************************************/
static void lcd_wcmd(unsigned char cmd)
{
        while(lcd_bz()); //判断LCD是否忙碌
                rs = 0;
                rw = 0;
                ep = 0;
                delay(5);
                P0 = cmd;
                        delay(5);
                ep = 1;
                        delay(5);
                ep = 0;
}

/*****************************************************************************
函数功能:设定显示位置子程序
入口参数:pos
出口参数:
*****************************************************************************/
void lcd_pos(unsigned char pos)
{
        lcd_wcmd(pos | 0x80);
}

/*****************************************************************************
函数功能:写入显示数据到LCD子程序
入口参数:dat
出口参数:
*****************************************************************************/
void lcd_wdat(unsigned char dat)
{
        while(lcd_bz()); //判断LCD是否忙碌
                rs = 1;
                rw = 0;
                ep = 0;
                P0 = dat;
                        delay(5);
                ep = 1;
                        delay(5);
                ep = 0;
}

/*****************************************************************************
函数功能:LCD初始化子程序
入口参数:
出口参数:
*****************************************************************************/
void lcd_init()
{
        lcd_wcmd(0x38);
        delay(100);
        lcd_wcmd(0x0c);
        delay(100);
        lcd_wcmd(0x06);
        delay(100);
        lcd_wcmd(0x01);
        delay(100);
}
/*****************************************************************************
函数功能:LCD写入一个整形数据
入口参数:int x
*****************************************************************************/
void  lcd_write_int(unsigned int x)  
{
        unsigned char x1,x2,x3,x4,x5;
        x1 = x/10000;
        x2=x%10000/1000;
        x3=x%1000/100;
        x4=x%100/10;
        x5=x%10;
        lcd_wdat(x1+0x30);
        lcd_wdat(x2+0x30);
        lcd_wdat(x3+0x30);
        lcd_wdat(x4+0x30);
        lcd_wdat(x5+0x30);
}
#ifndef __STAR1602_H__
#define __STAR1602_H__

sbit rs= P2^6;      //
sbit rw = P2^5;  //     
sbit ep = P2^7;  //


void  lcd_init();                  //液晶初始化函数
void  lcd_pos(unsigned char pos);   //设定液晶的显示位置函数
void  lcd_wdat(unsigned char dat);  //液晶写入字符
void  lcd_write_int(unsigned int x);     //液晶显示一个整形变量

关键字:51单片机  自行车测速测距 引用地址:基于51单片机的自行车测速测距程序

上一篇:单片机高效率代码读取18B20 显示在LCD1602上
下一篇:51单片机OLED12864 I2C接口使用教程

推荐阅读最新更新时间:2024-11-07 11:23

基于51单片机的温室测试系统
设施农业是世界现代农业发展的主要方向之一,我国农业正处于从传统也向高产、优质、高效为目的的现代化农业转化新阶段,设施农业是我国今后比较长的时间内农业发展的个主要方向。 环境控制对果树生产的重要作用已经为国内外大量的科学实验和生产的实践所证实。只有在适宜的生长环境下果疏才能充分发挥其高产潜力。多年的有关果树生长环境的研究,不仪知道了农业生产,也为温室环境测控的研究提供了理论和依据。但如何利用传感器技术,白动检测技术,通讯技术,计算机技术的发展和温室栽培的推广研制出对温室温度,湿度,二氧化碳浓度的智能测控系统,为果树提供最佳的生长环境,一直是农业研究者面临的重要课题。 虽然国外采用了全智能控制,但是他们的成本太高,不适合我国国情,
[测试测量]
51单片机定时闹钟程序(带按键)
电路图很简单,数码管是用2片573 接到p2口,通过p0.0 和P0.1锁存控制,详见单片机开发板上面的电路:http://www.51hei.com/f/51hei-5.pdf , 大家可以按里面的图接,只需要端口要改为本程序中的即可.可通过按键实现设置定时的时间.小时分秒设置等等. //////////////////包含头文件及宏定义////////////////////////////////////// #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int //////////////////
[单片机]
51单片机:8x8点阵显示心形图案
单片机开发板是自己做的,电路很简单8*8点阵的行和列分别接在单片机的p0口和p1口,p0口记得要上拉电阻哦,我测试成功见图片, #include reg52.H unsigned char code tab ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code graph ={0x30,0x48,0x44,0x22,0x44,0x48,0x30,0x00}; unsigned char cnta; void main(void) { unsigned int i,j; TMOD=0x01; TH0=(65536-2000)/256; TL0=(6553
[单片机]
<font color='red'>51单片机</font>:8x8点阵显示心形图案
51单片机-------数码管(实验报告)【无74HC753】
一 实验目的: 实验3:使用PO和P2端口实现数码管从0-7的显示效果: (1) 掌握C语言编程单片机控制程序的方法。 (2) 掌握使用Keil4软件编写、编译、调试程序的方法。 (3) 掌握使用Proteus软件绘制电路原理图、硬件仿真和程序调试。 (4) 理解和掌握共阴极数码管的显示原理和编码(记忆)。 (5) 熟悉使用51单片机P0(开漏)和P1(推挽)端口实现对外部用电器和电路的控制。 二、实验硬件和软件: 计算机1台、并安装Proteus8.6软件和Keil4软件。 三、试验任务: 使用Proteus排线连接的方式,在单片机I/O口(P2和P0)上外接上拉电阻和数码管,最终实现数码管从0-7显示效果,为最终的实训
[单片机]
<font color='red'>51单片机</font>-------数码管(实验报告)【无74HC753】
基于51单片机的汉字LCD智能显示模块设计
引言 在电子产品设计中,人机交互显示界面是必不可少的工作,目前一般使用的液晶显示器均为七段笔划式,只能显示数字和少量字符,功能往往受到局限,对于较复杂的字符或图形则无能为力。而LCD智能型显示模块则是一种低功耗、低损耗、低价值的显示器件,它不但可以显示各式各样的字符、汉字和图形,同时具有可编程能力,且与单片机接口方便,基于以上优点,LCD智能显示模块获得了广泛的应用。 系统组成 本系统主要由三部分组成,分别为单片机,LCD模块和FLASH字库,图1所示是该系统的硬件原理框图,由于显示所需要占用的资源过多(本设计采用的是16×16点阵,每个汉字存储需要32个字节),而单片机内部RAM资源及其有限,所以系统设计时有必要扩展—FL
[应用]
基于AT89S51单片机的冲床控制器的设计
本文介绍了一种用Atmel89S51单片机仿真PLC控制的方法,设计适合刚性离合器冲床的控制器,介绍了用光电隔离的输入输出电路的基本构成和工作原理,重点介绍了内部键盘显示电路的设计思想,同时给出了冲床控制的电器原理图。 系统硬件配置以AT89S51单片机为核心。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4Kb ISP(In-system programmable)可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,内置看门狗(WDT)电路。 功能强大的AT89S51可为许多嵌入式控制应用系统
[单片机]
51单片机原理及汇编教程(一)之51单片机结构及原理
一、51单片机常用知识  1、数制    4个二进制位,即4位 —— 半字节    8个二进制位,即8位 —— 一个字节    16个二进制位,即16位 —— 双字节,也叫字    32个二进制位,即32位 —— 双字,也叫长字   计算机中有符号数有三种表示方法,①原码②补码③反码。在计算机系统中,数值一律用补码表示和存储,0表示“+”也就是正数,1表示“-”也就是负数。 补码的转化方式:  ①正数,补码与原码相同。  ②负数,所有位取反,+1。 2、51单片机的存储  程序存储器一般用ROM来存放,即Read Only Memory。51单片机只有4K的ROM,即4x1024个字节,地址空间从0000H到0FF
[单片机]
<font color='red'>51单片机</font>原理及汇编教程(一)之<font color='red'>51单片机</font>结构及原理
51单片机怎么区分位地址和字节地址?
在51单片机中,有些存储区可以位寻址也可以字节寻址的, 那么比如01H这个地址是表示位还是字节的 ? 怎么区分地址是位地址还是字节地址的 ? 网友(三块石头): 在位指令中的地址就是位地址,在字节操作指令中的地址就是字节地址。例如: SETB 01H ; 这里的01H就是位地址 MOV 01H, #00H ; 这里的01H就是字节地址 不在指令中,单独说一个xx数,没法看出来是字节还是位地址
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved