历史上的今天
今天是: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;i }
史海拾趣
|
史上最强动物机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杂志主编 “本书弥补了学校教育的缺陷。 ...… 查看全部问答> |
|
现因个人转行原因出06年购合众达DSP2812+XDS510一套。。价格一套共:600元 有意请加QQ:350563705 或致电:13828499087… 查看全部问答> |
|
刚买了块at89lv51,可是在stc的开发板上烧写总是出错,请问可能是什么原因?是电压问题?还是烧写驱动,烧写工具的问题,怎么解决?因为要用到低电压驱动的单片机,谁知道的麻烦告诉一声,谢谢了。… 查看全部问答> |
|
我想在642外只采用扩展一个32位的SDRAM,一般的开发板都是扩展两片SDRAM,这样数据宽度为64位,很多例程也是基于此的?我现在想问如何在bios中设置数据宽度,将外扩SDRAM扩展为32位?… 查看全部问答> |




