基于51单片机自行车码表设计

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

由于仿真中没有霍尔传感器,实际呢霍尔就是感应磁信号,输出高低电平的脉冲信号,这样用脉冲就可以了,不同的频率代表电机转速的快慢
51hei.png 51hei.png

制作出来的实物图如下:
IMG_4227.JPG IMG_4225(1).JPG IMG_4224(1).JPG IMG_4226.JPG IMG_4228(1).JPG

自行车码表元件清单
1)    9*15万用板
2)    AT89C51单片机
3)    40脚IC座
4)    1602液晶
5)    16p母座
6)    16p排针
7)    10k电阻
8)    1K电阻
9)    轻触按键
10)    5MM LED灯(红色)
11)    103电位器
12)    3v直流电
13)    直流电机底座
14)    磁铁*2
15)    501电位器
16)    3144霍尔传感器
17)    10uf电解电容
18)    30pf瓷片电容*2
19)    12M晶振
20)    自锁开关*2
21)    DC电源插口
22)    导线若干
23)    USB电源线或电池盒

单片机源程序如下:

#include


#define uchar unsigned char

#define uint unsigned int


sbit COUNT_IN=P3^2;


//定义1602相关管脚

sbit rs=P2^7;

sbit en=P2^6;


uint count;

unsigned long Velocity,Mileage;

bit flag;

uchar code tab1[]={"  Speed:      km/h"};        

uchar code tab2[]={"Mileage:  .   km"};       


void delay(uint x)

{

        uint i,j;

        for(i=0;i        for(j=0;j<110;j++);

}

void init()

{

        IT0=1;        //INT0负跳变触发       

    TMOD=0x01;//定时器工作于方式1

        TH0=0x3c;          //50ms

        TL0=0xb0;

        EA=1; //CPU开中断总允许

        ET0=1;//开定时中断

        EX0=1;//开外部INTO中断

    TR0=1;//启动定时

}

/********液晶写入指令函数与写入数据函数,以后可调用**************/


void write_1602com(uchar com)//****液晶写入指令函数****

{

        rs=0;//数据/指令选择置为指令

        P0=com;//送入数据

        delay(1);

        en=1;//拉高使能端,为制造有效的下降沿做准备

        delay(1);

        en=0;//en由高变低,产生下降沿,液晶执行命令


}



void write_1602dat(uchar dat)//***液晶写入数据函数****

{

        rs=1;//数据/指令选择置为数据

        P0=dat;//送入数据

        delay(1);

        en=1; //en置高电平,为制造下降沿做准备

        delay(1);

        en=0; //en由高变低,产生下降沿,液晶执行命令

}



void lcd_init()//***液晶初始化函数****

{

        uchar a;

        write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据

        write_1602com(0x0c);//开显示不显示光标

        write_1602com(0x06);//整屏不移动,光标自动右移

        write_1602com(0x01);//清显示


        write_1602com(0x80);//显示固定符号从第一行第1个位置之后开始显示

        for(a=0;a<16;a++)

        {

                write_1602dat(tab1[a]);//向液晶屏写固定符号部分

        }

        write_1602com(0x80+0x40);//显示固定符号写入位置,从第2个位置后开始显示

        for(a=0;a<16;a++)

        {

                write_1602dat(tab2[a]);//写显示固定符号

        }

}


void display()

{

                //                        1km/h=100m/0.1h                   360s

                //                        10km/h=100m/0.01h          36s

                //                        100km/h=100m/0.001h  3.6s


                write_1602com(0x80+9);

                if(Velocity/100==0)

                write_1602dat(' ');

                else

                write_1602dat(0x30+Velocity/100);

                if((Velocity/100+Velocity%100/10)==0)

                write_1602dat(' ');

                else

                write_1602dat(0x30+Velocity%100/10);

                write_1602dat(0x30+Velocity%10);//数字+30得到该数字的LCD1602显示码


                write_1602com(0x80+0x40+8);

                write_1602dat(0x30+Mileage/1000000);//数字+30得到该数字的LCD1602显示码

                write_1602dat(0x30+Mileage%1000000/100000);//数字+30得到该数字的LCD1602显示码

                write_1602com(0x80+0x40+11);

                write_1602dat(0x30+Mileage%100000/10000);//数字+30得到该数字的LCD1602显示码

                write_1602dat(0x30+Mileage%10000/1000);//数字+30得到该数字的LCD1602显示码

               

                write_1602dat(0x30+Mileage%1000/100);//数字+30得到该数字的LCD1602显示码

}


void main()

{

        init();

        lcd_init();

        while(1)

        {

                display();

        }

}


void EXINT0() interrupt 0

{

        count++;

}


void time0() interrupt 1

{

        uchar m;

        TH0=0x3c;

        TL0=0xb0;         //50ms

        m++;

        if(m>=10)

        {

                m=0;

                Mileage=Mileage+Velocity*500/36;                 //里程m=速度km/h*1000*5/3.6

                Velocity=count/5;//将100ms内的脉冲数

                count=0;               

        }

}


  • IMG_1599.JPG

  • IMG_1601.JPG

关键字:51单片机  自行车码表  霍尔 引用地址:基于51单片机自行车码表设计

上一篇:51单片机驱动触摸屏综合实验源程序
下一篇:增量式pid控制 单片机源程序

推荐阅读最新更新时间:2024-11-12 13:59

51单片机对激光器电流的精度控制的设计方案
引 言   近年来,随着光电技术的迅猛发展,激光器已广泛应用于医疗、国防、测量等各个领域。而环境温度变化会直接影响激光器的波长。把关键元件(如高性能晶振、SAW 滤波器、光放大器、激光二极管) 的本机温度限制在窄范围内,可以提高电子系统的精度。一般需要将温度控制在0. 1 ℃内,激光器的工作精度才能很好地保持在0. 1nm 内 。文中的设计方案能为大功率半导体激光器提供有效支持,最大电流可达2. 5A。   1  半导体激光控制器的设计   激光控制器由受控恒流源,温度监视及控制电路,主控制器及显示器构成。整体结构原理见图1。 1. 1  受控恒流源:   为了使激光器输出稳定的激光,对流过激光器的电流要求非常严格
[单片机]
用<font color='red'>51单片机</font>对激光器电流的精度控制的设计方案
51单片机控制步进电机硬件连接部分
1、概要: 本案例讲解的内容是51单片机控制步进电机硬件连接部分。后续会分别讲解单片机程序,S曲线加减速方法,上位机等相关内容 2、功能原理图: 2.1、51单片机: ①输出脉冲到TB6600驱动器PUL端口,从而控制步进电机转动 ②控制TB6600驱动器ENA端口,从而控制步进电机使能 ③控制TB6600驱动器DIR端口,从而控制步进电机转动方向 2.2、步进电机: ①提供机械动力 2.3、稳压电源: ①为步进电机提供电源 2.4、TB6600驱动器: ①二相四线步进电机专用驱动器 3、实物图: ** ①** 、51****单片机控制板一个 ** ②** 、二相四线步进电机一个 ** ③** 、稳压电源一个 ** ④** 、
[单片机]
<font color='red'>51单片机</font>控制步进电机硬件连接部分
51单片机驱动DS12C887的时钟芯片C语言程序
本程序旨在读出DS12C887的时间,显示部分只做了分和秒的部分,已通过测试,详细注释很好用的。 #include absacc.h #include reg51.h #define uchar unsigned char #define MCA XBYTE /*寄存器A*/ #define MCB XBYTE /* 寄存器B*/ #define MCC XBYTE /* 寄存器C*/ #define MCD XBYTE /*寄存器D */ #define HOURW XBYTE /*时报警*/ #define SECONDW XBYTE /*秒报警*/ #define YEAR XB
[单片机]
一款51单片机电子钟制作(C语言)
/*一款电子钟程序,此电子钟是四位电子钟数码管组成的,功能分别有走时、响闹、走时间调整、闹钟时间调整等功能!调整部分分别由三个按键实现,一个功能键,一个+(加)键,另一个为-(减)键,其它功能键是复用功能!*/ 硬键介绍:数码管个位.十位.百位.千位.小数点分别接P0.0 P0.1 P0.2 P0.3 P0.4。蜂鸣器接P3.5脚,功能按键接P3.2 加按键接P3.3 减按键接P3.4 以下是两张图片!!! #include reg52.h //头文件 #define uchar unsigned char//宏定义 #define uint unsigned int//宏定义 uchar shi,fen,nshi,nfe
[单片机]
一款<font color='red'>51单片机</font>电子钟制作(C语言)
AT89C51单片机直流电机PWM调速程序
这是一款AT89C51单片机直流电机PWM调速程序,程序可以直接用于AT89C52、AT89S51、AT89S51,STC89C51、STC89C52单片机中,单片机晶振采用11.0592M,直流电机由L298集成电路控制,产生的PWM的频率约为91Hz。L298各引脚已在程序中标明,原理图大家可以自己画一下,这里就不具给出。下面是源程序。 #include[reg52.h //注意请把‘ [ ’换成 ,下同。否则编译时会出错。 #include [intrins.h // #define uchar unsigned char #define uint unsigned int sbit en1=P2^0;
[单片机]
ROHM面向车载应用开发出高耐压霍尔IC新产品
42V的业界超高耐压,支持2.7V~38V的宽工作电压范围 全球知名 半导体制造 商ROHM(总部位于日本京都市)面向使用到磁场检测的车载应用开发出新的霍尔IC“BD5310xG-CZ / BD5410xG-CZ系列”。 近年来,随着汽车的电动化和高性能化发展,以及舒适性和安全性的提高,在汽车中电子产品的应用越来越多,而控制这些电子产品的ECU(电子控制单元)和附带的传感器已成为不可或缺的组成部分。在传感器类产品中,霍尔IC能够以非接触方式进行位置检测和电机旋转检测,与机械式开关相比,具有不易磨损、体积小、可配备保护电路等诸多优点,因此其应用尤为广泛。ROHM将在移动设备和消费电子领域多年积累的霍尔IC技术优势与高耐压工艺
[汽车电子]
ROHM面向车载应用开发出高耐压<font color='red'>霍尔</font>IC新产品
霍尔效应旋转位置传感器在交通运输应用中大展身手
霍尔效应旋转位置传感器用于测量、监测和数据反馈,是众多交通运输和工业应用不可分割的组成部分。 在大部分私人交通工具或重工业机动车辆中,都有各式各样的零配件、开关和传感器,其中一种颇为值得关注的零配件——霍尔效应旋转位置传感器,该传感器可能应用于轿车、卡车、公交车和船舶等应用中。 霍尔效应旋转位置传感器,旨在通过磁场而不是机械电刷或机械齿轮来测量运动元件的角位置。该类型传感器使用一个带磁偏置的霍尔效应集成电路 (IC),在执行一系列操作的同时,感应执行器轴的旋转移动。执行器轴的旋转,会改变集成电路相对于磁铁的位置,从而使磁通密度发生变化,将集成电路的输出转换为90°行程内的线性输出,为驾驶员或车辆子系统提供反馈。
[汽车电子]
C51单片机的中断体系结构
80C51的中断系统有5个中断源(8052有 6个) ,2个优先级,可实现二级中断嵌套 。MCS-51系列单片机中断系统的机构如下: 与中断系统相关的特殊寄存器: 1)中断允许控制寄存器(IE)------ 控制各中断的开放和屏蔽 2)中断优先级控制寄存器(IP)------设置各中断的优先级 3)定时器/计数器控制寄存器(TCON)----定时器和外部中断的控制 4)串行口控制寄存器(SCON)------串行中断的控制 中断类型分为三类: 1)T0、T1是2个定时器/计数器中断,由片内定时器提供; 2)INT0、INT1是2个外部中断,由引脚P3.2和P3.2提供; 3)RX、TX为串行口中断所用,由片内串口提供。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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