




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录一、设计背景及目的2二、设计任务和要求32.1设计任务32.2设计方案3控制器选择3显示器的选择3传感器的选择4三、系统的概述43.1工作原理5系统的硬件设计5信号预处理电路63.2 E2ROM AT24C02的应用73.3显示模块83.4系统的软件设计9软件设计概述93.4.2 软件程序9四、结论21五、改进及不足之处21六、设计心得体会22参考文献23课程设计作品:自行车里程测量仪一、设计背景及目的我国是一个人口大国,随着人们生活水平的逐渐提高,人们对生活性能的要求也日益增加。随着人们的环保意识的增强,自行车以其特有的轻型、环保、方便、快捷为优势及减少噪声污染等优点,受到广大消费者的
2、喜爱。自行车是一项十分受欢迎的健身运动。自行车锻炼的好处是不受时间的限制、不受速度的限制。骑自行车不但可以减肥,而且还可使身材匀称。由于自行车运动是需要大量氧气的运动,所以还可以强化心脏功能。同时还能防止高血压,有时比药物更有效。踩自行车压缩血管,使得血液循环加速,大脑摄入更多的氧气,再加上吸入大量新鲜空气,会使人精神气爽。骑在车上,你会感觉十分自由且畅快无比。如果在自行车上加装一个里程表,就可以知道自己骑车的行程,从而很好地控制运动量。随着石油危机波及全球,油价上涨,受到经济能力的限制,自行车迅速激起消费者的购买欲望,并且在中国逐步成为人们的代步工具,特别是学生群体对自行车的需求量很大。从保
3、护环境和经济条件许可等因素综合来看,自行车目前乃至今后都有着广阔的发展空间。二、设计任务和要求2.1设计任务设计一个自行车里程测量仪,要求设计出完整的自行车里程测量系统,并且能够显示出自行车的里程。2.2设计方案本设计中的里程表设计以单片机和光电传感器为核心。光电传感器将自行车车轮的运转情况经过一定的抗干扰和运算处理后,输出到LCD显示里程,使得电动自行车的里程数据能直观的显示给使用者。控制器选择单片微型计算机简称单片机,又称微控制器,特别适用于控制领域。通常单片机由单块集成电路构成,内部包含有计算机的基本部件:CPU(中央处理器),存储器和I/O接口电路等。因此,单片机只需要与适当的软件及外
4、部设备相结合,便可以成为一个单片机控制系统。单片机因为其体积小、功能强,可靠性高,灵活方便等优点,所以可以用于各个领域,对各行各业的技术改造和产品更新换代起到重要的推动作用。显示器的选择极低的工作电压,只要2V-3V即可工作,而工作电流仅几个微安即每个显示字符只有几个微安。一个小小的钮扣电池也可以用一两年,这是其他任何显示器件无法比拟的。在工作电压和功耗上液晶显示正好与大规模的集成电路的发展相适应。液晶显示器件的基本结构是由两片玻璃基板制成的薄形盒。这种结构最利于用作显示窗口,而且它可以在有限的面积上容纳最大量的显示内容,显示内容的利用率最高。这种结构还便于大批量、自动化生产。液晶材料是有机高
5、分子合成材料,具有极高的纯度,其他材料也都是高纯物质,在极净化的条件下制成,液晶的驱动电压又很低,驱动电流更是很微小,这种器件的劣化几乎没有,寿命很长。传感器的选择光电传感器是各种光电检测系统中实现光电转换的关键元件,它是把光信号(红外、可见及紫外光辐射)转变成为电信号的器件。光电检测方法具有精度高、反应快、非接触等优点,而且可测参数多,传感器的结构简单,形式灵活多样,因此,光电式传感器在检测和控制中应用非常广泛。遮光是光电传感器对于检测自行车车轮转过的圈数,具有结构简单、性能稳定、传感器小及方便的优点。三、系统的概述本系统由信号预处理电路、单片机MSP430G2553、系统化LCD显示模块、
6、串口数据存储电路和系统软件组成。其中信号预处理电路包含信号放大、波形变换和波形整形。对待测信号进行放大的目的是降低对待测信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机相连的TTL信号;通过单片机的设置可使内部定时器T1对脉冲输入引脚T0进行控制,这样能精确地算出加到T0引脚的单位时间内检测到的脉冲数。系统的原理框图如图所示3.1工作原理里程测量通常可以用计数法来进行测量。所谓计数法就是给定一个闸门时间, 在闸门时间内计数输入的脉冲个数。使用单片机进行自行车里程的测量, 可以使用简单的脉冲计数法,只要转轴每旋转一周,产生一个或固定的多个脉冲, 并将脉冲送入单片机中进行计
7、数,即可获得里程信息。该设计能实时地将所测的累计里程数显示出来,考虑到信号的衰减、干扰等影响,在信号送入单片机前应对其进行放大整形,然后通过单片机计算出里程,再将所得的数据存储到串口数据存储器,并由LCD显示模块显示所测里程。本设计的速度和里程值采用8位显示,并包含两个小数位。系统的硬件设计本设计采用了ST1101红外光电传感器,进行非接触式检测。当有物体挡在红外光电发光二极管和高灵敏度的光电晶体管之间时,传感器将会输出一个低电平,而当没有物体挡在中间时则输出为高电平,从而形成一个脉冲。该系统在自行车后轮的轴处保持着与轮子旋转切面平行的方向延伸附加一个铝盘,在这个铝盘的边沿处挖出若干个圆形过孔
8、,把传感器的检测部分放在圆孔的圆心位置。每当铝盘随着后轮旋转的时候,传感器将向外输出若干个脉冲。把这些脉冲通过一系列的波形整形成单片机可以识别的TTL电平,即可算出轮子即时的转速。铝盘的圆孔的个数决定了测量的精度,个数越多,精度越高,而自行车所需记录的里程远大于车轮转一圈所走的路程,故只需要在铝盘上打两个过孔就可以满足精度。本设计在铝盘过孔的设计上采用2个过孔,从而车轮每转过一圈,便会产生两个脉冲。这样在以后的软件设计中能够较为方便的计算出里程。信号预处理电路信号预处理电路系统的信号预处理电路由二级电路构成,第一级是由开关三极管组成的零偏置放大器,采用开关三极管可以保证放大器具有良好的高频响应
9、。当输入信号为零或负电压时,三极管截止,电路输出高电平;而当输入信号为正电压时,三极管导通,此时输出电压随着输入电压的上升而下降,这使得速度里程表既可以测量任意方波信号的频率,也可以测量正弦波信号的频率。由于放大器的放大功能降低了对待测信号的幅度要求,因此,系统能对任意大于0.5V的正弦波和脉冲信号进行测量。预处理电路的第二级采用带施密特触发器的反相器DM74LS14来把放大器生成的单相脉冲转换成与COMS电平相兼容的方波信号同时将输出信号加到单片机的P3.4口上。利用施密特触发器状态转换过程中的正反馈作用,可以把边沿变化缓慢的周期性信号变换为边沿很陡的矩形脉冲信号。输入的信号只要幅度大于VT
10、+,即可在施密特触发器的输出端得到同等频率的矩形脉冲信号。从传感器得到的矩形脉冲经传输后往往发生波形畸变。当传输线上的电容较大时,波形的上升沿将明显变坏;当传输线较长,而且接受端的阻抗与传输线的阻抗不匹配时,在波形的上升沿和下降沿将产生振荡现象;当其他脉冲信号通过导线间的分布电容或公共电源线叠加到矩形脉冲信号时,信号上将出现附加的噪声。无论出现上述的那一种情况,都可以通过用施密特反相触发器整形而得到比较理想的矩形脉冲波形。只要施密特触发器的VT+和VT-设置得合适,均能受到满意的整形效果。3.2 E2ROM AT24C02的应用AT24C02是CMOS 2048位串行E2PROM,在内部组织成
11、256%26;#215;8位。AT24C02的特点是具有允许在简单的二线总线上工作的串行接口和软件协议。 如图5所示,在本设计中用芯片AT24C02的SDA端与单片机的P3.7口相连,SCL端与单片机的P3.5口相连。因为在这个I2C总线上只有一个器件,所以把AT24C02的地址设为000,即把A0、A1、A2都接地。单片机计算出来的里程数据通过SDA、SCL向AT24C02输送数据。单片机首先向AT24C02发送写信号,当确认后从单片机内部的数据储存单元提取数据然后向AT24C02的内部地址传送数据。当显示里程时,单片机首先向AT24C02发送读信号,然后确认后,单片机从AT24C02内部的
12、地址向单片机的读出单元字节读出数据,供显示所用。AT24C02与单片机的接口电路图3.3显示模块本设计的显示模块包括MC14511BCP、CD4076、74LS138。 MC14511是将锁存、译码、驱动三种功能集于一身的“三合一”器件。锁存器的作用是避免在计数过程中出现跳数现象,便于观察和记录。用译码器将BCD码转换成7段码,再经过大电流反相器,驱动LCD。译码器属于非时序电路,其输出状态与时钟无关,仅取决于输入的BCD码。74LS138的作用相当于位选的功能,当C,B,A的输入分别为“000、001、010、011、100、101”时分别选择不同的MC14511,从而在不同位上显示不同的数
13、字和小数点。CD4076是CMOS 4位三态输出D寄存器,通过74LS138的Y6,Y7来控制其CP的工作,从而使CD4076来控制小数点显示。显示模块框图系统显示部分的电路系统中用74LS138的Y0Y5选择MC14511以驱动LCD显示,Y6、Y7来控制CD40756的CP,从而达到以CD4076的Q1Q4控制小数点的显示,另一个CD4076只用到其Q1和Q2,图中字符相对应的地方表示其引脚相连。3.4系统的软件设计系统软件是整个测试系统的重要组成部分,对系统的运算、逻辑、控制以及输入输出具有决定性的作用。软件设计概述本系统软件采用模块化设计方法。整个系统由初始化模块、频率测量模块,里程计
14、算模块、数据转码模块、里程显示模块、数据存储,读取模块、定时器中断服务模块以及其他功能模块组成。待测信号经预处理电路后加至单片机的P3.4(T0)引脚可为单片机测量信号频率提供有效的输入信号。单片机通过检测P3.4引脚电平来决定是否启动测量频率程序。当该引脚为高电平时,系统处于等待状态,要一直到该引脚出现低电平时才开始测频率。我们可以从TL0寄存器知道在两秒内单片机检测到的N个脉冲。而M%26;#215;N所得到的正是这两秒内铝盘在圆周上所走得距离S。至于里程的计算,根据速度计算的分析,在得到2s内铝盘在其圆周上走过的距离后。根据它与自行车轮子的圆周走过的距离有一定比例关系(通过两者角速度一样
15、的算法)可以通过单片机的算出自行车在这两秒内走过的路程S1。把这个路程S1与存储器原来的里程数相加即可得到目前的总里程数。 通过单片机计算出来的速度和里程的数据,必须通过BCD码的转换才能输出给显示模块。总里程数的显示是设定出现在电动自行车开动,单片机开机经过初始化后显示出来,这样以来用户可以清楚的知道自己的车子已经运行了多少公里了。 软件程序#include msp430g2553.h#define d x;/CS:片选,低电平有效 RS:复位端,低电平有效/D/C:选择位,1=送数据/0=送命令 SCL: 串行时钟输入/SDA:串行数据输入/此液晶从正面看,其实际打点是从右往左画,高位在上
16、,且页与列全部到相/汉字的取模方式是:图形模式,阴码,列行式,顺向,C51格式/接口:CS:地 RES:P1.5 A0:P2.0 SCL:P2.1 SI:P1.6/#include #define RS_1 P1OUT |= BIT5#define DC_1 P2OUT |= BIT0#define Clock_Out_1 P2OUT |= BIT1#define Data_Out_1 P1OUT |= BIT6#define RS_0 P1OUT &= BIT5#define DC_0 P2OUT &= BIT0#define Clock_Out_0 P2OUT &= BIT1#define
17、 Data_Out_0 P1OUT &= BIT6const unsigned char ChTab= 0x3E,0x7E,0xD8,0x98,0xD8,0x7E,0x3E,0x00, /A 0x00,0xFE,0xFE,0x92,0x92,0x6C,0x6C,0x00, /B 0x00,0x38,0x7C,0xC6,0xC6,0xC6,0xC6,0x00, /C 0x00,0xFE,0xFE,0xC6,0xC6,0x7C,0x38,0x00, /D 0x00,0xFE,0xFE,0xD6,0xD6,0xD6,0x00,0x00, /E 0x00,0xFE,0xFE,0xD8,0xD8,0xD
18、8,0x00,0x00, /F 0x38,0x7C,0xC6,0xD6,0xDE,0x5C,0x10,0x00, /G 0x00,0xFE,0xFE,0x30,0x30,0xFE,0xFE,0x00, /H 0x00,0x06,0xC6,0xFE,0xFE,0xC6,0x06,0x00, /I 0x00,0xCC,0xC6,0xFE,0xFC,0xC0,0xC0,0x00, /J 0x00,0xFE,0xFE,0x30,0x6C,0xC6,0x02,0x00, /K 0x00,0xFE,0xFE,0x06,0x06,0x06,0x06,0x00, /L 0xFE,0xFE,0x40,0x38,
19、0x40,0x7E,0xFE,0x00, /M 0xFE,0xFE,0xF0,0x38,0x1E,0xFE,0xFE,0x00, /N 0x3C,0x7E,0xE7,0xC3,0xE7,0x7E,0x3C,0x00, /O 0x00,0xFF,0xFF,0xCC,0xEC,0x78,0x18,0x00, /P 0x3C,0x7E,0xD7,0xDB,0xDF,0x7E,0x7B,0x00, /Q 0xFF,0xFF,0xDC,0xDC,0xFE,0xF7,0x73,0x00, /R 0x00,0x64,0xF6,0x92,0x92,0xDE,0x4C,0x00, /S 0xC0,0xC0,0x
20、C0,0xFE,0xFE,0xC0,0xC0,0xC0, /T 0x00,0xFC,0xFE,0x06,0x06,0xFE,0xFC,0x00, /U 0x00,0xF8,0xFC,0x06,0x06,0xFC,0xF8,0x00, /V 0xFF,0x0E,0x1C,0x38,0x1C,0x0E,0xFF,0x00, /W 0xC3,0x66,0x3C,0x18,0x3C,0x66,0xC3,0x00, /X 0x80,0xC0,0x60,0x3E,0x3E,0x60,0xC0,0x80, /Y 0x00,0xC3,0xC7,0xCF,0xDB,0xF3,0xE3,0x00 /Z;const
21、 unsigned char NumDat= 0x38,0x7C,0x86,0x82,0xC2,0x7C,0x38,0x00, /0 0x00,0x02,0x42,0xFE,0xFE,0x02,0x02,0x00, /1 0x46,0xCE,0x9E,0x9A,0xBA,0xF2,0x62,0x00, /2 0x04,0x86,0x92,0xB2,0xF2,0xDE,0x8C,0x00, /3 0x18,0x38,0x68,0xC8,0xFE,0xFE,0x08,0x00, /4 0xE4,0xE6,0xA2,0xA2,0xA2,0xBE,0x1C,0x00, /5 0x3C,0x7E,0xD
22、2,0x92,0x92,0x9E,0x0C,0x00, /6 0xC0,0xC0,0x8E,0x9E,0xB0,0xE0,0xC0,0x00, /7 0x6C,0xFE,0x92,0x92,0x92,0xFE,0x6C,0x00, /8 0x60,0xF2,0x92,0x92,0x96,0xFC,0x78,0x00, /9 0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00 /.;const unsigned char PicDat= 0x07,0x0F,0x0F,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x90,0x90,0
23、xB0,0xD2,0x12, /人手形 0x12,0x12,0x13,0x12,0x12,0x12,0x0C,0x00, 0xF0,0xF8,0xF8,0x08,0x08,0x08,0x04,0x04, 0x02,0x02,0x01,0x01,0x01,0x09,0x49,0x49,0x46,0x30,0x80,0x00,0x00,0x00,0x00,0x00;const unsigned char Chinese=0x10,0x10,0x10,0x10,0x10,0x10,0x9F,0x52,0x32,0x12,0x12,0x13,0x10,0x10,0x10,0x00,0x02,0x02,
24、0x04,0x08,0x30,0xC0,0x00,0x00,0x04,0x02,0x02,0xFC,0x00,0x00,0x00,0x00;/*方,0*/ 送数据到液晶static void Send_Data(unsigned char Data) char i; DC_1; for(i=0;i8;i+) Clock_Out_0; if(Data&0x80) Data_Out_1; else Data_Out_0; Data=1; Clock_Out_1; /送命令到液晶static void Send_Com(unsigned char Com) char i; DC_0; /送命令 fo
25、r(i=0;i8;i+) Clock_Out_0; if(Com&0x80) Data_Out_1; else Data_Out_0; Com4); /列地址高四位,其中加4是列纠正,此液晶存在4列的错位 Send_Com(Column+4)&0X0f); /列地址低四位/ 清屏void Screen_Clear(void) unsigned char i,j; for(i=0;i8;i+) SetColumn(0);/每一页都必须以第一列为参考 SetPage(i); for(j=0;jX SetColumn(127-X); /列选择 | SetPage(7-(unsigned char)(
26、Y/8); /行选择 | Send_Data(0x01(7-(unsigned char)(Y%8); /数据输出 | / Y /Y0 X0为显示的起始列数与页数,void PrintCh(unsigned char X0,unsigned char Y0,unsigned char Ch) unsigned char i; unsigned char Index; Index=Ch*8+7; SetPage(7-X0); SetColumn(119-Y0); for(i=0;i8;i+)Send_Data(ChTabIndex-i);/画线 (目前不能画斜线)/X0 Y0为起点,X1 Y1为
27、终点 void DrawLine(unsigned char X0, unsigned char Y0, unsigned char X1, unsigned char Y1) unsigned char i; unsigned char Top; Top=(unsigned char)(Y0/8)+1)*8; if(X0=X1) /画纵线 for(i=Y0;i=Y1;i+) SetColumn(127-X0); /列设置 SetPage(7-(unsigned char)(i/8); /页设置 if(i(Y0%8) ); /由于此液晶是一页一页的送,且工作在串口 else if(i=Y1)
28、/方式下不能读液晶当前值 Send_Data( 0xff( 8-(Y1%8) ) ); else Send_Data(0xff); else if(Y0=Y1) /画横线 for(i=X0;iX1;i+) DotPoint(i,Y0); /画方格/X Y为方格左上角坐标,Len Wide为方格的长和宽void DrawBox(unsigned char X, unsigned char Y,unsigned char Len,unsigned char Wide) DrawLine(X,Y,X,Y+Wide); DrawLine(X+Len,Y,X+Len,Y+Wide); DrawLine(
29、X+1,Y,X+Len,Y); DrawLine(X+1,Y+Wide,X+Len,Y+Wide);/ 专用显示128*64的图象/*void DisplayPic2() unsigned char i,j,in=0; for(j=0;j128;j+) for(i=0;i8;i+) /坐标有待改进 SetColumn(127-j); SetPage(7-i); Send_Data(PicDat2in+); in=0; */ X0 Y0为显示的起始列数与页数(注:必须满足X0+X0) SetPage(TempY); SetColumn(TempX); for(i=0;iX;i+)Send_Dat
30、a(ChineseIndex+X-i-1); TempY-; Index+=X; Y-; /Y0 X0为显示的起始列数与页数,void PrintList(unsigned char X0,unsigned char Y0,unsigned char *word_list) unsigned char length=0; while(word_listlength!=0x00) /判断是否字符串结束,将字符串拆分成为单个字符轮流显示 PrintCh(X0,Y0+length*8,(unsigned char)word_listlength-A); length+; / Y0 X0为显示的起始列
31、数与页数,Ch为要显示数字 void PrintNum(unsigned char X0,unsigned char Y0,unsigned char Ch) unsigned char i; unsigned char Index; Index=Ch*8+7; SetPage(7-X0); SetColumn(119-Y0); for(i=0;i8;i+)Send_Data(NumDatIndex-i);/Y0 X0为显示的起始列数与页数,void PrintListNum(unsigned char X0,unsigned char Y0,unsigned char *word_list)
32、 unsigned char length=0; while(word_listlength!=0x00) /判断是否字符串结束,将字符串拆分成为单个字符轮流显示 PrintNum(X0,Y0+length*8,(unsigned char)word_listlength-0); length+; / Y0 X0为显示的起始列数与页数,Ch为要显示数字/显示浮点数/x,y:起点坐标/number:要显示的数字/decimal:要保留的小数位/用16字体static float _fround6=0.49,0.05,0.005,0.0005,0.00005,0.000005;void _ftoa
33、(float n,unsigned char decimals,unsigned char *str)float scale;unsigned char i,d;if (n5) decimals=5;n=n+_frounddecimals;i=0;scale=1.0;while (n=scale) scale=scale*10.0; +i;if (i=0) *str+=0;elsewhile (i-) scale=floor(0.5+scale/10.0); d=(unsigned char) (n/scale); *str+=d+0; n=n-scale*d; ;if (decimals=0) *str=0; return;*str+=9+1; /str=Point;while (decimals-) n=n*10.0; d=(unsigned char) n; *str+=d+0; n=n-d;*str=0;void LCD_ShowFloat(unsigned int x,unsigne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中班级规划活动方案
- 学校六班级班主任工作方案模板第一学期
- 2025年大学生实习总结模版
- 中国梅花鹿养殖行业市场运营现状及投资战略咨询报告
- 中国食品行业电商平台行业市场发展监测及投资战略咨询报告
- 健康评估(第5版)课件 第九章 护理诊断的思维方法和步骤
- 2024年河北机场管理集团有限公司招聘笔试真题
- 2025年中国光学仪器制造行业分析报告-市场发展现状与发展潜力预测
- 初一教师期末工作总结
- 中国核级电缆料市场竞争态势及行业投资前景预测报告
- 《幼儿游戏与指导》 课程标准
- 电力行业标准《能源量测监控系统 第5部分:通信协议-数据交换协议》
- 2023年广西中医药大学赛恩斯新医药学院招聘考试真题
- 网络安全预警与监控培训
- 《气胸护理查房》课件
- 村级维稳应急预案
- 乡村振兴背景下广西农村产业振兴的问题及策略
- 2023年上海科学院招考笔试参考题库(共500题)答案详解版
- 《项目采购与合同管理》 课件 徐水太 第4-6章 工程项目采购、项目采购控制、PPP项目采购与合同管理
- 上海初一新生分班(摸底)语文考试模拟试卷(10套试卷带答案解析)
- 弱电工程施工重点难点分析
评论
0/150
提交评论