毕业设计(论文)基于单片机的自行车码表设计_第1页
毕业设计(论文)基于单片机的自行车码表设计_第2页
毕业设计(论文)基于单片机的自行车码表设计_第3页
毕业设计(论文)基于单片机的自行车码表设计_第4页
毕业设计(论文)基于单片机的自行车码表设计_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机的自行车码表设计PAGE2基于单片机的自行车码表设计摘要随着人们生活水平的不断提高,自行车已经不仅仅是运输、代步的工具,其辅助功能也变得越来越重要。因此,人们希望自行车的娱乐、休闲、锻炼的功能越来越多,能带来大家更多的健康与快乐。自行车码表作为自行车的一大辅助工具迅速发展起来。科学、美观、合理设计自行车里程表有一定的实用价值。它能合理计算出速度及公里数,使运动者运动适量,达到健康运动与代步的最佳效果。码表能尽可能真实地反映骑行状况,便于车手及时调整自己的举动。本设计以AT89C51单片机为主控制芯片,128*64LCD为显示终端显示自行车时速、里程等信息及系统设置等,统设置菜单能够人工设置设备安装信息以提高测量精度,提供时速、里程、平均速度、时间等信息,时还附加一报警功能,当行驶到预设里程和速度时,系统会自动报警,提醒已经达到预设运动量。本设计主要包括自行车轮脉冲采集、键盘输入和数据显示等部分,主程序用C语言编写,完成各项功能及数据的处理,通过KeilC来完成程序的编写和下载,通过单片机实验开发板具体实现自行车码表各项功能。关键词ST1101AT89C51LCDZLG7290报警THEDESIGNOFBASINGONMCUBICYCLESTOPWATCHABSTRACTWiththeimprovementoflifelevel,bikeisnotonlythetransporttoolbutalsoit’sauxiliaryfunctionbecomemoreandmoreimport.Therefore,peoplehopethatthefunctionofamusement,leisureandexerciseofbikebecomemoreandmore;andbringmorehealthandhappy.Asoneimportauxiliaryfunctionofbikestopwatchdevelopsquickly.Thedesignofstopwatchisscientific,reasonableandbeautiful;anditalsohasitspracticalvalue.Stopwatchcancalculatespeedanddistance,reflectstrueexercisestate;basedonthisexercisercanadjustsexercisestrengthsothatitcanreachthebesteffectofhealthyexercise.ThisprojecttakesAT89C51MCUasmaincontrolchipandtakes128*64LCDasterminaldisplaywhichdisplaysspeedperhour,distanceandsystemset.Inthesystemsetmenupeoplecansetinstallinformationtoimprovemeasureprecision.Besides,itappendsalertingfunction.Whenreachthedistanceandspeedsetinadvance,thesystemwillalertautomaticallytoremindexerciserthathehasreachedexercisestrengthsetinadvance.Thisprojectmainlyincludesbicyclewheelpulseacquisition,keyboardinputanddatashows.ThemainprogramiscompiledbyClanguagewhichistodoinitializationandkeyboarddealing;thecompileranddownloadofprogramaredonebyKeilC,andthevariousfunctionsofthebicyclearerealizedconcretelybytheSCMexperimentdevelopmentboard.KEYWORDSST1101AT89C51LCDZLG7290alert基于单片机的自行车码表设计目录TOC\o"1-3"\h\u摘要 IABSTRACT II前言 11绪论 21.1开发背景及意义 21.1.1课题背景 21.1.2课题的意义 21.2KeilC介绍 21.3设计内容 32系统方案论证与分析 42.1系统方案 42.1.1系统概述 42.1.2系统原理 42.2采集信息部分以及传感器的选择 52.3主控芯片选择 62.4数据处理并显示模块 62.4.1多位LED数码管显示 62.4.2128*64LCD显示 72.5键盘部分及所需芯片选择 82.5.1键盘设计方案 82.5.2ZLG7290芯片特点 93系统硬件设计 103.1系统设计图 103.2AT89C51主控芯片 113.3脉冲发生源 133.3.1轮脉冲检测 133.3.2信号预处理电路 133.3.3E2PROMAT24C02的应用 143.4显示模块 153.4.1显示资料RAM(DDRAM) 163.4.2绘图RAM(GDRAM) 163.5键盘及ZLG7290芯片 173.5.1芯片引脚及说明 173.5.2引脚功能 184系统软件设计 194.1软件系统设计 194.2液晶显示 204.2.1液晶显示程序流程 204.2.2显示器具体指令 214.3键盘输入部分 24致谢 26参考文献 27附录 28前言随着人们生活水平的逐渐提高,人们对于生活质量的要求也日益增加,尤其是对健身的要求。自行车在中国普遍作为代步工具。而在国外,自行车却是一项十分受欢迎的健身运动。因为它无污染,价位低廉,老少皆宜。而且在运动过程中可以充分享受到大自然,对于忙碌的现代人来说,无疑是一种较好的放松方法。在中国这种情况也在慢慢发生变化。因此爱好自行车运动的人十分学要一款能测速的装置,以知道自己的运动情况。并根据外界条件,如温度,风速等进行适当的调节,已达到最佳运动的效果。而对于自行车运动员来说,最为关心的莫过于一段时间内的训练效果。因为教练要根据一段时间内运动员的训练效果进行评估,从而进行适当的调整已使运动员达到最佳的状态。因此需要一种装置进行对训练中各种参数的测定记录。码表主要针对那些业余爱好者,他们运动一般会选择晴朗凉爽的天气进行运动,所以温度和风速对运动员几乎没影响,只要能精确的测量速度和里程以及时间即可。并能在运动员达到预期运动量后能准确提醒运动员已达到预期要求。本设计以AT89C51单片机为主控芯片,把霍尔传感器传来的脉冲信号进行处理,预算,精确的计算出行驶的速度和里程,然后在传送给LCD显示器,从LCD上显示出运动的一系列数据,而且还可以通过显示器进行人机对话,可以通过显示器和键盘进行一些参数的设置,比如像将要安装的自行车的轮圈的半径设置,以及预设运动量的和时间的设置。这些都需要通过显示器进行设置,其中的时间是用芯片内自带的计数器进行计数的。本设计是以AT系列单片机为主控制芯片,采用霍尔元件检测小车行驶速度。程序用C语言编写,由主程序、外部中断服务程序、定时器中断服务程序、延时子程序等模块组成。主程序主要完成程序的初始化和键盘处理,外部中断服务程序由测量、计算、读数等部分组成。1绪论1.1开发背景及意义课题背景随着人们生活水平的不断提高,自行车已经不仅仅是运输、代步的工具,其辅助功能也变得越来越重要。因此,人们希望自行车的娱乐、休闲、锻炼的功能越来越多,能带来大家更多的健康与快乐。在这个背景下,自行车里程表作为自行车的一大辅助工具迅速发展起来.科学、美观、合理设计自行车里程表有一定的实用价值.它能合理计算出速度及公里数,使运动者运动适量,达到健康运动与代步的最佳效果.码表能尽可能真实地反映骑行状况,便于车手及时调整自己的举动,也便于收集骑行数据供自己或队友们进行参考和对比。自行车码表一般由安装于前车圈钢条上的感应磁铁、前叉上的感应器、顺着前叉蜿蜒而上的连接线、置于握把上面的码表座和座上面的码表。码表的工作原理是:车圈旋转时感应器捕捉到感应磁铁带来的信息,通过连接线传输至码表,码表对此进行处理后计算出时速、里程等信息并显示。它能够让我们比较精确的知道自己的当前速度、骑行时间、单次里程、总里程、平均速度、最高速度等。课题的意义本设计就是针对普通运动员在运动中不能很好的把握自己达到了多大的速度,行驶了多远的距离而设计的。以往的码表只能进行测量速度,里程,时间,温度等数据,虽然能实现很多的功能,但是其中的一些功能不适合自行车业余爱好者,浪费资源,而且性价比也低,而且也不能很好的把握当前运动量,从而不能很好的实现娱乐和锻炼的效果。而本设计却能实现娱乐和锻炼的双重效果,而且相对业余爱好者性价比更高。1.2KeilC介绍KeilC51µVision3集成开发环境是KeilSoftware,Inc/KeilElektronikGmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立到管理、编译、链接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想。KeilC51集成开发环境的主要功能有以下几点:(1)µVision3是一个集成开发环境,它将项目管理、源代码编辑和程序调试等组合在一个功能强大的环境中。(2)C51国际准化C交叉编译器,从C源代码产生可重定位的目标模块。(3)A51宏汇编器,从80C51汇编源代码产生可重定位的目标模块。(4)BL51链接器/定位器,组合由C51和A51产生的可重定位的目标模块,生成绝对目标模块。(5)LIB51库管理器,从目标模块生成连接器可以使用的库文件。(6)OH51目标文件至HEX格式的转换,从绝对目标模块生成Hex文件。(7)RTX-51实时操作系统,简化了复杂的实时应用软件项目的设计。此软件可以完成从工程建立到管理、编译、链接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平。支持在线仿真,纯软件信仿真,多种调试方式(单步、全速等),其应用相对简单,很容易就可以掌握该软件的基本操作用法,可以用C语言和汇编两种语言进行编程,还可混编,支持C语言的编程对初学者提供了很大方便,在调试过程中,可通过相关工具,直接查看变量的即时结果,目标代码的生成也容易。1.3设计内容以AT89C51单片机为主控制芯片。以128*64LCD为显示终端显示自行车时速、里程等信息及系统设置等系统设置菜单。能够人工设置设备安装信息以提高测量精度,提供时速、里程、平均速度、时间等信息。能够预设运动量(比如预设速度,里程),实现报警功能。2系统方案论证与分析2.1系统方案系统概述系统总体设计框图如图2-1所示。本系统由信号预处理电路、单片机AT89C51、128*64LCD显示模块、键盘控制和系统软件组成。其中信号预处理电路包含信号放大、波形变换和波形整形。对待测信号进行放大的目的是降低对待测信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机相连的TTL信号;通过单片机的设置可使内部定时器T1对脉冲输入引脚T0进行控制,这样能精确地算出加到T0引脚的单位时间内检测到的脉冲数;设计中速度显示采用LCD模块,通过速度换算得来的里程数采用I2C总线并通过E2PROM来存储,既节省了所需单片机的口线和外围器件,同时也简化了显示部分的软件编程。键盘控制键盘控制信号放大器数字存储电路单片机LCD显示整形电路图2-1系统总体设计框图系统原理该设计能实时地将所测的速度与累计里程数显示出来,主要是将传感器输入到单片机的脉冲信号的频率(传感器将不同车速转变成不同频率的脉冲信号)实时地测量出来,考虑到信号的衰减、干扰等影响,在信号送入单片机前应对其进行放大整形,然后通过单片机计算出速度和里程,再将所得的数据存储到串口数据存储器,并由LCD显示模块显示所测速度与里程。本设计的里程数的算法是一种大概的算法(假设在一定时间内自行车是匀速行进,平均速度与时间的乘积即为里程数)。设计时,应综合考虑测速精度和系统反应时间。本设计用测量脉冲频率来计算速度,因而具有较高的测速精度。在计算里程时取了自行车的理想状态。本设计的速度和里程值采用8位显示,并包含两个小数位。2.2采集信息部分以及传感器的选择信息采集部分可以选用的传感器种类很多,例如磁感应传感器,光电感应传感器,金属传感器等,而考虑到实际可操作性以及设计要求方面,本设计选用的传感器为光电传感器。霍尔传感器由永久磁铁和开关型霍尔集成电路组成。霍尔集成电路由霍尔元件、放大器、整形电路及集电极开路输出等部分组成,其功能是把磁信号转换成电信号,霍尔元件为磁敏元件,当垂直于霍尔元件的磁场强度发生变化时,其两端的电压就会发生变化,经放大和整形即可输出脉冲电信号。ST1101采用高输出的红外光电二极管与高灵敏度光敏晶体管组成,其特点是性能可靠,体积小,结构简单,广泛应用于码表,其主要参数如表2-1所示。表2-1主要参数输入正向电流IF50mA反向电压Vr6v耗散功率P75mW输出集-射电压Vceo25V射-集电压Veco6V集电极功耗Pc50mW2.3主控芯片选择码表主要以单片机为主控芯片,而能实现其功能的芯片却有很多,本设计选用的是AT89C51。AT89C51是一个低电压,高性能CMOS8位单片机,带有4K字节的可反复擦写的程序存储器(PENROM)和128字节的存取数据存储器(RAM),这种器件采用ATMEL公司的高密度、不容易丢失存储技术生产,并且能够与MCS-51系列的单片机兼容。片内含有8位中央处理器和闪烁存储单元,有较强的功能的AT89C51单片机能够被应用到控制领域中。AT89C51提供以下的功能标准:4K字节闪烁存储器,128字节随机存取数据存储器,32个I/O口,2个16位定时/计数器,1个5向量两级中断结构,1个串行通信口,片内震荡器和时钟电路。另外,AT89C51还可以进行0HZ的静态逻辑操作,并支持两种软件的节电模式。闲散方式停止中央处理器的工作,能够允许随机存取数据存储器、定时/计数器、串行通信口及中断系统继续工作。掉电方式保存随机存取数据存储器中的内容,但震荡器停止工作并禁止其它所有部件的工作直到下一个复位。2.4数据处理并显示模块2.4.1多位LED数码管显示一、数码管动态显示有多位LED数码管显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由FPGA的一个8位的I/O口控制,而每一位LED数码管的公共阴极或者公共阳极分别由FPGA的其它的I/O口线控制。对于8位的LED数码管显示,可用采用程序控制的方法,通过不断的移位发送选中要显示的数码管。可见在整个显示模块中至少要9根I/O口线。因为是动态显示,所以需要定时刷新LED数码管。为了稳定的显示,在多位LED数码管显示时需要有很高的数据刷新频率,否则会导致显示效果有些闪烁。二、数码管静态显示在多位LED数码管显示时,为了能够显示效果较好,简化电路,把每一位LED数码管的公共阴极或公共阳极通过串行限流电阻后接地或者接+5V,而每位LED数码管的段选线(a、b、c、d、e、f、h)与一片74LS164的4位并行输出口相连接。因为FPGA是并行工作的,故此时FPGA同时发送36个数据用于锁定9个显示的数码管。这样不用通过不断地刷新来改变显示数据,也没有延时,数码管也不会因为频率低而闪烁,只有FPGA发送的数据改变时数码管才发生相应改变。2.4.2128*64LCD显示一、128*64LCD串口方式显示当PSB脚接低电位时,模块将进入串行模式。从一个完整的串行传输流程来看,一开始先传输起始字节,它需先接收到五个连续的‘1’(同步位字符串),在起始字节,此时传输计数将被重置并且串行传输将被同步,再跟随的两位字符串分别指定传输方向位(RW)及寄存器选择位(RS),最后第八位则为‘0’。在接收到同步位及RW和RS资料的起始字节后,每一个八位的指令将被分为两个字节接收到:高4位(DB7~DB4)的指令资料将会被放在第一个字节的LSB(最低有效位)部分,而低4位(DB3~DB0)的指令资料则会被放在第二个字节的LSB部分,至于相关的另四位则都为‘0’。二、128*64LCD并口方式显示当PSB脚(OCMJ4X16A/B)接高电位时,模块将进入并行模式,在并列模式下可由指令DLFLAG来选择8位或4位接口,主控制系统将配合(RS,RW,E,DB0~DB7)来达成传输动作。从一个完整的流程来看,当下设定地址指令后(CGRAM,DDRAM)若要读取数据时需先DUMMYREAD一次,才会读取到正确数据,第二次读取时则不需DUMMYREAD,除非再进行下设定地址指令才需再次DUMMYREAD。在4位传输模式中,每一个八位的指令或数据都将被分为两个字节动作:较高4位(DB7~DB4)的资料将会被放在第一个字节的(DB7~DB4)部分,而较低4位(DB3~DB0)的资料则会被放在第二个字节的(DB7~DB4)部分,至于相关的另四位则在4位传输模式中DB3~DB0接口未使用。鉴于串口口传输方式可以大大地减少系统的I/O口使用量,并且可以提高系统的准确性,故采用串口传输方式。本设计采用的是128*64LCD液晶显示。主要参数:;;(3)LCD驱动电压(Vo):0~7V;(4)工作温度(Ta):0~55℃(常温)/-20~75℃(宽温);(5)保存温度(Tstg):-10~65℃(常温)/-30~85℃(宽温)。2.5键盘部分及所需芯片选择2.5.1键盘设计方案键盘在单片机应用系统中,实现输入数据、传送命令的功能,是人工干预的主要手段。键盘分两大类:编码键盘和非编码键盘。编码键盘:由硬件逻辑电路完成必要的键识别工作与可靠性措施。每按一次键,键盘自动提供被按键的读数,同时产生一选通脉冲通知微处理器,一般还具有反弹跳和同时按键保护功能。这种键盘易于使用,但硬件比较复杂,对于主机任务繁重之情况。非编码键盘:只简单地提供键盘的行列与矩阵,其他操作如键的识别,决定按键的读数等仅靠软件完成,故硬件较为简单,但占用CPU较多时间。有:独立式按键结构、矩阵式按键结构。首先,确定键盘编码方案:采用编码键盘或非编码键盘。随后,确定键盘工作方式:采用中断或查询方式输入键操作信息。然后,设计硬件电路。非编码键盘系统中,键闭合和键释放的信息的获取,键抖动的消除,键值查找及一些保护措施的实施等任务,均由软件来完成。键盘是单片机系统设计中一种主要的信息输入接口,合理的设计,不仅可以节省系统的设计成本,更可使仪器设备的操作变得更为简单、方便,很大程度上提高系统综合性能。本设计中,码表要设置很多参数,所以需要输入很多数据,所以本设计中的键盘部分是选用的ZLG7290I2接口键盘。键盘只需要12个,分别为0~9十个数和小数点以及确认键。2.5.2ZLG7290芯片特点选用的ZLG7290具有以下特点:I2C串行接口,提供键盘中断信号,方便与处理器接口;可驱动8位共阴数码管或64只独立LED和64个按键;可控扫描位数可控任一数码管闪烁;提供数据译码和循环,移位,段寻址等控制;8个功能键,可检测任一键的连击次数;无需外接元件即直接驱LED,可扩展驱动电流和驱动电压;提供工业级器件,多种封装形式PDIP24,SO24。3系统硬件设计3.1系统设计图图3-1系统电路图128*64LCD显示器128*64LCD显示器ZLG7920芯片ZLG7920芯片AT89C51主控芯片喇叭传感器键盘喇叭传感器键盘AT24C02图3-2系统框图系统电路图如图3-1所示,系统框图如图3-2所示。本设计采用的是128*64液晶显示器,以ZLG7290作为控制芯片的键盘,以AT89C51作为系统的主控芯片。3.2AT89C51主控芯片AT89C51通用寄存器如下:ACC:最重要的暂存器,运算资料转移都通过ACC。PC:程序计数器,记载着程序下一个待执行指令位址。B暂存器:用于乘法,除法指令的辅助暂存器。PSW程序状态字组:记录程序运作时,CPU各种状态。SP堆栈指示器:重置(RESET)時,堆栈指示器设为07H。DPTR数据指针暂存器:16位元暂存器,由DPH、DPL两个8位元暂存器阻成。工作寄存器:共有RB0、RB1、RB2、RB3四组工作寄存器。每个寄存器组有8个8位寄存器,分別为R0、R1、R2、R3、R4、R5、R6、R7。AT89C51最小系统电路图如图3-3所示。图3-3最小系统电路图数据存储结构如表3-1所示:表3-1系统结构存储结构FFH-80H8051特殊功能暂存器(SFR)或是8052的间接定址资料区7FH-30H使用者的一般资料存放区(亦可透过SP设定,存放堆叠资料)20H-2FH可位元定址区(20.0-20.7...2F.0.-2F.7)10H-1FH暂存器库RB3(R0-R7)10H-17H暂存器库RB2(R0-R7)08H-0FH暂存器库RB1(R0-R7)00H-07H暂存器库RB0(R0-R7)3.3脉冲发生源轮脉冲检测本设计采用了ST1101红外光电传感器,进行非接触式检测。当有物体挡在红外光电发光二极管和高灵敏度的光电晶体管之间时,传感器将会输出一个低电平,而当没有物体挡在中间时则输出为高电平,从而形成一个脉冲。该系统在自行车后轮的轴处保持着与轮子旋转切面平行的方向延伸附加一个铝盘,在这个铝盘的边沿处挖出若干个圆形过孔,把传感器的检测部分放在圆孔的圆心位置。每当铝盘随着后轮旋转的时候,传感器将向外输出若干个脉冲。把这些脉冲通过一系列的波形整形成单片机可以识别的TTL电平,即可算出轮子即时的转速。铝盘的圆孔的个数决定了测量的精度,个数越多,精度越高。这样就可以在单位时间内尽可能多地得到脉冲数从而避免了因为两个过孔之间的距离过大,而车子正好在过孔之间或者是在下个过孔之前停止了,造成较大的误差。本设计在铝盘过孔的设计上采用11个过孔,从而留下了10个同等的间距这样在以后的软件设计中能够较为方便的计算出速度里程。脉冲发生源的硬件结构图如图3-4所示。图3-4脉冲发生源硬件结构图(左为正视图,右为侧视图)信号预处理电路如图3-5所示,系统的信号预处理电路由二级电路构成,第一级是由开关三极管组成的零偏置放大器,采用开关三极管可以保证放大器具有良好的高频响应。当输入信号为零或负电压时,三极管截止,电路输出高电平;而当输入信号为正电压时,三极管导通,此时输出电压随着输入电压的上升而下降,这使得速度里程表既可以测量任意方波信号的频率,也可以测量正弦波信号的频率。由于放大器的放大功能降低了对待测信号的幅度要求,因此,系统能对任意大于0.5V的正弦波和脉冲信号进行测量。预处理电路的第二级采用带施密特触发器的反相器DM74LS14来把放大器生成的单相脉冲转换成与COMS电平相兼容的方波信号(如图3-6所示),同时将输出信号加到单片机的P3.4口上。利用施密特触发器状态转换过程中的正反馈作用,可以把边沿变化缓慢的周期性信号变换为边沿很陡的矩形脉冲信号。输入的信号只要幅度大于VT+,即可在施密特触发器的输出端得到同等频率的矩形脉冲信号。从传感器得到的矩形脉冲经传输后往往发生波形畸变。当传输线上的电容较大时,波形的上升沿将明显变坏;当传输线较长,而且接受端的阻抗与传输线的阻抗不匹配时,在波形的上升沿和下降沿将产生振荡现象;当其他脉冲信号通过导线间的分布电容或公共电源线叠加到矩形脉冲信号时,信号上将出现附加的噪声。无论出现上述的那一种情况,都可以通过用施密特反相触发器整形而得到比较理想的矩形脉冲波形。只要施密特触发器的VT+和VT-设置得合适,均能受到满意的整形效果。图3-5信号预处理电路图图图3-6信号处理波形图E2PROMAT24C02的应用AT24C02是CMOS2048位串行E2PROM,在内部组织成256×8位。AT24C02的特点是具有允许在简单的二线总线上工作的串行接口和软件协议。如图3-7所示,在本设计中用芯片AT24C02的SDA端与单片机的P3.7口相连,SCL端与单片机的P3.5口相连。因为在这个I2C总线上只有一个器件,所以把AT24C02的地址设为000,即把A0、A1、A2都接地。单片机计算出来的里程数据通过SDA、SCL向AT24C02资料传输与接口时序。当存储数据时,单片机首先向AT24C02发送写信号,当确认后从单片机内部的数据储存单元提取数据然后向AT24C02的内部地址传送数据。当显示里程时,单片机首先向AT24C02发送读信号,然后确认后,单片机从AT24C02内部的地址向单片机的读出单元字节读出数据,供显示所用。图3-7AT24C02与单片机的接口电路图3.4显示模块显示器电路原理图如图3-8所示。图3-8显示器电路原理图显示资料RAM(DDRAM)显示数据RAM提供64*2个字节的空间,最多可以控制4行16字(64个字)的中文字型显示,当写入显示资料RAM时,可以分别显示CGROM,HCGROM与CGRAM的字型;本系列模块可以显示三种字型,分别是半宽的HCGROM字型、CGRAM字型及中文CGROM字型,三种字型的选择,由在DDRAM中写入的编码选择,在0000H~0006H的编码中将选择CGRAM的自定字型,02H~7FH的编码中将选择半宽英数字的字型,至于A1以上的编码将自动的结合下一个字节,组成两个字节的编码达成中文字型的编码BIG5(A140~D75F)GB(A1A0~F7FF)。详细各种字型编码如下:一、显示半宽字型:将8位资料写入DDRAM中,范围为02H~7FH的编码。二、显示CGRAM字型:将16位资料写入DDRAM中,总共有0000H,0002H,0004H,0006H四种编码。三、显示中文字形:将16位资料写入DDRAM中,范围为A140H~D75FH的编码(BIG5),A1A0H~F7FFH的编码(GB)。将16位资料写入DDRAM方式为透过连续写入两个字节的资料来完成,先写入高字节(D15~D8)再写入低字节(D7~D0)。绘图RAM(GDRAM)绘图显示RAM提供64*32个字节的记忆空间(由扩充指令设定绘图RAM地址),最多可以控制256x64点的二维绘图缓冲空间,在更改绘图RAM时,由扩充指令设定GDRAM地址先设垂直地址再设水平地址(连续写入两个字节的数据来完成垂直与水平的坐标地址),再写入两个8位的资料到绘图RAM,而地址计数器(AC)会自动加一。整个写入绘图RAM的步骤如下:一、先将垂直的字节坐标(Y)写入绘图RAM地址;二、再将水平的字节坐标(X)写入绘图RAM地址;三、将D15~D8写入到RAM中(写入第一个Bytes);四、将D7~D0写入到RAM中(写入第二个Bytes)。3.5键盘及ZLG7290芯片芯片引脚及说明采用24引脚封装引脚图3-9所示,引脚说明如表3-2所示。图3-9ZLG7290芯片管脚图表3-2ZLG7290芯片管脚说明引脚号引脚名称引脚属性引脚描述13,12,21,22,3~6Dig7~Dig0输入/输出LED显示位驱动及键盘扫描线10~7,2,1,24,23SegH~SegA输入/输出LED显示位驱动及键盘扫描线20SDA输入/输出I2C总线接口数据/地址线19SCL输入/输出I2C总线接口时钟线14/INT输出中断输出端,低电平有效15、RES输入复位输入端,低电平有效17OSC1输入连接晶体以产生内部时钟18OSC2输出16VCC电源电源正(3.35~.5V)11GND电源电源地引脚功能ZLG7290可采样64个按键或传感器,检测每个按键的连击次数。其基本功能如下:一、键盘去抖动处理当键被按下和放开时,可能会出现电平状态反复变化,键盘抖动。若不作处理会引起按键盘命令错误,所以要进行去抖动处理,读取稳定的键盘状态为准。二、双键互锁处理当有两个以上按键被同时按下时,ZLG7290只采样优先级高的按键(优先顺序为S1>S2>…>S64,如同时按下S2和S18时采样到S2)。三、连击键处理当某个按键按下时,输出一次键值后,如果该按键还未释放,该键值连续有效,就像连续压按该键一样,这种功能称为连击连击。四、功能键处理功能键能实现2个以上按键同时按下来扩展按键数目或实现特殊功能。如图3-10为键盘电路原理图:图3-10键盘原理图从上图可以看出本设计共选用了12个键盘,从上到下,从左到右分别为1到9,0,小数点,和设置键。4系统软件设计4.1软件系统设计开始开始初始化初始化数据读出数据读出里程显示里程显示频率测量频率测量速度里程计算速度里程计算是报警报警是否是报警报警是否否否速度显示速度显示速度显示模块速度显示模块图4-1系统流程图系统流程图如图4-1所示。待测信号经预处理电路后加至单片机的P3.4(T0)引脚可为单片机测量信号频率提供有效的输入信号。单片机通过检测P3.4引脚电平来决定是否启动测量频率程序。当该引脚为高电平时,系统处于等待状态,要一直到该引脚出现低电平时才开始测频率。我们可从硬件的铝盘上知道两个过孔之间在圆周上的距离。而这个距离M正好为计算速度和距离起到了基本的数据储备作用。同时可以从TL0寄存器知道在两秒内单片机检测到的N个脉冲。而M×N所得到的正是这两秒内铝盘在圆周上所走得距离S。(此时假设在这个两秒内车子是匀速前进的),距离S除以2秒的时间,就可以大概的算出这2秒内铝盘的线速度。再根据铝盘与自行车的轮子保持着一样的角速度,得到铝盘的线速度与轮子线速度的关系,从而算出自行车在这2秒的平均速度。至于里程的计算,根据速度计算的相加即可得到目前的总里程数。通过单片机计算出来的速度和里程的数据,输出给显示模块。总里程数的显示是设定出现在自行车开动,单片机开机经过初始化后显示出来,这样以来用户可以清楚的知道自己的车子已经运行了多少公里了。而速度的显示则是在计算出速度里程后立刻显示出来,体现实时性。4.2液晶显示液晶显示程序流程液晶显示是本设计中比较重要的部分,因为设计的最终没目的是要显示行驶的里程、速度、时间等信息,以及安装信息和预设运动量的设置都要通过本部分来完成。所以本部分的设计好坏也将影响到整个设计的最终结果。汉字字符显示地址如表4-1所示。表4-1DDRAM地址表X坐标Line180H81H82H83H84H85H86H87HLine290H91H92H93H94H95H96H97HLine388H89H8AH8BH8CH8DH8EH8FHLine498H99H9AH9BH9CH9DH9EH9FH程序流程图如图4-2所示。设置下一个地址设置下一个地址字数是否超过8否是待命、脱离睡眠开显示设置显示地址写入数据开始初始化,功能设定图4-2显示控制流程图4.2.2显示器具体指令指令代码为(01H)RSRWDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLLLLCODE:功能:将DDRAM填满”20H”(空格),把DDRAM地址计数器调整为“00H”,重新进入点设定将I/D设为”1”,光标右移AC加1。地址归位(02H)RSRWDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLLHXCODE:功能:把DDRAM地址计数器调整为“00H”,光标回原点,该功能不影响显示DDRAM。点设定(04H/05H/06H/07H)RSRWDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLHI/DSCODE:功能:设定光标移动方向并指定整体显示是否移动。I/D=1光标右移,AC自动加1;I/D=0光标左移,AC自动减1;SH=1且DDRAM为写状态,整体显示移动,方向由I/D决定(I/D=1左移,I/D=0右移);SH=0或DDRAM为读状态,整体显示不移动。显示状态开/关(08H/0CH/ODH/0EH/0FH)RSRWDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLHDCBCODE:功能:D=1:整体显示ON;D=0:整体显示OFF;C=1:光标显示ON;C=0:光标显示OFF;B=1:光标位置反白且闪烁;B=0:光标位置不反白闪烁。光标或显示移位控制(10H/14H/18H/1CH)RSRWDB7DB6DB5DB4DB3DB2DB1DB0LLLLLHS/CS/LXXCODE:功能:10H/14H:光标左/右移动,AC减/加1;18H/1CH:整体显示左/右移动,光标跟随移动,AC值不变。功能设定(20H/24H/26H/30H/34H/36H)RSRWDB7DB6DB5DB4DB3DB2DB1DB0LLLLHDLXREXXCODE:功能:DL=1:8-BIT控制接口;DL=0:4-BIT控制接口;RE=1:扩充指令集动作;RE=0:基本指令集动作。设定CGRAM地址(40H-7FH)RSRWDB7DB6DB5DB4DB3DB2DB1DB0LLLHAC5AC4AC3AC2AC1AC0CODE:功能:设定CGRAM地址到地址计数器(AC),需确定扩充指令中SR=0(卷动地址或RAM地址选择)。设定DDRAM地址(80H-9FH)RSRWDB7DB6DB5DB4DB3DB2DB1DB0LLHAC6AC5AC4AC3AC2AC1AC0CODE:功能:设定DDRAM地址到地址计数器(AC)。写资料到RAMRSRWDB7DB6DB5DB4DB3DB2DB1DB0HLD7D6D5D4D3D2D1D0CODE:功能:写入资料到内部的RAM(DDRAM/CGRAM/GDRAM),每个RAM地址都要连续写入两个字节的资料。读出RAM的值RSRWDB7DB6DB5DB4DB3DB2DB1DB0HHD7D6D5D4D3D2D1D0CODE:功能:从内部RAM读取数据(DDRAM/CGRAM/GDRAM),当设定地址指令后,若需读取数据时需先执行一次空的读数据,才会读取到正确数据,第二次读取时则不需要,除非又下设定地址指令。反白选择(04H-07H)RSRWDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLHR1R0CODE:功能:选择4行中的任一行作反白显示,并可决定反白与否。4.3键盘输入部分键盘采集模块采用了ZLG7290读取芯片,20个引脚,引脚说明如表4-2。表4-2ZLG7290引脚说明引脚号引脚名称引脚属性引脚说明13、12、21、22、3、4、5、6Dig7~Dig0I/O键盘扫描线10、9、8、7、2、1、23、24SegH~SegAI/O键盘扫描线20SDAI/OI2C总线接口数据/地址线19SCLI/OI2C总线接口时钟线14/INTI中断输出端、低有效15/RESI复位输入端、低有效17OSIC1I连接晶体以产生内部时钟18OSIC2016VCC电源电源正(3.3~5.5V)11GND电源电源地该芯片可驱动64个按键,能提供数据译码和循环、移位、段寻址等控制,8个功能键,可检测任一键的连击次数。因为本设计所用的按键数无需64个,所以采用了其中的16个按键,用到了3、4、5、6、1、2、23、24八个引脚分别与ROW1~ROW4、COL1~COL4相连。当有按键按下时,中断输出端/INT变成低电平,芯片ZLG7290通过扫描将所按的键值存入寄存器,单片机通过读取ZLG7290_Key寄存器的值可获取所按下的键值,寄存器ZLG7290_Key所返回的键值是按64个按键所编排的,本设计只用了其中的16个键,并不是一一对应于64键中的第1~16个键。通过C程序按图4-2所示内部重新设置返回值,以达到所按的键与图3-10所示,在设计中,K1、K2、K3、K4、K5、K6、K7、K8、K9、分别代表数字1~9的数字键,K0、K15、K16分别代表数字0和-2(通道1)与-16(通道2)。SDA(I2C总线接口数据/地址线)、SCL(I2C总线接口时钟线)、/INT(中断输出端、低有效)三个引脚与单片面机相连,此三个连接线也是单片机控制其工作和采集其键值的接口,芯片的晶振(4MHZ)和工作电压(+5V)及复位等由外部直接接入提供。键盘采集流程图如图4-3:是是否是有键按下?键盘扫描键值保存产生中断开始键值是否被读取否否图4-3键盘采集流程图当输入设备键盘有键按下是,ZLG7290通过扫描键盘将所按键对应的键值(按8*8矩阵排序)保存与内部寄存器,同时将该芯片的中断输出口通知单片机,单片机采集到外部中断时,停止当前操作而去读取ZLG7290保存在内部寄存器KEY里的值。致谢在这里,首先要感谢学院领导和老师能够给予我这样一个机会,能够做一个自己感兴趣的课题,来给自己四年的学业画上一个圆满的句号。感谢我的指导老师丁老师。由于我去校外实习两个月,所以关于毕业设计的一些事情都是丁老师特意通知的,而且在我实习回来后,对我的课题进行批注和辅导,再次感谢丁老师对我的悉心指导。感谢我的辅导员王老师。我们即将毕业离去,回首大学四年,不管是学习、工作、生活等方面遇到什么问题,王老师都像我们的父母一样关心着我们,教育我们如何做人做事。感谢我的同学。在做毕业设计这段时间里,我遇到很多难题,同学给予我很大的帮助,如果没有他们,我的毕业设计就无法完成。感谢我的父母。他们时时刻刻在我的身后支持着我,不管遇到什么困难和挫折,他们永远都是我温暖的避风港,给予我支持和帮助。千言万语也无法诉说我内心的感谢,在我以后的道理上,我不会忘记他们对我的支持和帮助,最后,衷心的说一声:谢谢你们!参考文献马忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2001李维堤,郭强.液晶显示应用技术[M].北京:电子工业出版社,1996赵负图,传感器集成电路手册,第一版,化学工业出版社,2004,590~591王建校.51系列单片机及C51程序设计[M].北京:科学出版社,2002.霍孟友.单片机原理与应用[M].北京:机械工业出版社,2004.何立民,单片机应用系统设计,北京:航天航空大学出版社,2~5,46~50李广弟,单片机基础,北京:北京航空航天大学出版社,2001,56~64何希才,新型实用电子电路400例,电子工业出版社,2000年,60~65WolfW,孙玉芳等译.嵌入式计算系统设计原理.北京:机械工业出版社,2002郑人杰.计算机软件测试技术.北京:清华大学出版社,1992胡汉才.单片机原理及系统设计.北京:清华大学出版社,2002TexasInstrumentsInc.TPS767D318Datasheet.1999附录源程序(用C51编写的,keilC51编译器)/*************************************************************************************************************************************************************多功能自行车速度计程序。AT89C51单片机,24M晶振,LCD同时显示自行车速度、行程和时钟,并有超速报警功能。通过键盘输入可对准时钟,也可随时对时钟和行程复位,时钟复位时即进入计时模式。*************************************************************************************************************************************************************/#include<REG52.h>#define ucharunsignedchar#define uintunsignedint/*************************将表格数据存于ROM中*******************************/uchar codestart1[]={"WELCOME!****************"};//开机界面uchar codechart[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//数据0~9的ASCII存于ROM中ucharcodegroup[21][4]={{"c4.5"},{"c4.6"},{"c4.7"},{"c4.8"},{"c4.9"},{"c5.0"},{"c5.1"},{"c5.2"},{"c5.3"},{"c5.4"},{"c5.5"},{"c5.6"},{"c5.7"},{"c5.8"},{"c5.9"},{"c6.0"},{"c6.1"},{"c6.2"},{"c6.3"},{"c6.4"},{"c6.5"}}; //辐条间距存于ROM中uchar codespeed_total[]={"km/hkm::"}; //显示字符存于ROM中uchar codeset[]={"setupthespace:m"};uchar codeset_time[]={"setupthetime:"};ucharcodemax[32]={"6.5cmisthemaximumvalue!"};ucharcodemin[]={"4.5cmistheminimumvalue!"};ucharCLK[3]={0}; //时钟数据单元ucharCOUNT_CLK;uchar code T_code[21]={162,165,169,172,176,180,184,187,190,194,198,201,205,209,212,216,219,223,226,230,234}; //不同辐条间距对应的速度计数数值uchar code COUNT_code[21]={222,217,212,208,204,200,196,192,188,185,181,178,175,172,169,166,163,161,158,156,153}; //不同辐条间距对应的行程计数数值 /*******************************定义全局变量**********************************/uchar count=0,latch=0;uchar vr=10;uchar loop=198;uint s=0,s0=0;/******************************位变量申明*************************************/sbitbell=P3^4; //蜂鸣器sbit RS=P2^0; //LCD寄存器选择sbit RW=P2^1; //LCD读写操作选择sbit E=P2^2; //LCD选通引脚sbit SET_RST=P2^3; //自行车辐条间距设置sbit INC=P2^4; //自行车辐条值加1sbit DEC=P2^5; //自行车辐条值加1sbit RESET=P3^0; //自行车行程和时间清零复位/*******************************延时函数**************************************/voiddelay(){ uchari;for(i=50;i>0;i--);}/*******************************告警音延时函数********************************/Voidalarm(uchari){ for(;i>0;i--) { bell=1; delay(); } bell=0;}/******************************LCD写指令选通函数*****************************/enable(){ RS=0; //选择指令寄存器 RW=0; //写指令状态 E=0; //LCD选通引脚打开 delay(); E=1; //LCD选通引脚关闭}/*******************************LCD写数据选通函数****************************/write(){ RS=1; //选择数据寄存器 RW=0; //写指令状态 E=0; //LCD选通引脚打开 delay(); E=1; //LCD选通引脚关闭}/**********************************LCD初始化*********************************/void LCD_init(){ P2=0xFF;P1=0x01; //清显示器指令 enable(); P1=0x3c; //功能设置指令 enable(); P1=0x0c; //显示开关控制指令 enable(); P1=0x06; //设置光标和显示模式 enable();}/*********************************LCD清屏************************************/void LCD_clr(){ P2=0xFF;P1=0x01; //清显示器指令 enable();}/*******************************送2行数据函数到LCD***************************/void LCD_write(uchardata_w[]){ucharj,k; k=0x80; for(j=0;j<16;j++) //向LCD送第一行数据 { P1=k; enable(); P1=data_w[j]; write(); k++; } k=0xc0; //向LCD送第二行数据 for(j=16;j<32;j++) { P1=k; enable(); P1=data_w[j]; write(); k++; } }/*****************************显示时间秒*************************************/ voiddisp_s() { uchari; P1=0xc6; enable(); i=CLK[0]/10; P1=chart[i]; write(); P1=0xc7; enable(); i=CLK[0]%10; P1=chart[i]; write(); }/************************************显示时间分******************************/voiddisp_m() { uchari; P1=0xc3; enable(); i=CLK[1]/10; P1=chart[i]; write(); P1=0xc4; enable(); i=CLK[1]%10; P1=chart[i]; write(); }/************************************显示时间时*****************************/voiddisp_h() { uchari; P1=0xc0; enable(); i=CLK[2]/10; P1=chart[i]; write(); P1=0xc1; enable(); i=CLK[2]%10; P1=chart[i]; write(); }/*************************显示时间之间的两个点号*****************************/voiddisp_dot(){ P1=0xC2; enable(); P1=':'; write(); P1=0xC5; enable(); P1=':'; write();}/***********************时钟调整**********************************************/voidadjust_time(){ uintab; if(INC==0) { CLK[1]++; alarm(400); if(CLK[1]==60) CLK[1]=0; disp_m(); for(ab=500;ab>0;ab--) delay(); } if(DEC==0) { CLK[2]++; alarm(400); if(CLK[2]==24) CLK[2]=0; disp_m(); for(ab=500;ab>0;ab--) delay(); } }/***********************************速度显示**********************************/voiddisp_speed(ucharn){ ucharm; if(n>99) n=n-100; //速度大于100时,速度计复位显示 P1=0x80; enable(); m=n/10; P1=chart[m]; //LCD显示速度十位 write(); P1=0x81; enable(); m=n%10; P1=chart[m]; //LCD显示速度个位 write();}/*****************************显示“已输入最大值”提示语句********************/void disp_max(){ LCD_clr(); LCD_write(max);}/****************************显示“已输入最小值”提示语句*********************/void disp_min(){ LCD_clr(); LCD_write(min);}/***************************自行车轮胎辐条调整********************************/void input() { uinti; if(INC==0) //INC==0,执行辐条间距值加一操作 { if(vr==20) { disp_max(); //显示"输入已是最大值"提示语句 alarm(400); //蜂鸣器发出提示音 for(i=10000;i>0;i--) delay(); LCD_clr(); LCD_write(set); } else { vr++; alarm(150); for(i=1000;i>0;i--) delay(); if(vr==20) { disp_max(); //显示"输入已是最大值"提示语句 alarm(200); //蜂鸣器发出提示音 for(i=10000;i>0;i--) delay(); vr=20; LCD_clr(); LCD_write(set); //显示"请输入数据"语句 } } } if(DEC==0) //DEC==0,执行辐条间距值加一操作 { if(vr==0) { disp_min(); //显示"输入已是最小值"提示语句alarm(200); //蜂鸣器发出提示音 for(i=10000;i>0;i--) delay(); LCD_clr(); LCD_write(set); } else { vr--; alarm(150); for(i=1000;i>0;i--) delay(); if(vr==0) { alarm(400); disp_min(); //显示"输入已是最小值"提示语句 for(i=10000;i>0;i--) delay(); vr=0; LCD_clr(); LCD_write(set); } } }}/***************************显示自行车辐条调整后的值**************************/void disp_input(){ uchari; ucharx=0xc0; P2=0xFF; for(i=0;i<4;i++) { P1=x; enable(); x++; P1=group[vr][i]; write(); } }/***********************************行程显示**********************************/voiddisp_all(uints_all){ uchara; if(s_all>9999) s=s0=0; P1=0x89; //显示行程十位 enable(); a=s_all/1000; P1=chart[a]; write(); P1=0x8a; //显示行程个位 enable(); a=(s_all%1000)/100; P1=chart[a]; write(); P1=0x8b;enable();P1=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论