历史上的今天
返回首页

历史上的今天

今天是:2024年12月15日(星期日)

2021年12月15日 | 51单片机霍尔自行车里程测速仪设计升级版

2021-12-15 来源:eefocus

说明

1、单片机是通用的无论51还是52、无论stc还是at都一样,引脚功能都一样。

程序也是一样的。

2、原理图中的.ddb、.Bkp等格式是要用protelse打开的,没有软件的不要紧,

我已帮您转换成word格式和pdf格式的了。

3、程序中的.c文件可以用记事本(文本文档)打开,就是程序了。其他的是写程序是自动生成的,没什么用的。

4、可以按照正面布局,不要按照实物的背面焊接,要按照原理图焊接。


数码管脚位排布说明:

正面朝自己,秒点在下,左下为1脚,逆时针排布,左上为最后一个脚!请坛友焊接前弄清脚位排布再焊接!祝你们成功!


废话不多说,直接上实物图:


说明

1、单片机是通用的无论51还是52、无论stc还是at都一样,引脚功能都一样。

程序也是一样的。

2、原理图中的.ddb、.Bkp等格式是要用protelse打开的,没有软件的不要紧,

我已帮您转换成word格式和pdf格式的了。

3、程序中的.c文件可以用记事本(文本文档)打开,就是程序了。其他的是写程序是自动生成的,没什么用的。

4、可以按照正面布局,不要按照实物的背面焊接,要按照原理图焊接。


数码管脚位排布说明:

正面朝自己,秒点在下,左下为1脚,逆时针排布,左上为最后一个脚!请坛友焊接前弄清脚位排布再焊接!祝你们成功!

废话不多说,直接上实物图:


给CSDN论坛的朋友们分享一个51单片机做的霍尔自行车里程测速仪,资料很全 程序 设计论文都有.

说明

1、单片机是通用的无论51还是52、无论stc还是at都一样,引脚功能都一样。

程序也是一样的。

2、原理图中的.ddb、.Bkp等格式是要用protelse打开的,没有软件的不要紧,

我已帮您转换成word格式和pdf格式的了。

3、程序中的.c文件可以用记事本(文本文档)打开,就是程序了。其他的是写程序是自动生成的,没什么用的。

4、可以按照正面布局,不要按照实物的背面焊接,要按照原理图焊接。


数码管脚位排布说明:

正面朝自己,秒点在下,左下为1脚,逆时针排布,左上为最后一个脚!请坛友焊接前弄清脚位排布再焊接!祝你们成功!


废话不多说,直接上实物图:

霍尔自行车测速电路原理图:

BOM LIST

单片机霍尔自行车里程测速仪参考源程序:


//目的:学习编程

//说明1:P00—P07:a-----dp P27—P24:com1-----com4 P34切换显示 P32—INT0 一个磁钢

//说明2:此程序针对车轮周长为207cm,其他型号周长,可改变参数就行

//说明3:数码管从左至右 高------低

#include

#include"juxun001.h"

//主函数=====================

void main()

{

time0_int0_init();//定时器0和外部中断0的初始化

while(!TR0) //上电一直未切割时就显示 0.0.0.0

{

init_display();

}

while(1)

{

if(!change)//按下切换按键显示里程

{

delay1m(5);

if(!change)

{

flag = ~flag;

}

while(!change);

}


}

}


//==定时器0中断函数

void time0_interrupt()interrupt 1

{

TL0 = (65536 - 5000) % 256;// 12M晶振,5ms定时

TH0 = (65536 - 5000) / 256;

display_function();

time_counter++;

time_counter8++;

if(time_counter8 >= 1600)//大于8s没切割,车子视为停下了,速度为:0,但里程还记着

{

time_counter8 = 0;

speed = 0;//速度为 0

point1 = 0;

buf1[3] = speed%10;buf1[2] = speed/10%10;

buf1[1] = speed/100%10;buf1[0] = speed/1000%10;

}

}

//==========外部中断0中断函数=

void int0_interrupt()interrupt 0

{

external_counter++;

if(external_counter ==1 )TR0 = ~TR0;//第一次切割打开定时器0

if(external_counter == 65535)external_counter = 0;

time_counter8 = 0; //只要8秒内有切割,车子就任在运行


if(external_counter % 2 == 0)//切割2次 更新下速度

{ //*5是因为中断一次是5MS

if(flag10){speed =((ulong)(36000)*zhouchang)/(time_counter * 5);flag1=1;}

else if(flag11){speed =((ulong)(36000)2zhouchang)/(time_counter * 5);}//速度:单位为 m/h ,*1000的目的是不出现浮点数


if((speed >= 100)&&(speed < 1000)) //100 ---- 1000 3位整数

{

point1 = 1;buf1[3] = speed%10;buf1[2] = speed/10%10;

buf1[1] = speed/100%10;buf1[0] = 0;}

else if((speed >= 1000)&&(speed < 10000)) //1000 ---- 10000 4位整数

{

point1 = 1;speed = (uint)speed;

buf1[3] = speed%10;buf1[2] = speed/10%10;

buf1[1] = speed/100%10;buf1[0] = speed/1000%10;}

else if((speed >= 10000)&&(speed < 100000)) //10000 ----- 100000 5位整数

{

point1 = 2;

buf1[3] = speed/10%10;buf1[2] = speed/100%10;

buf1[1] = speed/1000%10;buf1[0] = speed/10000%10;}

else if((speed >= 100000)&&(speed < 1000000)) //100000 ------ 1000000 6位整数

{

point1 = 3;

buf1[3] = speed/100%10;buf1[2] = speed/1000%10;

buf1[1] = speed/10000%10;buf1[0] = speed/100000%10;}

time_counter = 0;

}

if(external_counter % 8 == 0)//每切割8次 更新下里程

{

s = (ulong)external_counter * zhouchang; //里程:单位为 cm

if((s >= 1000)&&(s < 10000))

{

point2 = 1; // 0.012 001212

buf2[3] = s/100%10;buf2[2] = s/1000%10;

buf2[1] = 0;buf2[0] = 0;}// 4位整数

else if((s >= 10000)&&(s < 100000))

{

point2 = 1;

buf2[3] = s/100%10;buf2[2] = s/1000%10;

buf2[1] = s/10000%10;buf2[0] = 0;}// 5位整数 0.123 012345

else if((s >= 100000)&&(s < 1000000))

{

point2 = 1;

buf2[3] = s/100%10;buf2[2] = s/1000%10;

buf2[1] = s/10000%10;buf2[0] = s/100000%10;} // 6位整数 1.234 1234 56

else if((s >= 1000000)&&(s < 10000000))

{

point2 = 2;

buf2[3] = s/1000%10;buf2[2] = s/10000%10;

buf2[1] = s/100000%10;buf2[0] = s/1000000%10;}// 7位整数 1234 567

else if((s >= 10000000)&&(s < 100000000))

{

point2 = 3;

buf2[3] = s/10000%10;buf2[2] = s/100000%10;

buf2[1] = s/1000000%10;buf2[0] = s/10000000%10;} // 8位整数 1234 5678

}

}

//==========开电源就显示的数据,初始显示速度

void init_display()

{

uchar i;

for(i = 0;i < 4;i++)

{

wei = bitcode[num - 1];

led = display1[buf1[num–]];

delay1m(4);

if(num == 0)num = 4;

}

}

//==显示函数=

void display_function()

{

if(flag == 0)//显示速度

{

switch(point1)

{

case 0:wei = bitcode[num-1];led = display1[buf1[num-1]];num–;break;//速度显示 0

case 1:if(num == 1){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf1[num-1]];num–;}break;//最高位小数点亮


case 2:if(num == 2){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf1[num-1]];num–;}break;//第二高位小数点亮


case 3:if(num == 3){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf1[num-1]];num–;}break;//第三高位小数点亮

default:break;


}

if(num == 0)num = 4;

}

else if(flag == 1)//显示里程

{

switch(point2)

{

case 0:wei = bitcode[num-1];led = display1[buf2[num-1]];num–;break;//里程显示 0


case 1:if(num == 1){ wei = bitcode[num-1];led = 0x7f&display1[buf2[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf2[num-1]];num–;}break;//最高位小数点亮


case 2:if(num == 2){ wei = bitcode[num-1];led = 0x7f&display1[buf2[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf2[num-1]];num–;}break;//第二高位小数点亮


case 3:if(num == 3){ wei = bitcode[num-1];led = 0x7f&display1[buf2[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf2[num-1]];num–;}break;//第三高位小数点亮

default:break;


}

if(num == 0)num = 4;

}

}

//=================定时器0和外部中断0的初始化函数=

void time0_int0_init()

{

TMOD |= 0x01;

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

TL0 = (65536 - 5000) % 256;//12M晶振,5ms定时

TH0 = (65536 - 5000) / 256;

IT0 = 1;//外部中断0,负跳变触发方式

TR0 = 0;

ET0 = 1;

EX0 = 1;

EA = 1;

}

//==========ms 级延时函数=

void delay1m(uchar x)

{

uchar i,j;

for(i=0;ifor(j=0;j<120;j++); //数120 次,约1 ms

}

推荐阅读

史海拾趣

CONEC公司的发展小趣事

在电子行业中,技术的突破和创新是企业持续发展的关键。CONEC深知这一点,因此不断投入研发资源,力求在技术上取得突破。通过多年的努力,公司在某些关键技术领域取得了重要进展,如高速数据传输、低损耗材料应用等。这些技术突破不仅提升了公司的产品性能和质量,也使其在行业中保持了领先地位。

福斯特半导体(Foster)公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,CONEC始终坚持产品创新。1985年,D-SUB滤波连接器的推出,是公司技术实力和市场洞察力的体现。这一创新产品不仅满足了当时市场对高性能连接器的需求,也为公司在电子行业中树立了良好的口碑。此后,CONEC不断推出新产品,逐步扩大市场份额,成为全球电子行业的重要参与者。

First Sensor公司的发展小趣事

为了进一步提升公司的竞争力和市场影响力,CONEC开始了国际化布局。1990年,康耐加拿大公司的成立,标志着公司迈出了国际化的重要一步。随后,CONEC在德国、捷克共和国、美国和波兰等地设立分公司或生产基地,形成了全球性的生产和销售网络。同时,公司还积极寻求与全球领先的电子企业和技术机构的战略合作,共同推动电子行业的发展。

长江微电(cjiang)公司的发展小趣事

随着新能源汽车市场的快速发展,汽车电子领域对电感产品的需求不断增长。长江微电敏锐地捕捉到这一市场机遇,加大了对汽车电子领域的投入力度。公司推出的车规级系列电感产品广泛应用于汽车LED驱动电路、汽车多媒体系统、车联网系统等领域。凭借优异的产品性能和稳定可靠的质量保障,长江微电在汽车电子领域树立了良好的口碑和品牌形象。

Accelink Technologies Co Ltd公司的发展小趣事

在发展过程中,长江微电始终坚持自主创新之路。公司注重人才培养和团队建设,积极引进高端人才和先进技术。同时,公司还建立了完善的研发体系和创新机制,鼓励员工发挥创新精神和创造力。通过自主创新,长江微电在电感产品领域取得了多项核心技术和专利成果,为公司的持续发展提供了强大动力。

以上五个故事分别从不同角度展现了长江微电(CJIANG)公司的发展历程和成就。这些故事不仅记录了公司的发展历程和成长轨迹,也彰显了其坚韧不拔、创新求变的精神和追求卓越、服务客户的理念。

Dailywell Electronics Co Ltd公司的发展小趣事

德利威电子一直注重技术创新和研发实力的提升。2001年,公司成功研发了高绝缘开关并导入生产,进一步巩固了其在电子开关领域的领先地位。此外,公司还不断投入研发资金,推出了一系列具有创新性和竞争力的新产品。例如,在2004年,公司成功研发了超迷你开关,这一产品以其小巧的体积和优良的性能迅速在市场上获得了广泛认可。

问答坊 | AI 解惑

史上最强动物机CES登场 Marvell Plug Computer 3.0

完全无风扇,内置硬盘,5W功耗(一代指标,含硬盘也不会超过10W),千兆以太+WiFi,Kernel-2.6支持,动物机的绝配啊。 由于目前spec尚未发布,因此仅知道是基于 2 GHz Marvell ARMADA 300处理器,内置硬盘 WiFi 蓝牙 USB2.0 及千兆以太。内存大小 ...…

查看全部问答>

(电子电气工程师必知必会)中文版

下载 (86.56 KB) 2010-4-16 21:49 “作者强调大局观和直觉,从实际出发,这对于我们这些专业人员有着不可估量的重要性。强烈推荐本书”         ——Rick Nelson,Test&Measurement World杂志主编   “本书弥补了学校教育的缺陷。 ...…

查看全部问答>

Windows CE及其开发工具.pdf

Windows CE及其开发工具.pdf…

查看全部问答>

用VS2005开发pocket pc如何配置仿真器网络环境

刚接触,不知道如何配置仿真器的网络环境…

查看全部问答>

在VHDL语言中怎么实现矩阵运算

请问在FPGA上怎么实现矩阵运算? 哪位大虾介绍点资料 邮箱:ldwmmch@163.com …

查看全部问答>

求助串口高手

哪位大侠用过TI公司的TL16C554芯片啊。我现在被这个折磨了很久了还没解决掉。 我在自己作的DSP板子上用的,554自己发送数据时不会出错,但554接收0xFF、0xFA等之类的数据时会变成为零。接收其他数据正确。用示波器测试数据在到达接收引脚时候都是 ...…

查看全部问答>

出个人闲置DSP2812+XDS510USB

现因个人转行原因出06年购合众达DSP2812+XDS510一套。。价格一套共:600元 有意请加QQ:350563705 或致电:13828499087…

查看全部问答>

请教模电知识

  问题:在答案中为什么说“使输出的正方向电压有可能高于电源电压”,这句话应该怎么理解?还能高于电源电压很费解,请高手们指点。谢谢 。还有两个问题:反馈的电流方向是不是由T2管的基极经R3到C2再到输出端呀?从而降低R3中的电流, ...…

查看全部问答>

关于atmel烧录的问题

刚买了块at89lv51,可是在stc的开发板上烧写总是出错,请问可能是什么原因?是电压问题?还是烧写驱动,烧写工具的问题,怎么解决?因为要用到低电压驱动的单片机,谁知道的麻烦告诉一声,谢谢了。…

查看全部问答>

DM642 BIOS中能设置外扩sdram的数据宽度吗?

我想在642外只采用扩展一个32位的SDRAM,一般的开发板都是扩展两片SDRAM,这样数据宽度为64位,很多例程也是基于此的?我现在想问如何在bios中设置数据宽度,将外扩SDRAM扩展为32位?…

查看全部问答>