毕设分享|基于51单片机电子式里程表

本文介绍了基于51单片机的电子式里程表设计,使用了光电传感器、LED显示器和串行EEPROM芯片24C16。系统包括车速表、里程表、超速报警和数据存储功能。通过软件和硬件结合实现,其中软件设计采用模块化,包括初始化、键处理、脉冲计数和显示等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

里程表广泛应用于各类机车,传统的机械式里程表虽然稳定可靠,但功能单一、易受磨损。随着电子技术的迅猛发展,电子式里程表得以广泛应用,现在很多轿车仪表已经使用电子车速里程表,本设计介绍一种基于单片机的智能电子里程表。该电子式里程表是一种数字式仪表,主要由车速表和里程表两部分组成,其传感器采用无接触测量的光电传感器。它不仅可显示车辆行驶的总里程,也可显示一段时间的阶段里程,还可显示车速,以及实现超速报警等功能,并具有较强的再开发能力。

第一章 总体设计

该电子式里程表以AT89S51单片机为核心,由系统输入、单片机部分和系统输出组成。其主要模块有报警装置、键盘输入、光电传感器、显示、单片机以及EEPROM存储器。其系统组成框图如图1所示。

图1 系统组成框图

单片机控制模块是该作品的重要组成部分。为了提高单片机的使用效率,以及可以实现在线编程,而采用了AT89C51单片机的升级产品AT89S51单片机。为保证数据的安全可靠保存并减少作品的成本,以及使系统的结构简单,在里程信息的存储功能

#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、付费专栏及课程。

余额充值