1设计目的该课题主要是利用单片机技术进行的一项软、硬件开发技术。
其目的是培养学生利用单片机技术解决生产、生活中的实际问题,对提高学生设计能力动手能力和工程实践技能有较重要的意义。
学生应具备电路分析、电子技术、单片机技术等方面的相关知识,熟悉单片机系统流程图、硬件结构图及汇编语言,能进行单片机控制电路的连接、程序编写、输入、修改及调试等。
2设计任务2.1总述本课题主要任务是利用霍尔元件、单片机等部件设计一个可用LED数码管实时显示里程和速度的摩托车的速度里程表。
本文主要介绍了摩托车的速度里程表的设计任务、图纸说明、方案设计以及元件的选择等内容,整体上分为硬件部分设计和软件部分设计。
具体的硬件电路包括AT89C51单片机的外围电路以及LED显示电路等。
软件设计包括:芯片的初始化程序、定时中断采样子程序、显示子程序等,软件采用c语言编写。
2.2硬件设计2.2.1总述摩托车的速度里程表的硬件电路设计是基础部分,它包括信号的捕获、放大、整形,单片机的计算处理,数码管的实时显示和单片机外围基本电路的设计,两大主要器件就是传感器和单片机。
2.2.2传感器传感器是获取自然或生产领域中信息的关键器件,是现代信息系统和各种设备不可缺少的信息采集工具。
其中最具代表的传感器就是霍尔传感器,在自动检测系统中,利用霍尔传感器测转数是一种最基本的测量工作。
2.2.3单片机单片机是本次设计的核心部件,它是信号从采集到输出的桥梁,而且包括计算、定时、信息处理等功能。
2.2.4数码管本设计采用LED数码管显示。
在单片机系统中,通常用LED数码显示器来显示各种数字或符号。
由于它具有显示清晰、使用电压低、寿命长的特点,因此使用非常广泛。
八段LED显示器由8个发光二极管组成。
其中7个发光二极管构成字型“8”的各个笔画段,另一个小数点为dp发光二极管。
LED显示器有两种不同的形式:一种是发光二极管的阳极都连在一起的,称为共阳极LED显示器;另一种是二极管的阴极都连在一起的,称为共阴极LED显示器。
本次采用共阴极接法。
2.2.5存储器24C02是一个2K位串行E2PROM。
内部含有256个8位字节。
24C02支持I2C总线数据传送协议。
数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。
主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式。
2.3软件设计2.3.1总体思路利用霍尔传感器在轮胎转动过程中进行采样,形成脉冲信号,利用单片机的定时器中断和计算器T0的计数功能进行计数,设轮胎的周长为一米,一个脉冲代表里程增加一米,然后利用外部扩展的EPROM进行储存,在开始行驶的时候,利用EPROM最后通过显示子程序在led2.3.2中断子程序如图2,图3所示。
图4 3图纸说明3.1显示电路图如图5所示。
图5显示电路图显示电路图说明:以P2口作为位选信号,以P0口作为段选信号。
3.2外部扩展存储电路如图6所示。
图6外部扩展存储电路外部扩展存储电路说明:以P2.6作为24c02c的串行时钟输入信号,以P2.7作为24c02c的数据输入输出信号。
3.3功能电路详见附录2功能电路说明:以P1.2作为疲劳驾驶报警信号、以P1.3作为复位信号、以P1.5作为分里程总里程选信号、以P1.6作为十万公里报废信号、以P1.4作为超速报警信号、以P1.7作为速度选择信号。
4仿真电路图如图7所示。
图7仿真电路图5总结四周的课程设计结束了,在这次的课程设计中不仅检测了我所学习的单片机和C语言知识,也培养了我的动手能力。
如何去计划一件事情,又如何完成一件事情,在整个设计过程中,独立思考,和同学、老师相互探讨、相互学习。
学会了合作,学会了团结,学会了如何耐心的做一件事。
最后,我非常感谢侯涛老师非常耐心的讲解,非常严格的检查,让我学会了严谨认真的做事,也感谢周围同学的热心帮助。
参考文献[1] 王思明、张金敏、苟军年,等. 单片机原理及应用系统设计[M]. 北京:科学出版社,2012.[2] 冯博琴,吴宁. 微型计算机原理与接口技术[M].三版. 北京:清华大学出版社,2011.[3] 周明德. 微型计算机系统原理及应用[M].四版. 北京:清华大学出版社,2002.[4] 郑学坚,周斌. 微型计算机原理及应用[M].三版. 北京:清华大学出版社,2001.[5] 李华,王思明,张金敏. 单片机原理及应用[M]. 甘肃:兰州大学出版社,2001.附录:附录1源程序:#include<reg52.h>#define uchar unsigned char#define uint unsigned intunsigned char codeled[ ]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,}; long count=0;int ge,shi,bai,qian,wan,n=1;uchar sec,tcnt;unsigned long zlicheng=0,flicheng=0,sudu=0;sbit sda=P2^7;sbit scl=P2^6;sbit baofei=P1^6;sbit xuanze=P1^5;sbit suduxuanze=P1^7;sbit chaosu=P1^4;sbit fw=P1^3;sbit pljs=P1^2;bit write=0;void delay(){ int i,j;for(i=20;i>0;i--)for(j=5;j>0;j--);}void display(){wan=count/10000;qian=count%10000/1000;bai=count%1000/100;shi=count%100/10;ge=count%10;P0=led[wan];P2=0x01;delay();P2=0x00;P0=led[qian];P2=0x02;delay();P2=0x00;P0=led[bai];P2=0x04;delay();P2=0x00;P0=led[shi];P2=0x08;delay();P2=0x00;P0=led[ge];P2=0x10;delay();P2=0x00;}void start(){sda=1;delay();scl=1;delay();sda=0;delay();}void stop(){sda=0;delay();scl=1;delay();sda=1;delay();}void respons(){uchar i;scl=1;delay();while((sda==1)&&(i<250))i++; scl=0;delay();}void init(){sda=1;delay();scl=1;delay();}void write_byte(uchar date){uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;scl=0;delay();sda=CY;delay();delay();}scl=0;delay();sda=1;delay();}uchar read_byte(){uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i++){ scl=1;delay();k=(k<<1)|sda;scl=0;delay();}return k;}void write_add(uchar address,uchar date) {start();write_byte(0xa0);respons();write_byte(address);respons();write_byte(date);respons();stop();}uchar read_add(uchar address){char date;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;}{ baofei=1;init();zlicheng=read_add(1)*16777216+read_add(2)*65536+read_add(3)*256+read_add( 4);TMOD=0x15;TH0=0xFF;TL0=0xFE;TH1=(65536-50000)/256;TL1=(65536-50000)%256;ET0=1;ET1=1;TR0=1;TR1=1;EA=1;if(fw==0)zlicheng=00000;flicheng=0;sudu=0;while(1){ if(suduxuanze==0)count=sudu;elseif(xuanze==1)count=flicheng;elsecount=zlicheng;display();}}void time0() interrupt 1{TH0=0xFF;TL0=0xFE;zlicheng++;flicheng++;if(sudu>=80){chaosu=0;}if(flicheng>=200)pljs=0;if(zlicheng==99999){baofei=0;xuanze=0;EA=0;}}void time1() interrupt 3{TH1=(65536-50000)/256;TL1=(65536-50000)%256;tcnt++;if(tcnt==50){tcnt=0;n++;sudu=flicheng/n*4;write=0;write_add(1,zlicheng/16777216);write_add(2,zlicheng%16777216/65536);write_add(3,zlicheng%65536/256);write_add(4,zlicheng%256);}}。