为了学习单片机,不知不觉来论坛好几个月。一直都是伸手党。今天特将自己的资料分享给大家。顺便展示一下DIY成果。霍尔测速,按键清零,usb充电。因为电压高达65v。所以采用HRD05003,修改了电压为13V。LM2596s降压5v充电充电,采用二级降压手机充电更安全
只要修改一下distance=distance+0.0010100;后面的数字就可以校准速度和里程。这个是我的车轮12寸周长101厘米
不过也有很多不足之处,断电不能保存里程。速度显示不完美,一个脉冲3.56KM/H。如果要想精度更高必须修改刷新时间。欢迎单片机大神来指正。
降压模块,日本拆机。某宝7块左右,默认电压5v。可以通过修改电阻修改电压,现在已经被我改为13v电压。
官方标称耐压高达50v。因为采用的是同步整流,所以效率高达3a左右。完爆国产。还有很多不错的模块,现在都涨价了。
单片机源程序如下:
- #########################################################################
- #include"lcd.h"
- #include <intrins.h>
-
- #define uchar unsigned char
- #define uint unsigned int
- sbit K1 = P3^0;
- uchar Time=0;
- uchar count=0;
- float speed=0;
- float distance=0;
- void IntConfiguration()
- {
- //设置INT0
- IT0=1;//跳变沿出发方式(下降沿)
- EX0=1;//打开INT0的中断允许。
-
- EA=1;//打开总中断
- }
- void TimerConfiguration()
- {
- TMOD = 0x01; //选择工作方式1
- TH0 = 0x3C; //设置初始值,定时50MS
- TL0 = 0xB0;
- EA = 1; //打开总中断
- ET0 = 1;TR0 = 1; //打开定时器0中断//启动定时器0
- }
- main()
- {
- // uchar i;
- IntConfiguration();
- TimerConfiguration();
- LcdInit();
- LCDWrite_String(0, 0, 16, "Sudu: Km/h");
- LCDWrite_String(0, 1, 16, "Licheng: Km");
- while(1)
- {
- if(K1==0)
- {
- distance=0;
- }
- LcdWriteCom(0x80+6);
- LcdWriteData('0'+(int)speed/100%10);
- LcdWriteData('0'+(int)speed/10%10);
- LcdWriteData('0'+(int)speed%10);
- LcdWriteData('.');
- LcdWriteData('0'+(int)(speed*10)%10);
- LcdWriteData('0'+(int)(speed*100)%10);
- LcdWriteCom(0xc0+9);
- LcdWriteData('0'+(int)distance/10%10);
- LcdWriteData('0'+(int)distance%10);
- LcdWriteData('.');
- LcdWriteData('0'+(int)(distance*10)%10);
- LcdWriteData('0'+(int)(distance*100)%10);
-
- }
- }
- void Int0() interrupt 0 //外部中断0的中断函数
- {
- count++;
- distance=distance+0.0010100;
- }
- void Timer0() interrupt 1
- {
- TH0 = 0x3C; //设置初始值
- TL0 = 0xB0;
- Time++;
- if(Time>=20) //每1s计算一次
- {
- speed=count*4.9455*0.72; //KM/H
- count=0;
- Time=0;
- }
- }
复制代码
所有资料51hei提供下载:
电动车里程表.zip
(39.98 KB, 下载次数: 72)
|