基于STM32单片机自行车里程表码表霍尔测速温度报警设计23-069

23-069、STM32单片机自行车里程表码表霍尔测速系统+DS18B20温度显示声光报警设计

功能描述:

本系统由STM32F103C8T6单片机核心板、霍尔传感器、LCD1602液晶、电机驱动、DS18B20温度检测电路+声光报警电路组成。

1、通过霍尔传感器检测单位时间内电机上磁铁经过的次数,也就是转动的圈数,从而计算出转速、速度、距离等值。

2、lcd1602液晶实时显示转速、速度、路程数据和温度。

3、电机电源驱动能够驱动电机启动,通过单联功率电位器可以调节电机驱动能力即调速。

4、温度超过40度声光报警,否则声光不报警。

#include #include //----------------------------------------------------- //*定义25045端口--------- sbit CS = P1^1; //*片选 sbit SO = P1^0; //*串行输出 sbit SI = P1^3; //*串行输入 sbit SCK = P1^2; //*串行时钟输入 char command; //*指令字 //------------------------------------- sbit K1 = P3^0; //计程开关 int pulsdate; //*计数脉冲变量 int lengthsdate1; //*保存本次里程数的整数 int lengthsdate2; //*保存本次里程数的小数 int totallength; //*总里程数 //------------------------------------------- int timer0date1; //*定时器0记数变量变1 int timer0date2; //*定时器0记数变量变2 //*初始化2051工作寄存器--------- void init(void) { TMOD = 0x11; //0001 0001B T0:16位定时中断;T1:6位定时中断,方式1 TL0 = 0xfe; //时钟 0.00108506944444444444ms TH0 = 0xdb; //10ms=0x2400,0xffff-0x2400=0xdbff PT0 = 0; //定时器0中断优先级 PT1 = 0; PX0 = 0; PX1 = 1; //外部中断1中断优先级 ET0 = 1; //扫描开始时开T0中断 IE1 = 1; //开外部中断1 IT1 = 1; //边沿触发 TR0 = 1; //开T0 中断 EA = 1; //开总中断 command= 0x00; pulsdate=0x00; lengthsdate1=0x00; lengthsdate2=0x00; timer0date1=0x00; timer0date2=0x00; } //*把状态值State写入25045状态寄存器函数 void Write25045State(char State) { int i; SCK=0; CS=0; for(i=0;i<8;i++) { State<<1; SCK=1; SCK=0; SI=CY; } CS=1; } //*读25045状态寄存器函数,返回值为状态寄存器的值 char Read25045State(void) { int i; char State0; CS = 0; Write25045State(0x06); Write25045State(0x05); SCK=0; for(i=0;i>1; } CS=1; return State0; } //*从25045的data1存储器中读取数据 char Read25045MEM(char data1) { int i; char out1; CS = 1; CS = 0; command = 0x03; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } command= data1; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } SCK=0; for(i=0;i>1; } CS=1; return out1; } //*把date2写出25045MEM void Write25045MEM(char data2,char Memory1) { int i; CS = 1; CS = 0; command = 0x02; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } command= Memory1; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } for(i=0;i<8;i++) { data2<<1; SCK=0; SI=CY; SCK=1; } CS=1; } //*X25045芯片复位函数 void reset25045(void) { CS=0; CS=1; } // void init25045(void) { int i; char data5; CS=0; Write25045State(0x06); Write25045State(0x01); data5=0x04; for(i=0;i<8;i++) { data5<10000) lengthsdate2-=10000; if(pulsdate>=624) { lengthsdate2=0; lengthsdate1++; pulsdate-=624; } if(pulsdate==0) { totallength++; totall=totallength; Write25045MEM(totall,0x00); totalh=(totallength>>8); Write25045MEM(totalh,0x01); } } //*定义定时器0中断函数 void Timer0(void) interrupt 1 { char i; bit j; bit k; char a; timer0date1++; timer0date2++; if(timer0date1>=4) { timer0date1-=4; } if (k==K1) { a++; } else { k=K1; a=0; } if(i>=20) { j=k; a=20; } if(!j) { switch(timer0date1) { case 0: i=lengthsdate2/100; Writelcm1010(i,timer0date1); break; case 1: i=lengthsdate1; Writelcm1010(i,timer0date1); break; case 2: i=(lengthsdate1/10); Writelcm1010(i,timer0date1); break; case 3: i=(lengthsdate1/100); Writelcm1010(i,timer0date1); break; default: break; } } else { switch(timer0date1) { case 0: i=totallength; Writelcm1010(i,timer0date1); break; case 1: i=(totallength/10); Writelcm1010(i,timer0date1); break; case 2: i=(totallength/100); Writelcm1010(i,timer0date1); break; case 3: i=(totallength/1000); Writelcm1010(i,timer0date1); break; default: break; } } } //*主函数 void main(void) { char totall; char totalh; init(); init25045(); totall=Read25045MEM(0x00); totalh=Read25045MEM(0x01); totallength=totalh; totallength<=30) { timer0date2=0; init25045(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值