首页 单片机的汽车里程表设计+单片机电子钟合一

单片机的汽车里程表设计+单片机电子钟合一

举报
开通vip

单片机的汽车里程表设计+单片机电子钟合一单片机的汽车里程表设计+单片机电子钟合一 湖南工业职业技术学院 毕业实践课题及任务 该课题主要是利用单片机技术进行的一项软、硬件开发技术。其目的是培养学生利用单片机技术解决生产、生活中的实际问题~对提高学生设计能力动手能力和工程实践技能有较重要的意义。学生应具备电路分析、电子课题简介 技术、单片机技术等方面的相关知识~熟悉单片机系统流程图、硬件结构图及汇编语言~能进行单片机控制电路的连接、程序编写、输入、修改及调试等 一、 毕业设计,论文,的内容概述: 汽车里程表是一种具有速度测量,行程测量、超速报警及L...

单片机的汽车里程表设计+单片机电子钟合一
单片机的汽车里程表设计+单片机电子钟合一 湖南工业职业技术学院 毕业实践课题及任务 该课题主要是利用单片机技术进行的一项软、硬件开发技术。其目的是培养学生利用单片机技术解决生产、生活中的实际问题~对提高学生设计能力动手能力和工程实践技能有较重要的意义。学生应具备电路分析、电子课题简介 技术、单片机技术等方面的相关知识~熟悉单片机系统流程图、硬件结构图及汇编语言~能进行单片机控制电路的连接、程序编写、输入、修改及调试等 一、 毕业设计,论文,的内容概述: 汽车里程表是一种具有速度测量,行程测量、超速报警及LCD显示功能的单片机应用系统,利用硬件电路和软件控制来实现上述功能。 二、毕业设计(论文)的要求与数据: 1、写出汽车里程表的控制要求分析 2、画出硬件电路接线图 3、画出控制系统流程图 4、编写控制程序 5、写出汽车里程表的使用 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 三、毕业设计,论文,应完成的工作: 1、毕业设计,论文,应有详细的设计 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 、控制电路、控制程序及分析说明 2、毕业设计,论文,应在规定的时间内完成 3、毕业设计,论文,应严格按设计规范打印、装订 课题任务 要求 第 1 页 共 76 页 湖南工业职业技术学院 进程安排 1、单片机原理及应用 北京航空航天大学出版社 孙涵芳主编 2、电子技术 高教出版社 胡宴如主编 3、电子线路CAD 机械工业出版社 王廷才主编 4、单片机应用程序设计技术 北京航空航天大学出版社 周航慈主编 参考资料 第 2 页 共 76 页 湖南工业职业技术学院 湖南工业职业技术学院毕业实践 开题报告 课题研究开题报告ppt课题开题报告格式污水处理厂开题报告研究生开题报告酒店vi设计开题报告 书 系 专业 学生姓名 班级 学号 课题名称 课题 准备 情况 思路和 方法 拟重点 解决的 问题 计 划 进 度 指导教 师意见 签名: 年 月 日 第 3 页 共 76 页 湖南工业职业技术学院 湖南工业职业技术学院毕业实践考核表 系 专业 学生姓名 班级 学号 课题名称 课题 完成 情况及 自我评 价 评语 评分 指导教,共40分, 师 评价 LEC评价法下载LEC评价法下载评价量规免费下载学院评价表文档下载学院评价表文档下载 签名: 年 月 日 评语 评分 评阅教 ,共30分, 师评价 签名: 年 月 日 评语 评分 答辩小,共30分, 组评价 组长签名: 年 月 日 经综合考核该学生毕业实践得分 分,评定为 毕业实践 评审组审 核 组长签名: 年 月 日 第 4 页 共 76 页 湖南工业职业技术学院 电动自行车里程表的软件设计 序 言 本文介绍里程表设计以单片机和霍尔传感器为核心。霍尔传感器将到来的低电平脉冲信号输入到单片机进行控制与计算,再采用LED模块进行显示,使得电动自行车的里程数据能直观的显示给使用者。 自行车里程表是用于远距离连续测量自行车行驶距离的仪表。它分为电源、霍尔传感器和显示器3部分。目前,里程表普遍使用在汽车和摩扦车上,是一种机械测量装置,测试精度相对低,自行车上使用里程表的还很少见。针对这种情况,研制新型的数字化里程表用于自行车上是非常必要的。本文介绍的自行车里程表是由电源稳压系统供电,AT89C52单片机为中央处理器,结合高精度的控制电路,方便地实现了智能化、高精度、高可靠性、高效率的自行车里程表的设计,并且使用方便。 里程表广泛应用于各类机车,包括厂矿企业所使用的电机车和汽车、摩托车等。传统的机械式里程表虽然稳定可靠,但功能单一,随着电子技术的迅猛发展,电子式里程表得以广泛应用。一种以单片机为核心的里程表,它不仅可以显示车辆行驶的总里程,也可显示一段时间的阶段里程,并且具有较强的再开发能力。这一切都是因为利用了单片机系统强大的数据存储和处理控制功能。里程表以单片机AT89C52为核心,由系统输入、单片机部分和系统输出组成。 第 5 页 共 76 页 湖南工业职业技术学院 第 1 章 绪论 低等优点被人们单片机自从推出以来,以其超小型化、结构紧凑、可靠性高、成本广泛接受,从而应用于工业、电讯、数据处理、仪器仪表等多方面。电动自行车里程表是电动自行车的重要配件,在电动自行车仪表中占重要位置,但几十年来其发展变化并不大,现在国外很多车中使用了数字里程表,但在国内还并不多见。 1.1 课题背景 里程表的原理很简单,因为汽车车轮的直径已知,车轮的圆周长便是恒定不变的。由此可以计算出每走一里路车轮要转多少圈,这个数也是恒定不变的。因此只要能够自动把车轮的转数积累下来,然后除以每一里路对应的转数就可以得到行驶的里程了。这样简单的原理古人就已经发现,并且开始使用了。“记里鼓车”就是这样的装置,它是利用上述原理,再加上巧妙的机构使得车轮每转一定圈数就自动敲一下鼓,此时只要有专人把它记下了,就可以得到所走里程。此装置十分巧妙无论白天、黑夜均可使用,而且盲人也可使用,体现出了我国古代劳动人民的聪明才智。不过,如果车上没有人默记鼓声数目的话,单靠记里鼓车本身还不能累计一共走了多少里。而且车停下来之后谁也不知道这车曾经走过多少里路,这是美中不足之处。 从保护环境和经济条件许可等因素综合来看,电动自行车目前乃至今后都有着广阔的发展空间。目前市面上电动自行车的速度表和里程表都是机械的,看起来不够直观与方便。如果能用LED直接显示出来里程数或速度值,就可节省用户的时间及精力处理自行车行进过程中的突发事件。 1.2 里程表的发展 现在汽车上的里程表可就不一样了,它克服了“记里鼓车”的不足之处,既能告诉 你这次走了多少公里,也能记忆自从出厂以来一共走了多少公里,于是,车辆是否需要 第 6 页 共 76 页 湖南工业职业技术学院 大修,发动机比例关系是否应该报废,全都有记录可依。汽车发动机的轴把动力传给变速箱,从变速箱的输出轴到车轮的传动比是不变的。在变速箱的输出轴上装有一根“软轴”,一直通到驾驶员面前的里程表里去。所谓“软轴”就是像自行车线闸用的拉线那样有钢丝芯的螺旋管,管壁和内芯之间有润滑油,外管固定而内芯可以转动,这个内芯的转速与车轮的转速有着恒定的比例关系。软轴通到车速表,使得指针能把车的行驶速度指示出来。同时,软轴旋转还经过蜗轮蜗杆传到车速表中间的滚轮计数器上,把车轮的转数所代表的里程数累计了下来,因为车速和里程都是靠同一根软轴传来的旋转动作驱动的,所以这两个表在一起,前者用指针指示,后者由滚轮计数器累计。 新型小汽车的里程表里包括由同一软轴带动的两个滚轮计数器,分别累计本次里程和总里程。本次里程通常有四位数,供短期计数,这是可以清零的;总里程则有六位数,不能清零。本次里程的单独指示和清零对于出租车的计费十分不方便。 最近电子式车速里程表逐步推广,它不用软轴,而是在变速箱输出轴上安装脉冲发生器,用导线把电脉冲传到仪表里,用脉冲频率指示速度,用脉冲计数器累计里程。看起来电子式车速里程表比先前的机械电磁式的更合理,因为它不用软轴传动。但是因为机械电磁式的价格比较便宜,在目前汽车里用得仍然比较多。 汽车里程表主要分为机械式和电子式两种,目前市场上的大部分新车型都采用电子式里程表,而配备机械式里程表的大都属于较老车型,在二手车市场上比较多见,像老款的捷达、普桑和富康,这些热销车型都是机械式里程表。回调里程表其实很简单,尤其是机械式里程表,几分钟就可以了。而调整电子式里程表的成本较高,需要专门的设备。现在市面上就有一种专门针对电子式里程表的调表仪器。 早期的机械软轴的里程表几乎已经消失了,取而代之的是电子式的里程表和液晶显示屏,过去可以通过拨数码齿轮的方式调整里程表,现在这些方法都行不通,不过调表的需求并不随调整难度的增加而减少,如卖车和新车的都需要减小里程数掩盖车子真实行驶里程。公家车的司机又需要增加里程数。如果减小液晶表的公里数只能通过编程器调整存储片数据来实现,这需要专门的设备和知识,普通人要调整的确不易。但如果要增加公里数实现起来就要容易很多了,我们只要给车速传感器提供一个符合要求的信号就可以了。 第 7 页 共 76 页 湖南工业职业技术学院 1.3 设计的主要内容及技术指标 单片机软件设计程序主要包括里程设计模块;存储历史里程数据设计模块;里程的显示设计模块;里程公里数的累计设计模块;里程公里数的清0设计模块。里程计数时有一盏指示灯闪烁;用AT24C01进行对历史里程数据存储;用共阴7段动态显示的数码管进行显示公里数;用个开关实现对里程公里数的清0功能;用霍尔传感器实现对里程车轮圈数的累计功能。 主要技术指标: 一. 完成里程的显示功能 二(能存贮历史里程数据 三(能够清除历史数据 四(有一盏指示灯 第 8 页 共 76 页 湖南工业职业技术学院 第 2 章 硬件的设计 2.1 单片机简介 单片机是单片微型计算机(Singlc-Chip Microcomputer)的简称。单片机是将中央处理器(CPU),程序存贮器(ROM或EPROM),随机存贮器(RAM),定时器/计数器,并行及 [1]串行I/O口等电路集成在一块芯片上做成的计算机。单片机的典型结构如图2-1-1所示。 CPU 时钟 定时 计数器 RAM ROM 并行口 串行口 单片机的典型结构,图2-1-1, [8]单片机与一般的非单片型微型机相比,具有以下特点: , 具有较强的通用性又有相当的专用性,尤其适合于各种控制系统。 , 片内带有定时器/计数器。 , 片内设有多个I/O接口,便于系统扩展及信息交换。 , 使用汇编语言,指令系统的指令字节数较少,程序执行速度快,节省存贮器。 , 多品种,多系列。 第 9 页 共 76 页 湖南工业职业技术学院 2.2 AT89系列单片机简介 AT89系列单片机是以8051为内核,结合自己的技术优势构成的,所以它和8051是兼容的系列。因此,AT89系列对于以8051为基础的应用系统而言,是十分容易进行取代和构成的。而且对于熟悉8051的用户来说,选用AT89系列单片机进行系统设计也是轻而易举的。 [3]AT89系列单片机具有下列很明显的优点: 1(和AT8051接插相兼容 AT89系列单片机的引脚和8051是一样的,因此,当选用AT89系列单片机取代8051时,可以直接替换。这时不管是采用40引脚还是44引脚产品,只要选用相同的AT89系列单片机取代8051单片机即可。 2(以EEPROM电可檫除和Flash技术为主导的存储器 ATMEL公司把EEPROM和Flash技术巧妙相结合形成特殊的集成电路,从而使应用领域扩大。由于AT89系列内部含有Flash存储器,因此在系列的开发过程中可以十分容易地进行程序的修改,从而大大缩短了系统的开发周期。同时,在系统的工作过程中,能有效地保存部分重要数据,不受外界因素而遭到破坏(如电源故障等),这给便携类产品的应用提供了极大方便。含有EEPROM和Flash存储器是AT产品的明显特色之一。 3(静态时钟方式 AT89系列单片机采用静态时钟方式,可以节省电能。这对于降低便携类产品的应用提供了极大方便。含有EEPROM和Flash存储器是AT产品的明显特色之一。 2.3 AT89C52系列单片机的介绍 AT89C52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含8K bytes 的可反复擦写的只读程序存储器(PEROM)和256 bytes 的随机存取数据存储器(RAM),器 51指令系统及8052件采用ATMEL公司的高密度,非易失性存储技术生产,与 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 MCS- 产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C52 [13]单片机适合于许多较为复杂控制应用场合。 主要性能参数: 第 10 页 共 76 页 湖南工业职业技术学院 1. 与MCS-51产品指令和引脚完全兼容 2. 18K 字节可重擦写Flash闪速存储器 3. 1000次擦写周期 4. 全静态操作:0Hz-24MHz 5. 三级加密程序存储器 6. 256*8字节内部RAM 7. 32个可编程I/O口线 8. 3个16位定时/计数器 9. 8个中断源 10.可编程串行UART通道 11.低功耗空闲和掉电模式 功能特性概述: AT89C52提供以下标准功能:8K 字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。引脚如图3.3-1所示。振荡器反相放大器如图3.3-2所示。 图3.3-1 XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。 第 11 页 共 76 页 湖南工业职业技术学院 XTAL2 NC 外部振 XTAL1 荡信号 输入 GND 图3.3-2 中断: AT89C52共有6个中断向量:两个外中断(INT0和INT1),3个定时器中断(定时器 0,1,2)和串行口中断。所有这些中断源可通过分别设置专用寄存器IE的置位或清0 来控制每一个中断的允许或禁止。IE也有一个总禁止位EA,它能控制所有中断的允许 或禁止。 AT89C52编程方法: 1. 在地址线上加上要编程单元的地址信号。 2. 在数据线上加上要写入的数据字节。 3. 激活相应的控制信号。 EA4. 在高电压编程方式时,将/Vpp端加上+12V编程电压。 5. 每对Flash存储阵列写入一个字节或每写入一个程序加密位,加入一个 PROGALE/编程脉冲。每个字节写入周期是自身定时的,通常约为1.5ms。重 复1-5步骤,改变编程单元的地址和写入的数据,直到全部文件编程结束。 AT89C52的极限参数: 工作温度:-55? to +125? 储藏温度:-65? to +150? 任一引脚对地电压:-1.0V to +7.0V 最高工作电压:6.6V 直流输出电流:15.0mA 第 12 页 共 76 页 湖南工业职业技术学院 2.4 里程表各部分电路介绍 本次里程表的设计,硬件电路主要由霍尔传感器电路,里程指示电路,里程数据存储电路,时钟电路,LED显示模块及74LS07驱动器构成。 2.4.1 霍尔传感器电路 霍尔传感器电路图如下图3.4.1-1所示。 图3.4.1-1 2.4.2 里程指示电路 霍尔传感器发出一个低电平脉冲,里程显示时四个数码管点亮后开始计数,表明电动自行车正在行驶中,一盏指示灯一直闪烁着。电路如图3.4.2-1所示。 图3.4.2-1 第 13 页 共 76 页 湖南工业职业技术学院 2.4.3 里程数据存储电路 里程数据的存储电路是本次设计的关键电路,单片机首先向AT24C01发送写信号,当确认后从单片机内部的数据储存单元提取数据然后向AT24C01的内部地址传送数据。 当显示里程时,单片机首先向AT24C01发送读信号,然后确认后,单片机从AT24C01内部的地址向单片机的读出单元字节读出数据,供显示所用。因此,最终可保证掉电时数据不丢失。 2C总线的的介绍: I 22IC总线是双线串行总线。IC总线采用二线传输,即SDA串行数据线和SCL串行 2时钟线。总线和器件之间的数据传送均由SDA数据线完成。一个IC总线系统里的所有外围器件均采用器件地址和引脚地址的编址方式。系统中主CPU对任何节点的寻址没有 采用传统的片选线方式,而是采用纯软件的寻址方式。为了能使总线上的所有节点器件 2输出实现“线”与逻辑功能,IC器件输出端必须是漏极或集电极开路结构,即SDA和 [7]SCL接口线上必须加上拉电阻。 里程数据存储电路,如图3.4.3-1: 图3.4.3-1 2.4.4 时钟电路 图3.4.4-1 第 14 页 共 76 页 湖南工业职业技术学院 在图3.4.4-1的电路中,电容器C1和C2对振荡频率有微调作用,通常的范围:30?10PF;石英晶体选择6MHZ或12MHZ都可以。其结果只是机器周期时间不同,影响计 [12]。 数器的计数初值 2.4.5 LED显示模块电路及74 LS07驱动器 LED显示器采用动态显示,用74LS07驱动共阴极LED数码管。LED显示模块电路图, 如图3.4.5-1所示。LED数码管结构图,如图3.4.5-2(a),(b)为共阴极型,(c)为共阳极型。 图3.4.5-1 图3.4.5-2 OC门驱动器用7407,7407 即TTL 集电极开路六正相高压驱动器.当7407输出低电 第 15 页 共 76 页 湖南工业职业技术学院 ,限流电阻流入LED平时,没有电流流过LED,当7407输出为开路状态时,电流经100 显示器,每个七段LED的公共端都接一个7407驱动器。 7407模型如图3.4.5-3: 图3.4.5-3 7407引脚如图3.4.5-4: 图3.4.5-4 第 16 页 共 76 页 湖南工业职业技术学院 第 3 章 软件的设计 3.1 系统的总体设计 一个完整的单片机系统,包括软硬件两个方面。硬件是系统可靠运行的“载体”,是基础,而软件则是使“载体”产生动力的发电机,二者相辅相成,缺一不可。从设计者的角度出发,一个硬件电路的设计过程往往就是设计者的经验不断积累的过程。 总体设计流程: 在设计硬件电路时: 一般的流程是: (1) 器件选择(包括单片机和外围芯片的选择) (2) 电路图绘制 (3) PCB制板 (4) 硬件检查和排错 (5) 硬件电路调试完毕 只有在硬件平台建立之后才能更好进入软件系统的调试。 在进行软件系统的设计时,设计者首先要建立完整,总体的概念,一个完整的软件系统是由各个功能模块组成的。程序设计者要时刻牢记如何将那些独立,分散的子程序模块通过主程序连接起来,并最终实现系统的目标功能。 3.2 单片机应用软件设计 应用软件应在硬件电路的支持下能可靠地实现应用系统的各种功能。它应具有下列 [2]特点: (1) 结构清晰,简捷,流程合理。 (2) 各功能程序模块化,子程序化,既便于调试,链接,也便于移植,修改。 (3) 程序存储区,数据存储区规划合理,既节约内存容量,又便于操作。 第 17 页 共 76 页 湖南工业职业技术学院 (4) 各功能程序的运行状态,运行结果以及运行要求尽量设置状态标志,以便查询, 控制与程序判转。 (5) 调试修改后,还应规范化,以利于交流,借鉴,为模块化,标准化打下基础。 (6) 做好抗干扰设计,这是计算机应用系统提高可靠性的有力措施。 (7) 设置自诊断程序,系统工作前先运行自诊断程序,检查系统各特征状态参数是 否正常,以提高运行的可靠性。 开发步骤: (1) 确定任务:a) 确定系统的功能,指标,成本 b) 完成期限 (2) 总体设计:a) 调研 b) 机型选择 c) 软硬件任务划分 I. 硬件开发 一(绘出线路图 二(选购元器件 三(组装 四(调试硬件 II. 软件开发 一(建立数学模型,确定算法,安排数据结构 二(设计,编制各子程序模块 三(各子程序进行调试 四(各子程序连接起来调试 (3) 样机联调: a) 软,硬件结合起来调试 b) 找出错误,修改软,硬件 c) 实时仿真,直至满足设计要求 形成工艺 (4) 产品定型: a) b) 编写技术文件 第 18 页 共 76 页 湖南工业职业技术学院 3.3 中断控制 和的中断请求信号由外部产生并输入,称外部中断,其余的中断请求信INT0INT1 号均由主机内部产生,故称为内部中断。 本次里程表的设计只用到外部中断:外部中断0请求中断输入端口(P3.2引INT0 脚),低电平或负跳变(从高到低)有效。 中断屏蔽: AT89C52的中断均属可屏蔽中断,即通过软件对特殊功能寄存器IE的设置,实现对各中断源的中断请求开放(允许)或屏蔽(禁止)的控制。 中断响应的过程: AT89C52的指令系统中设有两条返回指令:RET和RETI。调用子程序中应选用RET返回指令,中断服务程序中应选用RETI返回指令,如采用的是RET返回指令,虽然也能使中断服务程序返回原断点处继续往下执行原程序,但它不会告知中断控制系统,现行中断服务程序已执行完毕,致使中断控制系统误认为仍在执行中断服务程序而屏蔽新的中断请求。因此,中断服务程序的返回必须用RETI指令,而不能用RET返回指令代[10]替。 中断响应时间: 从中断源发生中断请求到主机响应中断,转去执行中断服务程序需要3-8个机器周期。外部中断0矢量地址:0003H。 3.4 I/O口的控制方式 在单片机中,为了实现数据的输入输出传送,通常使用三种控制方式。即:无条件 [9]传送方式,查询方式和中断方式。 无条件传送方式适用于以下器件或设备的输入输出: 例如,机械或电子开关,指示灯,发光二极管,数码管等。它们随时处于“准备好” 状态方便数据的传输。 查询方式: 第 19 页 共 76 页 湖南工业职业技术学院 为了实现查询方式的数据输入输出传送,需要由接口电路提供部,器件或设备的状态,并以软件方法进行状态测试。因此,这是一种软,硬件方法结合的数据传送方式。程序查询流程如图4.4-1所示。 读入状态信 息 N 准备好了 吗, Y 数据传送 图4.4-1 中断方式: 中断方式与查询方式的主要区别在于如何知道,器件或外设是否为数据传输作好了准备。查询方式是主机主动查询。而中断方式则为部,器件或外设主动请求。 采用中断方式进行数据传输时,当部,器件或外设为数据传输已作好准备之后,就向主机发出中断请求(相当于通知主机),主机在接收到中断请求之后,在允许中断的情况下,响应中断请求,暂停正在执行的原程序,转而去为部,器件或外设的数据提供传输服务。待服务完成之后,程序返回,主机再从断点处继续执行原程序。 3.5 里程表的软件设计 3.5.1 总体设计思路 将各英寸的电动自行车轮胎车轴内置一个小车轮,设小车轮周长约为150毫米(直径为47.7毫米),以10毫米为单位分15等份,即15个脉冲,小车轮的转动,方便大 第 20 页 共 76 页 湖南工业职业技术学院 车轮的周长计算,更便于行驶公里数的计算,就不需要将圈数转换成公里数,避开了除法算法,降低了软件程序的复杂度。 假设小车轮周长约为150毫米(直径为47.7毫米),不是毫无根据的。 由22英寸到28英寸电动自行车的规格见下表4.5.1-1所示。大车轮与小车轮的模拟图如图4.5.1-2所示。 表4.5.1-1 规格(英寸) 直径(毫米) 周长(毫米) 22 558.8 1752 24 609.6 1912 26 660.4 2072 28 771.2 2233 大车轮 小车轮 , , , 图4.5.1-2 最小的电动自行车尺寸的车轮周长为1752毫米,小车轮的周长要略小于大车轮的 周长,假设为1500毫米,在将其值缩小10倍,因此得到小车轮的周长值。 主程序流程图如图4.5.1-3所示。 第 21 页 共 76 页 湖南工业职业技术学院 初始化 读AT24C01 判内部数 据处理 P1和P3规定作为电平拉高输入口 开总中断和外部中断,设堆栈指针SP 开P0和P2口 按下P3.6接的开关 按下P1.1接的开关 END 图4.5.1-3 判内部数据处理:AT24C01出厂时原有数据BM单元是否为0FFH,等于0FFH时,BM 单元清0,写到AT24C01中,不等于时再次判断AT24C01出厂时原有数据KM单元是否为0FFH,等于0FFH时,KM单元清0, 写到AT24C01中,以此类推,判断到BKM单元为止。当AT24C01出厂时原有数据BKM单元不为0FFH,调用显示处理子程序。 按下P3.6接的开关:调用计数处理子程序,计数时P1.0口接的指示灯会闪烁点亮。 第 22 页 共 76 页 湖南工业职业技术学院 BMM, M,SM,BM,KM,SKM,BKM单元加处理时,判断是否到10进1,BMM,M,SM单元每加一次都不需要存人AT24C01和显示,BM加处理后储存AT24C01,并显示。 按下P1.1接的开关:调用清除数据子程序。 3.5.2 里程的设计 里程数据存放单元见如下表4.5.2-1所示。 表4.5.2-1 BKM SKM KM BM SM M BMM SMM MM ,,50H 55H 54H 53H 52H 51H 56H 因为电动自行车里程表的硬件设计里程的显示部分是采用四个共阴极的数码管,所以只能显示BM(0.1公里),KM(公里),SKM(十公里),BKM(百公里)。但设计时从BMM(分米)开始置存放单元并显示,每按一下P3.6开关,存放单元数据进行累加一,而BMM(分米),M(米),SM(十米)置存储单元,虽然没显示但骑电动自行车时BMM(分米),M(米),SM(十米)累加的。因此BMM(分米),M(米),SM(十米)加处理后不存储AT24C01,而BM(0.1公里),KM(公里),SKM(十公里),BKM(百公里)加处理后存储AT24C01后再在数码管上显示。 3.5.3 存贮历史里程数据的设计 22存贮历史里程数据要用到IC总线,IC (Inter,Integrated Circuit)总线是一 2种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。IC总线 产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。 2IC总线协议定义如下: , 只有在总线非忙时才被允许进行数据传送。 , 在数据传送时,当时钟线为高电平时,数据线必须为固定状态,不允许有跳变;当时钟线为高电平时,数据线的任何电平变化将被当作总线的启动或停止条件。 2IC总线的数据传输和器件寻址: 第 23 页 共 76 页 湖南工业职业技术学院 1(总线数据传送的起始和停止标志 2C总线每一次数据传送,都由主器件发送起始信号开始,发送停止信号 I 结束,当SCL时钟线为高电平,SDA数据线出现高电平向低电平的下降沿信号 时即为总线的起始信号;相反,当SDA数据线出现由低电平向高电平的上升沿 信号时即为总线的停止信号。 22. IC总线上的数据传输格式 主CPU发生起始信号表明一次数据传送的开始,其后为寻址字节,寻址字 节由高7位地址和1位方向位组成,方向位表明CPU与从器件之间的数据传送 方向,当该位为“0” 时表明CPU对从器件进行写操作,为“1”时是读操作。 寻址字节后是按指定地址读,写操作的数据字节与应答位。主CPU发出寻址信 号后,地址与自己相符的从器件便会产生一个应答信号。数据字节的后面也跟 [15]随一个应答信号,应答信号在第9个时钟位上出现。 23(本设计常用IC总线芯片的器件和引脚地址。见表4.5.3-1所示。 表4.5.3-1 型号 种类 器件地址 引脚地址 AT24C01 EEPROM 1010 A2A1A0 ,AT24C01是美国ATMEL公司生产的串行EEPROM芯片,容量分别为1288位,主要 特性如下: , 具有页写功能,AT24C01为4B; ,, 可擦写次数100000次; , 数据保存周期为100年; , 8引脚DIP或SOIC封装。 AT24C01的引脚排列,接口电路图如如图2.3.2-1所示,说明如下: , A0,A1,A2为器件地址选择线; , SDA为串行数据线; , SCL为串行时钟线; , WP(EN)为写保护端(当该端口为高电平时,不可对存储器写操作); 第 24 页 共 76 页 湖南工业职业技术学院 , Vcc为正电压1.8-5.5V; , Vss为地。 2IC总线基本操作: 2IC规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件(本文为AT24C01)都可以工作于接收和发送状态。 总线必须由主器件(通常为微控制器CPU)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在 SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。 22AT24C系列串行PROM具有IC总线接口功能,功耗小,宽电源电压(根据不同型号E 2.5V,6.0V),工作电流约为3mA,静态电流随电源电压不同为30μA,110μA。 2[5]AT24C系列EPROM接口及地址选择: 22由于IC总线可挂接多个串行接口器件,在IC总线中每个器件应有唯一的器件地 22址,按IC总线规则,器件地址为7位数据(即一个IC总线系统中理 论上可挂接128个不同地址的器件),它和1位数据方向位构成一个器件寻址字节,最低位D0为方向位 2(读/写)。器件寻址字节中的最高4位(D7,D4) 为器件型号地址,不同的IC总线接口 2E器件的型号地址是厂家给定的,如AT24C系列PROM的型号地址皆为1010,器件地址中的低3位为引脚地址 A2A1A0,对应器件寻址字节中的D3、D2、D1位,在硬件设计时由连接的引脚电平给定。 2EAT24C系列PROM读写操作软件实现方法: 2E对AT24C系列PROM的读写操作完全遵守I2C总线的主收从发和主发从收的规 则。 AT24C01的写操作: 写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。关于页面写的地址、应答和数据传送的时序连续写操作是对E2PROM连续装载n个字节数据的写入操作,n随型号不同而不同,一次可装载字节数也不同。AT24C01/02 8字节/每页。 第 25 页 共 76 页 湖南工业职业技术学院 AT24C01的读操作: 读操作有三种基本操作:当前地址读、随机读和顺序读。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心”。为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。 连续读操作时为了指定首地址,需要两个伪字节写来给定器件地址和片内地址,重复一次启动信号和器件地址(读),就可读出该地址的数据。由于伪字节写中并未执行写操作,地址没有加1。以后每读取一个字节,地址自动加1。 在读操作中接收器接收到最后一个数据字节后不返回肯定应答(保持SDA高电平)随后发停止信号。 2C总线共有9个归一化子程序组成,分别是: I 1. 启动信号子程序 2. 终止信号子程序 3. 发送应答位(A)子程序 A4. 发送应答非位()子程序 5. 检查应答位子程序 6. 发送单字节子程序 7. 接收单字节子程序 8. 发送N字节子程序 9. 接收N字节子程序 标记符号的定义: 21. VSDA: IC总线数据线; 22. VSCL:IC总线时钟线; 3. SLA:发送/接收寻址字节内RAM存储单元; 4. NUMB:发送/接收数据字节数N内RAM存储单元; 5. MTD:发送数据内RAM存储区首地址; 6. MRD:接收数据内RAM存储区首地址; 22由于EPROM的半导体工艺特性,对EPROM的写入时间需要5-10ms,但AT24C01 2串行EPROM芯片内部设置了一个具有SRAM性质的输入缓冲器,称为页写缓冲器。CPU 第 26 页 共 76 页 湖南工业职业技术学院 对该芯片写操作时,AT24C01芯片先将CPU输入的数据暂存页写缓冲器内,然后慢慢写 22PROM中。因此,CPU对AT24C01的EPROM一次写入的数据,受到该芯片页写缓冲入E 器容量的限制。页写缓冲器的容量:AT24C01为8B.若CPU需写入超过芯片页写缓冲器 容量或超过页写缓冲器页内最大地址的数据,应在一页写完后,隔5-10ms重新启动一 次写操作。 保存数据子程序: WTDA:MOV A,#01H MOV R0,BM LCALL WT24 ACALL DEL MOV A,#02H MOV R0,KM LCALL WT24 ACALL DEL MOV A,#03H MOV R0,SKM LCALL WT24 ACALL DEL MOV A,#04H MOV R0,BKM LCALL WT24 RET 第 27 页 共 76 页 湖南工业职业技术学院 存贮历史里程数据的流程图如图4.5.3-2所示: 将AT24C01分别读入到 BM,KM,SKM,BKM单元中 启动信号STAR 发送寻址字节应 答 发送数据 N 应答否? Y 终 止 图4.5.3-2 位的传输: SDA 线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有 在SCL 线的时钟信号是低电平时才能改变。 WRBYT: ;写单字节 MOV R1,#08H WLP: RLC A JC WR1 AJMP WR0 ;跳入写0 WLP1: DJNZ R1,WLP RET 第 28 页 共 76 页 湖南工业职业技术学院 WR1: ;写1 SETB SDA SETB SCL NOP NOP NOP NOP CLR SCL CLR SDA AJMP WLP1 WR0: ;写0 CLR SDA SETB SCL NOP NOP NOP NOP CLR SCL AJMP WLP1 RDBYT: ;读单字节 MOV R1,#08H RLP: SETB SDA SETB SCL MOV A,P1 JNB ACC.7,RD0 ;转读0 AJMP RD1 ;转读1 RLP1: DJNZ R1,RLP ;8位全接收完毕,转退出 RET 第 29 页 共 76 页 湖南工业职业技术学院 RD0: CLR C MOV A,R2 RLC A MOV R2,A CLR SCL AJMP RLP1 RD1: SETB C MOV A,R2 RLC A MOV R2,A CLR SCL AJMP RLP1 END 开始信号: SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 开始信号程序: STAR: CLR SDA LCALL DEL SETB SDA LCALL DEL SETB SCL CLR SDA LCALL DEL CLR SCL RET 结束信号: SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 结束信号程序: 第 30 页 共 76 页 湖南工业职业技术学院 STOP: CLR SDA LCALL DEL SETB SCL LCALL DEL SETB SDA RET 应答信号: 22C在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,接收数据的I 表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由 判断为受控单元出现故障。 应答信号程序: MACK: ;发应答位 CLR SDA SETB SCL NOP NOP NOP NOP CLR SCL ETB SDA RET MNACK: ;发非应答位 SETB SDA SETB SCL NOP NOP NOP NOP 第 31 页 共 76 页 湖南工业职业技术学院 CLR SCL CLR SDA RET 3.5.4 里程的显示设计 用两片74LS07分别驱动LED数码管(共阴型动态显示)和数码管的小数点。 用一个开关,用于开电动自行车时里程的计数,并点亮一个指示灯。 这个开关在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施。这一点可从硬件、软件两方面予以考虑。在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。本设计采用软件用延时消抖动。 编制按键程序: 一个完善的按键控制程序应具备以下功能: (1) 检测有无按键按下,并采取硬件或软件措施,消除按键机械触点抖动的 影响。 (2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作 对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键 功能程序。 (3) 准确输出按键值(或键号),以满足跳转指令要求。 按键触点的抖动如图4.5.4-1所示: 键按下 后沿抖动前沿抖动 闭合稳定 图4.5.4-1 具体工作如下:当键盘无键按下时,与门各输入端均为高电平,保持输出端为高电 第 32 页 共 76 页 湖南工业职业技术学院 平;当有键按下时,端为低电平,向CPU申请中断,若CPU开放外部中断,则会响应中断请求,转去执行键盘扫描子程序。 显示处理子程序: XSCL: MOV A,BM MOV DPTR,#TAB MOVC A,@A+DPTR MOV BMD,A MOV A,KM MOV DPTR,#TAB MOVC A,@A+DPTR MOV KMD,A MOV A,SKM MOV DPTR,#TAB MOVC A,@A+DPTR MOV SKMD,A MOV A,BKM MOV DPTR,#TAB MOVC A,@A+DPTR MOV BKMD,A RET 本设计采用共阴极LED显示器,LED显示器采用发光二极管显示字段。单片机系统中经常采用的是7段显示器,即LED显示器中有8个发光二极管,代表“a.b.c.d.e.f.g.”7个字段和一个全小数点“dp”。共阴极LED显示器的发光二极管负极接地,当发光二极管的正极为高电平时,发光二极管被点亮。使用LED显示器时,工作电流一般为5-10mA/段,当LED处于全亮状态时,工作电流约为40-80mA左右,通常将控制LED显示字符的8位数据称之为段选码。如表4.5.4-2为共阴和共阳LED数码管几种八段编码表。 第 33 页 共 76 页 湖南工业职业技术学院 表4.5.4-2 共阴和共阳LED数码管几种八段编码表 共阳顺共阳逆显示 共阴顺序小数点暗 共阴逆序小数点暗 序小数序小数数字 点亮 点亮 Dp g f e d c b 16进a b c d e f g Dp 16进 a 制 制 0 0 0 1 1 1 1 1 1 3FH 1 1 1 1 1 1 0 0 FCH 40H C0H 1 0 0 0 0 0 1 1 0 06H 0 1 1 0 0 0 0 0 60H 79H F9H 2 0 1 0 1 1 0 1 1 5BH 1 1 0 1 1 0 1 0 DAH 24H A4H 3 0 1 0 0 1 1 1 1 4FH 1 1 1 1 0 0 1 0 F2H 30H B0H 4 0 1 1 0 0 1 1 0 66H 0 1 1 0 0 1 1 0 66H 19H 99H 5 0 1 1 0 1 1 0 1 6DH 1 0 1 1 0 1 1 0 B6H 12H 92H 6 0 1 1 1 1 1 0 1 7DH 1 0 1 1 1 1 1 0 BEH 02H 82H 7 0 0 0 0 0 1 1 1 07H 1 1 1 0 0 0 0 0 E0H 78H F8H 8 0 1 1 1 1 1 1 1 7FH 1 1 1 1 1 1 1 0 FEH 00H 80H 9 0 1 1 0 1 1 1 1 6FH 1 1 1 1 0 1 1 0 F6H 10H 90H 动态显示相关概念: 所谓动态显示,实质上就是各个不同的LED显示器按照一定的顺序轮流显示。它利用了人眼的“视觉暂留现象”,只要多个LED显示器的选通扫描速率足够快,人眼就观察不到数码管的闪烁现象。动态扫描方式的所有LED段选线并联在一起,只由一个,位的I/O口控制,而各个LED的位选线则由另一组I/O口控制。动态LED显示方式的优点是功耗较低,占用CPU的I/O口线少,外围接口简单,但程序编制较之静态显示方式则 [14]略显复杂。 在单片机与LED显示器的接口电路中,要使LED数码管正常发光,显示器驱动芯片 也很关键。本次设计采用7407来驱动LED显示器。 LED显示需注意的几个问题: (1) 采用动态显示方式编写软件时,应选择合适的延时周期。如时间选择不合适, LED将会不停闪烁,这时可适当调整延时常数即可解决问题。 (2) 采用动态扫描方式的LED显示电路占用较少的硬件资源,但有时却过多地占 用了CPU的资源,如应用系统不允许,可在设计电路中采用静态显示方式, 以减少软件的编写难度。 第 34 页 共 76 页 湖南工业职业技术学院 显示程序流程图如图4.5.4-3所示: Y 按键闭 合否, N 延时消抖动 关 P2.0 点亮指示灯 BMD单元内容显 示 延 时 放入P0 开 P2.0 开P2.3 延 时 BKMD单元内容 放入P0 关P2.3 关 P2.1 KMD单元内容 放入P0 开P2.2 延 时 SKMD单元内容 开 P2.1 放入P0 图4.5.4-3 第 35 页 共 76 页 湖南工业职业技术学院 3.5.5 里程公里数的累计功能设计 小车轮周长设定为150毫米,分15等份,即15个脉冲,每个脉冲10毫米为单位, 对电动自行车的周长进行测量,到100毫米(到10个脉冲),则BMM单元加1,当100 个脉冲到来时,M单元加1,以此类推,即可点亮数码管(BM,KM,SKM,BKM单元的内容)。 加一数据处理子程序: JCL:CLR P1.0 MOV A,BMM INC A CJNE A,#0AH,BMMJ AJMP MJ1 BMMJ:MOV BMM,A AJMP GOON MJ1:MOV BMM,#00H MOV A,M INC A CJNE A,#0AH,MJ AJMP SMJ MJ:MOV M,A AJMP GOON SMJ:MOV M,#00H MOV A,SM INC A CJNE A,#0AH,SMJ1 AJMP BMJ SMJ1:MOV SM,A AJMP GOON BMJ:MOV SM,#00H MOV A,BM INC A CJNE A,#0AH,BMJ1 第 36 页 共 76 页 湖南工业职业技术学院 AJMP KMJ BMJ1:MOV BM,A 中断0的流程图如图4.5.5-1所示: 中断 加一数据处理子程序 N 脉冲是否 到来? Y 调用显示处理子程序 写AT24C01 图4.5.5-1 中断示意图如图4.5.5-2所示: 现行程序 中断断点 中断服务程序 继续执行 图4.5.5-2 第 37 页 共 76 页 湖南工业职业技术学院 里程累计功能各分支流程图:流程图4.5.5-3;流程图4.5.5-4;流程图4.5.5-5; 流程图4.5.5-6所示。 将BMM单元内容 放入A A(BMM)加1 BMM单元内容 是否到10 Y N BMM单元内容清0 A单元内容放入 BMM单元 M单元内容放入A 显示数据 A(M)加1 灭指示灯 判M单元内容 图4.5.5-3 第 38 页 共 76 页 湖南工业职业技术学院 N M单元内容 是否到10 Y A单元放入M M单元清0 显示数据 SM 单元内容放入A A(SM)加1 N SM 单元内 容是否到10 Y A单元放入SM SM单元清0 显示数据 BM单元内容放入A A(BM)加1 判BM单元内容 图4.5.5-4 第 39 页 共 76 页 湖南工业职业技术学院 N BM单元内容 是否到10 Y A单元放入BM BM单元清0 显示数据 KM单元放入A A(KM)加1 N KM单元内容 是否到10 Y A单元放入KM KM单元清0 显示数据 SKM单元内容放入A A(SKM)加1 判SKM单元内容 图4.5.5-5 第 40 页 共 76 页 湖南工业职业技术学院 N SKM单元内容 是否到10 Y A单元放入SKM SKM单元清0 显示数据 BKM单元放入A A(BKM)加1 N BKM单元内容 是否到10 Y A单元放入BKM BMM,M,SM,BM,KM,SKM,BKM,BM D,KMD,SKMD,BKMD清0 储存24C01 显示数据 图4.5.5-6 第 41 页 共 76 页 湖南工业职业技术学院 第 4 章 软件调试 4.1 程序的检测与调试 1(程序的查错手段 单片机的应用系统均需借助对应的开发系统(或装置)进行在线仿真,对应用系统的软,硬件进行全面地检测与调试。各种开发系统或装置均提供以下查错手段。 (1)单步执行 采用单步执行操作可对应用程序每步执行一条指令,可逐条检查这一段程序的执行过程是否符合原设计要求。可直接查出错误所在。宏单步可执行一段程序,如一步就可执行完整个循环程序段。 (2)断点设置全速运行 可在程序有疑虑的地方设置断点,从设置的起始地址开始,以全速或非全速方式向设定的断点处运行。如果这段程序无语法或逻辑上的错误,则连续运行到设置的断点处停止运行,返回监控状态。如果有错误,则在错误处停止运行,如果进入死循环或者程序跑飞,就会永不停止运行。全速断点运行为检查实时性及中断响应处理等提供了方便。 (3)显示器窗口检查 (4)实时跟踪记录 除上述之外,还有以下功能: , 符号化调试。 在原程序中一般均以符号地址,标号等出现,通过汇编自动进行变换和调整,偏移量等均可自动换算和填入。 , 程序的运行。 [4], 自动生成目标代码和固化。 2(源程序的检测 在源程序进行调试之前,硬件系统必须基本正确,重点对源程序进行检测。 第 42 页 共 76 页 湖南工业职业技术学院 (1)对照程序流程图,先对相对独立的功能模块,子程序,中断服务程序等进 行仔细地检查,然后对整个主程序按其功能划分成若干程序段进行分段检 查,逐步扩大到整个程序系统。 检查时重点检查程序的逻辑功能,结构和算法,有关参量和初始值是否完 善,正确,关键性指令的选择是否合理,特别是借助开发系统也较难调试 正确的隐患,只有通过细心的检查加以排除。 (2)硬件系统检查。 硬件系统必须排除电源短路和碰线故障,然后空板(没有插上芯片等器件) 进行上电检查各电源点是否正确,有关逻辑电平及信号是否正确。确认无 误之后逐次插上芯片等器件,借助开发系统可检查出是否有硬件故障。一 旦有故障时,开发系统的监控程序将出现不能正常工作的现象。故可采用 此法排除硬件系统的一般性故障。 有些故障只有通过软件调试才能排除,有时还需通过软件调试修改硬件设计。 3(源程序的调试 [6]。 源程序的调试一般可分为分调,联调和考机3步进行 (1)分调 首先将基本独立的子程序调试正确,符合原设计要求,用模拟的方法将 中断服务程序初调,然后将主程序按相对独立的功能程序段,遵照应用 系统运行的逻辑顺序逐段进行调试。 A) 设置并输入一组符合要求的参量,启动程序段运行,观察运行情况 或故障的影响及现象。 B) 对出现的问题进行仔细地分析,合理推测,借助开发系统的调试手 段,逐步缩小疑点范围,直至找出问题所在进行修改。 C) 分析故障原因。 (2)联调 在分调基本完成的基础上进行联调,它将与整个系统的硬件,软件,环 境密切相关,必须联合在线调试。 调试的重点在于主程序与各功能模块程序段之间的连接处,按照整个 软件系统的执行顺序,逐个相连进行调试。 第 43 页 共 76 页 湖南工业职业技术学院 (3)考机 4.2 单片机开发工具 开发工具应具以下主要作用: )系统硬件电路的诊断; (1 (2)程序的输入与修改; (3)除连续运行程序外,具单步运行,设断点运行和状态查询等功能; (4)能将程序固化到EPROM芯片上去。 开发工具应具备: (1)交叉汇编功能。 (2)EPROM编程器。 (3)仿真功能。 A) CPU仿真。 B) EPROM仿真。 通用机开发系统如图5.2-1所示: EPROM写入插座 用仿, 通用计算机 户真系统 系头 开统 发 模 板 图5.2-1 仿真系统硬件: a) 仿真系统硬件是一种大规模在线可编程芯片,将整个单片机仿真控 制电路集成在芯片中;仿真CPU则外置在仿真头上,通过更换不同 第 44 页 共 76 页 湖南工业职业技术学院 的仿真头,可对各种单片机进行仿真。 b) 8位/16位兼容,可仿真8位及16位单片机。 c) 采用硬件断点技术,不占用单片机任何资源。 d) 采用串行口与计算机通信,波特率自动设置,最高可达38400。 e) 可配接逻辑分析仪,能实现复杂的组合断点和观察逻辑波形及分析 时序关系。 仿真系统硬件安装示意图5.2-2所示: 用户板 仿真头 34芯仿真电缆 仿真系统 9芯串行 串行口及电源电缆 口电缆 接至计 算机串单5V电源 行口 红正 黑负 图5.2-2 4.3 LCA51仿真过程 1(打开LCA51界面,在文件中新建,输入程序后保存。 2(打开编译对话框,如图5.3-1所示;编译当前文件,加载对话框如图5.3-2。 第 45 页 共 76 页 湖南工业职业技术学院 图5.3-1 图5.3-2 若要把编写的程序烧到AT89C52芯片中,过程如下: 打开设置选择仿真机,打开仿真机的对话框后,打开通讯口对话框,设置如下。 设置对话框如图5.3-3,图5.3-4所示。 第 46 页 共 76 页 湖南工业职业技术学院 图5.3-3 图5.3-4 在工具栏中选择芯片固化,如图5.3-5所示。 第 47 页 共 76 页 湖南工业职业技术学院 图5.3-5 之后进行一系列的操作。 4.4 硬件、软件仿真调试 本系统的软件系统全部采用C51来编写,由于一般的仿真器对C51的支持有一定的缺陷,软件调试比较复杂。除了语法差错外,当确认程序没问题时,通过直接把程序烧到单片机来调试。即单独调试好每一个模块,然后再连接成一个完整的系统调试。 硬件连线的步骤: 1.连好电脑主机的9针串口联机线,连好电脑主机的USB线(短线)和仿真器的USB 线(长线)。 2.仿真器工作时需要的电源电流不大于150MA时,均不需外接电源,直接由电脑 的USB接口供电(将金属跳冒跳在USB端),能满足仿真要求。在特殊情况下(需 要的电源电流大于150MA,或你不想用USB接口供电),可自己购买一个5V的直 千万注意直流稳压电源插座是内正外负).用直流稳压电源供电,拔 流稳压电源( 掉连在电脑主机的USB线(短线),将金属跳冒跳在OUT端。 仿真器的本质: 仿真器就是通过仿真头用软件来代替了在目标板上的51芯片,关键是不用反复的 第 48 页 共 76 页 湖南工业职业技术学院 烧写,不满意随时可以改,可以单步运行,指定端点停止等等,调试方面极为方便。 仿真器的原理: 仿真器内部的P口等硬件资源和51系列单片机基本是完全兼容的。仿真主控程序被存储在仿真器芯片特殊的指定空间内,有一段特殊的地址段用来存储仿真主 [11]。 控程序,仿真主控程序就象一台电脑的操作系统一样控制仿真器的正确运转硬件、软件仿真调试: 经过硬件、软件单独调试后,即可进入硬件、软件联合仿真调试阶段,找出硬件、软件之间不相匹配的地方,反复修改和调试。 4.5 编制单片机应用程序的步骤和难点 如何编写单片机应用程序,这是一个实践性很强的题目,也是一项艰苦而细致的工作。如果按照一定的步骤并且找出难点,事先对这些难点加以处理,能够收到事半功倍的效果。下面是开发中必经的几个步骤和可能遇到的难点的处理。 编制步骤: 1(搞清功能和编写方案 接到一个单片机项目设计之后,并不是马上动手编写程序,而是仔细研究技术要求或者技术说明,根据这些技术要求和技术说明,把程序应该具备的主要功能写清楚,写仔细,这是最关键的工作,否则在设计完成以后会发现有些功能由于事先没有考虑清楚再重新设计将会很麻烦,可能有些需要重新增加的功能很容易补充,而有些可能由于没有事先考虑周全而无法实现。 2(编写总流程图和各功能模块流程图 根据要完成的程序功能写出总流程图,根据总流程图把整个程序划分成几个 主要的功能模块,每个功能模块都要写出基本流程图,这主要是为以后的程序编写起到一个指导作用。当然,在实际的程序编写过程中肯定会有一些改动,一个基本的流程会指导写程序的过程中不会出现太大的偏差。 3(准备编程所需的资料 这些资料主要是编程语言方面的书籍、杂志等。因为程序语言的有些资料不可能记得太清楚,如每条指令的含义,具体操作每条指令所牵涉的硬件电路等。 第 49 页 共 76 页 湖南工业职业技术学院 如果资料准备得比较充分,可以放在案边,若有需要,顺手查阅。 4(人机界面的编程 用单片机实现的项目人机界面相对简单。若为LED显示,应根据LED的位数选取简单、明了、用户一看便知的提示符;显示的数据位数应充分考虑技术的要求。 5(分析编程的难点和技术解决方案 为了能比较顺利地完成程序设计,应根据程序所完成的功能和程序流程对整个程序的框架分析一下,并根据自己掌握的技能定位整个程序的难点,然后找到最佳的算法。 6(写程序 在上面的准备工作完成后,就可以着手编写程序。因为有了明确的程序流程,有了充足的资料,可能遇到的难点基本上找到了解决方法。这样,事先准备得比较充分,即使在以后的程序编写过程中遇到困难,也较易解决。这样就可以节省很多时间,以便静下心来认真按照方案和流程编写程序。另外,一般写完一个功能程序就进行调试,通过后再编写另外一个功能代码,这样可以防止全部代码编写完毕后再调试可能带来的相互影响,从而可以搞清楚到底是哪部分程序有问题。 7(程序调试 程序的调试过程是一个比较复杂的过程,有些需要高度的技巧和一定的方法。一般的编程软件都提供单步、单步越过、断点、运行到光标处等基本方法,一般掌握这几种基本方法就可以解决绝大部分问题。经过长时间的调试实践之后自然就可以掌握一定的调试技巧,即熟能生巧。 4.6 故障分析 1. 编好的C51程序用仿真器运行一切正常,但写入片子独立运行时,运行结果 却是错的。 分析:仿真器一般跳了地址的,需要做简单的调整的,再者是检查硬件电路 了。如果仿真通过,那可能的原因就是芯片有问题,请重新检查,或者换一 块片子 。 第 50 页 共 76 页 湖南工业职业技术学院 2. 中断陷入了死循环。 分析:在高级中断中修改PC值。进入中断时将中断前PC的值压栈,修改栈 中值,然后中断返回时就可以从0000H开始执行了。也可以指向任何你需要 的位置。 进入中断后,栈顶的两个数据为PC中断前的值,如下操作即可。 POP ACC POP ACC MOV A,#RET_PCL PUSH ACC MOV A,#RET_PCH PUSH ACC RETI 其中RET_PCL, RET_PCH为要返回的地址。 这只是个思路,具体的话还要根据实际来编,中断返回前还可以做一些其他 工作。 3. 现在的程序用仿真器仿真通过,程序正常,然后把生成的文件烧写到芯片里 面去,系统没有任何反应(用仿真器可以控制指示灯亮,将程序写到芯片里 去之后就不亮了),将程序写到芯片之后还需要如何处理。 分析:可能是程序的起始地址没弄好,也可能是单片机是坏了,主要问题是 硬件有问题。 4. 程序不按规定的流程执行,程序跳转到不可知的地址去了。 分析:这种现象称为程序跑飞,通常是由硬件引起的。堆栈开的太小了。堆 栈和指针是两个主要的影响因素,指针乱指的危险性很大通常让人莫名其妙, 按步执行看看程序是如何跑飞的,找到源头不难解决。堆栈的溢出也是经常 发生的事情关键在于程序设计上对用到堆栈的地方是否加了保护, 实在不 行就执行到一定的阶段让堆栈指向一个固定的地方(没有使用它的时候), 可能堆栈溢出,可能进入死循环(如果没有看门狗),可能逻辑方面的问题等 等。 第 51 页 共 76 页 湖南工业职业技术学院 第5章 结束语 本次毕业设计是在指导老师汪小锋的指导下完成的。忙碌了两个多月,我的毕业设计课题也终将告一段落。编译程序时点击运行,也基本达到预期的效果,虚荣的成就感在没人的时候也总会冒上心头。但由于能力和时间的关系,总是觉得有很多不尽人意的地方,可是,我又会有点自恋式地安慰自己:做一件事情,不必过于在乎最终的结果,可贵的是过程中的收获。以此语言来安抚我尚没平复的心。毕业设计,也许是我大学生涯交上的最后一个作业了。想籍次机会感谢在校期间二年以来给我帮助的所有老师、同学,你们的友谊是我人生的财富,是我生命中不可或缺的一部分。我的毕业指导老师汪小锋老师,虽然我们是在开始毕设时才认识,但他却给我不厌其烦的指导,并提供了很多与该研究相关的重要信息,培养了我们对科学研究的严谨态度和创新精神。这将非常有利于我们今后的学习和工作。在此表示衷心的感谢~ 本次毕业设计还得到了课题组的各位老师的大力协助,在此一并表示我们的感谢~ 第 52 页 共 76 页 湖南工业职业技术学院 参考文献 [1]张友德,赵志英,涂时亮. 单片微型机原理、应用与实验[M].上海:复旦大学出版 社,2000. [2]勒达. 单片机应用系统开发实例导航[M].北京:人民邮电出版社,2003. [3]薛钧义,张彦斌. 单片微型计算机及其应用[D].西安:西安交通大学出版社,2001. [4]涂时亮.单片机软件设计技术[D].重庆:科学文献出版社重庆分社,1987. [5]王毅.单片机器件应用手册[M].北京:人民邮电出版社,1995. [6]何立民.单片机应用技术选编[M].北京:北京航空航天大学出版社,1996. [7]蔡美琴.MCS-51系列单片机系统及其应用[M].上海:高等教育出版社, 1992. [8]苏伟斌.8051系列单片机应用手册[M].北京:科学出版社, 1997. [9]马家辰.MCS-51单片机原理及接口技术[M].哈尔滨:哈尔滨工业大学出版社 ,1997. [10]藏海河.单片机原理及应用[M].重庆:重庆大学出版社,2004. [11]刘文秀.单片机仿真[J].中国学术期刊,2004,6(5):56-61. [12]杨雪梅.单片机软件的抗干扰设计[J].中国学术期刊,2006,3(8):18-25. [13]Joseph.A method of developing 80C552 microcontroller on MCS-51 device[J].East China Institute of Metallurgy,1998 ,14(27):101-125. [14]Intel.Interfacing an MCS-51 Microcontronller to an 82527 CAN Controller[J]. Iondon Macmillan PRESS LTD,1996,5(80):32-40. 2[15]Philips Semiconductors.The IC-Bus Specification Version(2.1)[J].USA, 2000,17(35):71-83. 第 53 页 共 76 页 湖南工业职业技术学院 附录1 中英文文献 The C Programming Language C is a high-level programming language developed by Dennis Ritchie and Brian Kernighan at Bell Labs in the mid-1970s. Although originally designed as a systems programming language, C has proved to be a powerful and flexible language that can be used for a variety of applications, from business programs to engineering. C is a particularly popular language for personal computer programmers because it is relatively small-it requires less memory than other languages. The first major program written in C was the UNIX operating system; and for many years, C was considered to be inextricably linked with UNIX. Now, however, C is am important language independent of UNIX. Although it is a high-level languages, C is much closer to assembly language than are most other high-level languages. This closeness to the underlying machine language allows C programmers to write very efficient code. The how-level nature of C, however, can make the language difficult to use for some types of applications. Now let’s take an overview of the C programming language, both historically and technically and technically. As a general-purpose programming language, C has been closely associated with UNIX system where it was developed, since both the system and most of the applications that run on it are written in C. The language , however, is not tied to any one operating system or machine; and although it has been called a “system programming language” because it is useful for writing compilers and operating systems, it has been used equally well to write major programs in various fields. Many of the important ideas stem from the language BCPL, developed by 第 54 页 共 76 页 湖南工业职业技术学院 Martin Richards. The influence of BCPL on C proceeded indirectly through the language B, which was written by Ken Tompson in 1970 for the first UNIX system on the DEC-PDP-7. BCPL and B are “typeless” languages. By contrast, C provides a variety of data types. The fundamental types are characters, and integers and floating point numbers of several sizes. Additionally, there is a hierarchy of derived data types created with pointers, arrays, structures, and unions. Expressions are formed from operands; any expression, including an assignment or a function call, can be a statement. Pointers provide for machine-independent address arithmetic. C provides the fundamental control-flow constructions required for well-structured programs: statement grouping, decision making (if-else) , selecting one of a set of possible cases (switch), looping with the termination test at the top (while, for) or at the bottom (do), and early loop exit (break). Functions may return values of basic type, structures, unions, or pointers. Any function may be called recursively. Local variables are typically “automatic”, or created anew with each invocation. Function definitions may not be nested but variables may be declared in a block-structured fashion. The functions of a C program may exist in separate source files that are compiled individually. Variables may be internal to a function, external but known only within a single source files, or visible to the entire program. A preprocessing step performs macro substitution on program text, inclusion of other source file, and conditional compilation. C is a relatively low-level language, meaning that C deals with the same sort of objects that most computers do, namely characters, numbers, and addresses. These may be combined and moved about with the arithmetic and logical operators implemented by real machines. C provides no operations to deal directly with composeite objects such as character strings, sets, lists, or arrays. There are no operations that manipulate an entire any storage allocation facility other than static 第 55 页 共 76 页 湖南工业职业技术学院 definition and the stack discipline provided by the local variables of functions; there are no heap or garbage collection . Finally, C itself provides no input/output facilities; there are no Read or Write statements, and no built-in file access methods. All of these higher-level mechanisms must be provided by explicitly-called functions. Most C implementations have included a reasonably standard collection of such functions. Similarly, C offers only straightforward, single-thread control flow: tests, loops, grouping, and subprograms, but not multiprogramming, parallel operations, synchronization, or co-routines. Although the absence of some of these features may seem like a grave deficiency, keeping the language down to modest size has real benefits. Since C is relatively small, it can be described in a small space, and learned quickly. A programmer can reasonably expect to know and understand and indeed regularly use the entire language. In 1983, the American National Standard Institute (ANSI) established a committee to provide a modern, comprehensive definition of C. The resulting definition, the ANSI standard, or “ANSI C”, was completed late in 1988. Most of the features of the standard are already supported by modern compilers . The standard is based on the original C reference manual. The language is relatively little changed; one of the goals of the standard was to make sure that most existing programs would remain valid, or, failing that, that compilers could produce warning of new behavior. For most programmers, the most important change is a new syntax for declaring and defining functions. A function declaration can now include a description of the arguments of the function; the definition syntax changes to match. This extra information makes it much easier for compiler to detect errors caused by mismatched arguments. This has proved to be a very useful addition to the language. A second significant contribution of the standard is the definition of a library to accompany C. It specifies functions for accessing the operating system 第 56 页 共 76 页 湖南工业职业技术学院 (for example, to read and write file), formatted input and output, memory allocation, string manipulation, and the like. A collection of standard headers provides uniform access to declarations of functions and data types. Programs that use this library is closely modeled on the “standard I/O library” of the UNIX system. Although C matches the capability of many computers, it is independent of any particular machine architecture. With a little care it is easy to write portable programs, that is, programs that can be run without change on a variety of hardware. C, however, like any other language, has its blemishes. Some of the operators have the wrong precedence; some parts of the syntax could be better. Nonetheless, C has proved to be an extremely effective and expressive language for a wide variety of programming applications. Having reviewed the history and features of C, let’s now study an example C program for a basic understanding of what a C program looks like. The following program finds the factorial of the number 6. /* Program to find factorial of 6 */ # include < stdio.h > # define3 VALUE 6 int i, j ; main () { j=1; for (i=1; i<=VALUE; i++) j=j*I; printf (“The factorial of %d is %d\n”, VALUE, j ); } As shown in the example, C code starts with # include < stdio.h >, which instructs the compiler to include the standard I/O library into your program so that you can read and write values, handle text files, and so on. C has a large number of standard libraries like stdio, including string, time and math 第 57 页 共 76 页 湖南工业职业技术学院 libraries. The #define line creates a constant. Two global variables are declared using the int i, j; line, which announces the properties (in this case, integer) of the two variables. Other common variable types are float(for real number) and char (for characters), both of which you can declare in the same way as int. The line main() declares the main function. Every C program must have a function named main somewhere in the code, which marks the beginning of your program. In C, the statements of a function are enclosed in braces{}. In the example the main()function contains only three statement, which are an assignment statement, a for statement, and a printf statement. The printf statement in C is easier to use. The portion in double quotes is called the format string and describes how the data is to be formatted when printed. The format string contains string literals (or string constant) such as The factorial of, \n (also called escape sequence. /n stands for carriage returns), and operators in the form of %d, which are used as placeholders for variables. The two operators(also called conversion specifications) in the format string indicate that integer values found later in the parameter list are to be placed into the string at these points. Other operators include %f for floating point values, %c for characters, and %s for strings. In the printf statement, it is extremely important that the number of operators in the format string corresponds exactly with the number and type of the variables following it. For example, if the format string contains three operators and it must be followed by exactly three parameters, and they must have the same types in the same order as those specified by the operators. This program is good, but it would be better if it reads in the value instead of using a constant. Edit the file, remove the VALUE constant, and declare a variable value instead as a global integer(changing all references to lower-case because value is now a variable). Then place the following two lines at the beginning of the program: Printf (“Enter the value: ”); 第 58 页 共 76 页 湖南工业职业技术学院 Scanf(“%d”, &value); Make the changes, then compile and run the program to make sure it works. Note that scanf uses the same sort of format string as printf. The & sign in front of value is the address operator in C, which returns the address of the variable. You must use the &operator in scanf on any variable of type char, int, or float, as well as record types. If you leave out the & operator, you will encounter an error when you run the program. 译文 C语言 C语言是一种高级程序设计语言,是20世纪70年代由Dennis Ritchie和Brian Kernighan在贝尔实验室开发的。虽然C语言最初是作为一种系统语言设计的,但后来 的实践证明C语言功能强大,也十分灵活,可以用于各种应用程序,如商业软件、工程 项目等,C语言在个人计算机编程领域非常流行,因为C语言规模较小—比其他语言需 求的内存少。 用C语言编写的第一个重要程序是UNIX操作系统;以后多年之中,大家普遍认为C 语言是与UNIX操作系统密不可分的。不过,现在C语言已经是一种与UNIX无关的重要 语言,虽然C语言是一种高级语言,但是它比其他高级语言更接近于汇编语言。正是因 为与低层的机器语言十分接近,C程序员才可以编写高效率的代码。不过,C语言的这 种低级性在某些应用场合也显得难以驾驭。 以下我们将从历史和技术的角度对C语言作一概括。 作为一种通用的程序设计语言,C语言是在UNIX环境下开发出来的。UNIX系统本 身及其应用程序也都是用C语言编写的,所以C语言一直与UNIX有着密切的关系。不 过,C语言并不局限于某种操作系统或机型;C语言一直被称作一种“系统开发语言”, 因为它在编写编译程序和操作系统方面特别有用,但是,在其他领域的大型程序开发方 面也表现得同样出色。 C语言的许多重要思想来自于Martin Richards研制的BCPL语言。BCPL语言对于C 第 59 页 共 76 页 湖南工业职业技术学院 语言的影响是通过B语言间接地进行的。B语言是Ken Tompson于1970年为DEC,PDP,7计算机上的UNIX系统而开发的。 BCPL语言和B语言都是“无类型的”语言。相比之下,C语言提供了各种数据类型。其中基本的数据类型包括:字符型、整数型、各种精度的浮点型、数组型、结构型,及其联合体。表达式是由操作数组成的;任何的表达式,包括赋值及函数调用都可以作为一条语句。指针则可以提供与机器无关的地址运算。 C语言提供了各种基本的流程控制结构,用于结构化程序设计。如:语句分组、判定结构(if-else)、情况结构(switch)、终止于顶部的循环结构(while,for)、终止于底部循环结构(do),及其循环中断命令(break)。 函数的返回值可以是基本类型、结构、共同体或指针。任何的函数均可以递归调用。通常局部变量都是“自动型的”,或者说,是在每次调用时重新建立的。函数定义不能嵌套,但是变量可以在块结构中说明。C程序的函数单独存放于源文件中,分别编译。变量可定义为函数的内部变量,某一源文件中可以使用的外部变量,也可以定义为整个程序均可见的全程变量。 预处理功能可以对程序文本进行宏替换,并可以蕴含其他源文件,或进行条件编译。 C语言是一种相对低级的语言,也就是说它可以处理大多数机器本身所能处理的数据类型,如:字符、数值、地址等。这些数据既可以同机器所支持的算术和逻辑运算符组合,也可以由它们进行传送。 对于字符串、集合、表、数组等组合数据类,C语言没有提供直接的操作。虽然一个结构可以整体复制,但是C语言中无法对整个数组或字符串进行整体操作。除了函数内的局部变量可以进行静态定义和堆堆栈无用内存收集机制。最后一点,C语言本身也 没有提供输入/输出功能,没有读/写语句及内在的文件存取方法。所有这些高层的机制都是由通过函数显式调用的。大多数的C语言版本都带有基本标准的函数库,其中包含了以上这些函数。 基于同样的道理,C语言仅仅提供了直接的、单线程的流程控制,如测试、循环、 分支及子程序等;没有多道程序控制、并行操作、同步,协同例程管理。 没有上述功能看起来像是一种缺陷,不过,把语言控制在较小的规模确有许多优点。鉴于C语言相对较小,可以用比较少的篇幅予以描述,并可以短时间内掌握。如果说程序员可以了解、掌握并确定经常使用全部的语言,并不奇怪。 1983年,美国国家标准协会(ANSI)成立了一个专门的委员会,对C语言进行全面 第 60 页 共 76 页 湖南工业职业技术学院 的、现代化的定义。其结果便是ANSIC,是1988下后期完成的,这一标准的大多数功能在较新的编译系统中业已付诸实施。 这一标准是基于早期的C语言参考手册建立的,相对而言,语言本身没有多大变化;其目的之一就是为了保证现存的大多数程序可以有效运行,或者,在不兼容的情况下,由编译程序提出警告,说明(程序可能导致的)新的操作。 对大多数程序员来说,最重要的变化是函数的说明及定义有了一种新的语法。现在,在函数的说明中可以包含参数的描述;函数的定义语法也作了相应的修改。有了这种附加信息,编译程序就可以很容易地检查出由于参数类型不匹配所造成的错误。事实证明,对C语言的这一扩充非常奏效。 ANSI C对C语言的第二个贡献是定义了一套伴随C语言的函数库,其中说明的函数涉及到对操作系统的访问(如文件的读写)、格式输入输出、内存分配、字符串操作等等。ANSI C还规定了一套标准的首标文件,提供了对于函数说明及数据类型的统一使用方法。程序只要使用这一函数库与机器交换信息,其兼容性就可以得到保证,大多数的库函数都是以UNIX系统的“标准的I/O函数库”为基础建立的。 虽然C语言可以充分发挥多数计算机的功能,但是,它并不依赖于具体的计算机体系结构,只需稍加注意,就可以编写出可移植的应用程序,也就是说程序不用修改就可以在各种机器上运行。 不过,像其他语言一样,C语言也有自己的缺陷。比如,某些运算符的优先顺序存在错误;还有的语句在语法上可以更好一些,尽管如此,实践业已证明C语言在各种编程运用中非常有效,并具有良好的表现力。 上面简单介绍了C语言的历史及特点,现在我们来考察一个C语言例程,以便大家对C语言程序的结构有所了解。以下这个程序用于计算6的阶乘: /*program to find factorial of 6*/ #include #define VALUE 6 int i,j; main() { j=1; for (I=1;I<=VALUE;I++) 第 61 页 共 76 页 湖南工业职业技术学院 j=j*I; printf(“The factorial of %d is %d \n”,VALUE,j); } 如例中所示,C语言程序(代码)以“#include”一句开始,其目的只是编译程序将C标准函数库蕴含到用户程序中,以便于读写数据、处理文本文件等等。C语言带有大量像“stdio.h”这样的标准函数库,包括字符串处理、时间及数学运算等函数库。 “#define”一行定义了一个常量。“int i,j”一行说明了两个全局变量,定义了两个变量的属性(本例中为整数)。其他常用的变量类型还有浮点型(指实数型)、字符型(指字符)等,其说明格式同整型类似。 “main()”一行说明了本程序的主函数。每一个C语言程序都必须有一个名为“main()”的函数,可出现于程序的任意位置,用以标记程序的开始。在C语言中函数的语句都被括在一对{}中。在本例中,主函数包括三行语句,分别是赋值语句、for循环语句,及printf格式输出语句。 C语言中的“printf”语句很容易使用。双引号中的部分叫作格式串,用于描述数据在输出时的格式。格式串可以包括字符常量,如“The factorial of”及“\n”(又称作转义序列,\n表示回车);还可以包括形如“%d”的操作符,用作待输出变量的定位符。本例中格式串的两个操作符(又叫作转换说明),表示出现于后续参数表中的整型数值将被置于该格式字符串的指定位置。类似的格式操作符还有表示浮点数值的 “%f”、表示字符的“%c”,及表示字符串的“%s”等。 必须注意,在“printf”语句中,格式串中操作符的数目与后续的变量在类型及数目上要严格对应。例如,如果格式串包含三个操作符,在后面的参数也必须有三个,并且参数在类型及出现的顺序上要与前面的操作符一致。 这个程序还可以,不过,如果能将常量改为由程序读入数值,则会更好一些。编辑该程序,删除VALUE常量,并说明一个全局变量“value”(把所有变更引用都改为小写,因为“value”现已说明为一个变量),然后将以下两行加到程序的开始处: printf(“Enter the value:”); scanf(“%d”,&value); 修改程序,进行编译并运行,以确保程序无误。值得注意的是,“printf”使用的格式串与“scanf”相同,“value”变量前的“,”字符在C语言中称作地址操作符,用 第 62 页 共 76 页 湖南工业职业技术学院 于返回指定变量的内存地址。出现于“scanf”中的字符型、整型、浮点型,以及记录型(即结构型)的任何变量都必须加上“,”操作符。倘若漏掉“,”,运行程序时就会出现错误。 第 63 页 共 76 页 湖南工业职业技术学院 附录2 硬件设计原理图 第 64 页 共 76 页 湖南工业职业技术学院 附录3 PCB板原理图 第 65 页 共 76 页 湖南工业职业技术学院 附录4 软件程序 BMM EQU 50H M EQU 51H SM EQU 52H BM EQU 53H KM EQU 54H SKM EQU 55H BKM EQU 56H BMD EQU 57H KMD EQU 58H SKMD EQU 59H EQU 5AH BKMD SDA BIT P1.5 SCL BIT P1.4 KZBZ EQU 5BH ORG 0000H LJMP MAIN ORG 0003H LJMP ZTCL ORG 0030H MAIN:MOV A,#01H LCALL RD24 MOV BM,A MOV A,#02H LCALL RD24 MOV KM,A MOV A,#03H LCALL RD24 MOV SKM,A 第 66 页 共 76 页 湖南工业职业技术学院 MOV A,#04H LCALL RD24 MOV BKM,A MOV A,BM CJNE A,#0FFH,L1 MOV BM,#00H AJMP L5 L1:MOV A,KM CJNE A,#0FFH,L2 MOV KM,#00H AJMP L5 L2:MOV A,SKM CJNE A,#0FFH,L3 MOV SKM,#00H AJMP L5 L3:MOV A,BKM CJNE A,#0FFH,L4 MOV BKM,#00H L5:LCALL WTDA L4:LCALL XSCL MOV P1,#0FFH MOV P3,#0FFH SETB EA SETB EX0 MOV SP,#70H MOV KZBZ,#14H LOOP:JB P1.2,LOPA LCALL D1 JB P1.2,LOPA MOV KZBZ,#11H 第 67 页 共 76 页 湖南工业职业技术学院 CLR P3.1 AJMP JCMC LOPA:JB P1.3,LOPB LCALL D1 JB P1.3,LOPB MOV KZBZ,#13H CLR P3.3 AJMP JCMC LOPB:JB P1.6,LOPC LCALL D1 JB P1.6,LOPC CLR P3.4 MOV KZBZ,#14H AJMP JCMC LOPC:JB P1.7,LOPD LCALL D1 JB P1.7,LOPD CLR P3.5 MOV KZBZ,#16H AJMP JCMC LOPD:JB P1.1,JCMC LCALL D1 JB P1.1,JCMC LCALL DAGO LCALL XSCL LCALL WTDA JCMC:JB P3.6,XSA ACALL D1 JB P3.6,XSA LCALL JCL 第 68 页 共 76 页 湖南工业职业技术学院 LCALL WTDA XSA:MOV P0,BMD CLR P2.3 ACALL D1 SETB P2.3 MOV P0,KMD CLR P2.2 ACALL D1 SETB P2.2 MOV P0,SKMD CLR P2.1 ACALL D1 SETB P2.1 MOV P0,BKMD CLR P2.0 ACALL D1 SETB P2.0 AJMP LOOP ZTCL:PUSH ACC KK:LCALL JCL DJNZ KZBZ,KK LCALL XSCL LCALL WTDA POP ACC RETI XSCL:MOV A,BM MOV DPTR,#TAB MOVC A,@A+DPTR MOV BMD,A MOV A,KM 第 69 页 共 76 页 湖南工业职业技术学院 MOV DPTR,#TAB MOVC A,@A+DPTR MOV KMD,A MOV A,SKM MOV DPTR,#TAB MOVC A,@A+DPTR MOV SKMD,A MOV A,BKM MOV DPTR,#TAB MOVC A,@A+DPTR MOV BKMD,A RET WTDA:MOV A,#01H MOV R0,BM LCALL WT24 ACALL DEL MOV A,#02H MOV R0,KM LCALL WT24 ACALL DEL MOV A,#03H MOV R0,SKM LCALL WT24 ACALL DEL MOV A,#04H MOV R0,BKM LCALL WT24 RET RD24:PUSH ACC SETB SDA 第 70 页 共 76 页 湖南工业职业技术学院 NOP NOP CLR SCL NOP NOP LCALL STAR NOP MOV A,#0A0H NOP NOP LCALL SHIFT LCALL ACK POP ACC LCALL SHIFT LCALL ACK NOP NOP LCALL STAR MOV A,#0A1H LCALL SHIFT NOP NOP LCALL ACK NOP NOP SETB SDA MOV R7,#08H NOP NOP CLR A 第 71 页 共 76 页 湖南工业职业技术学院 NOP NOP SETB SDA RD0:RL A NOP NOP SETB SCL NOP NOP MOV C,SDA NOP NOP MOV ACC.0,C NOP NOP CLR SCL DJNZ R7,RD0 NOP RET WT24:PUSH ACC SETB SDA CLR SCL LCALL STAR MOV A,#0A0H LCALL SHIFT LCALL ACK POP ACC LCALL SHIFT LCALL ACK MOV A,R0 第 72 页 共 76 页 湖南工业职业技术学院 LCALL SHIFT LCALL ACK LCALL STOP LCALL DEL RET STAR:CLR SDA LCALL DEL SETB SDA LCALL DEL SETB SCL CLR SDA LCALL DEL CLR SCL RET STOP:CLR SDA LCALL DEL SETB SCL LCALL DEL SETB SDA RET ACK:SETB SCL LCALL DEL CLR SCL RET SHIFT:MOV R7,#08H SH01:RLC A MOV SDA,C NOP SETB SCL LCALL DEL 第 73 页 共 76 页 湖南工业职业技术学院 CLR SCL DJNZ R7,SH01 RET D1:MOV R3,#06H F1:DJNZ R3,F1 RET DEL:MOV R1,#9FH FA:DJNZ R1,FA RET JCL:CLR P1.0 MOV A,BMM INC A CJNE A,#0AH,BMMJ AJMP MJ1 BMMJ:MOV BMM,A AJMP GOON MJ1:MOV BMM,#00H MOV A,M INC A CJNE A,#0AH,MJ AJMP SMJ MJ:MOV M,A AJMP GOON SMJ:MOV M,#00H MOV A,SM INC A CJNE A,#0AH,SMJ1 AJMP BMJ SMJ1:MOV SM,A AJMP GOON 第 74 页 共 76 页 湖南工业职业技术学院 BMJ:MOV SM,#00H MOV A,BM INC A CJNE A,#0AH,BMJ1 AJMP KMJ BMJ1:MOV BM,A AJMP GOON KMJ:MOV BM,#00H MOV A,KM INC A CJNE A,#0AH,KMJ1 AJMP SKMJ KMJ1:MOV KM,A AJMP GOON SKMJ:MOV KM,#00H MOV A,SKM INC A CJNE A,#0AH,SKJ1 AJMP BKMJ SKJ1:MOV SKM,A AJMP GOON BKMJ:MOV SKM,#00H MOV A,BKM INC A CJNE A,#0AH,BKJ1 LCALL DAGO BKJ1:MOV BKM,A GOON:ACALL XSCL SETB P1.0 RET 第 75 页 共 76 页 湖南工业职业技术学院 DAGO:MOV A,#00H MOV BMM,A MOV M,A MOV SM,A MOV BM,A MOV KM,A MOV SKM,A MOV BKM,A MOV BMD,A MOV KMD,A MOV SKMD,A MOV BKMD,A RET ORG 0400H TAB:DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH END 第 76 页 共 76 页 湖南工业职业技术学院 附录5 PCB板里程显示图 第 77 页 共 76 页 湖南工业职业技术学院 附录6 PCB板里程数据清零后的显示图 第 78 页 共 76 页 湖南工业职业技术学院 附录7 元器件清单 1( 电阻 100欧 2只 10千欧 2只 1千欧 11只 2( 电容 电解电容10uf 2只 电解电容470uf 1只 磁片电容30pf 2只 3( 共阴数码管 4只 4( 12MHZ晶振 1只 5( AT24C01芯片 1片 6( 7407 2片 7( 89C51 1片 8( 7805 1只 9( 7812 1只 10(五孔插座 1只 11(二极管 3只 第 79 页 共 76 页 湖南工业职业技术学院 致 谢 经过两个多月的毕业设计,我最终完成了毕业设计所要求达到的预期要求和技术指标。在设计与调试过程中,我得到指导老师汪小锋老师亲切关怀和悉心的指导,在此表示感谢。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。我在毕业设计中主要负责单片机软件编程,这对我来说也是很大的挑战。一开始刚接触到这个课题感到无从下手。在指导老师的指导和帮助下,我自己查找了相关的资料,拟订了设计思路和方案,经过不断修改和调试完成了设计内容。同时我要感谢和我同组的同学,由于我们做的电动自行车里程表的设计,需要软件和硬件的结合,在硬件与软件联调的时候也出现了不少问题,不过通过与合作者的研究讨论,不断排除各方面的问题,最后解决了问题。在此期间,她也给了我许多帮助。我才能克服一个一个的困难和疑惑,直至本次毕业设计的顺利完成。 通过这次毕业设计,我要再次感谢所有给予我帮助的老师和同学们~ 第 80 页 共 76 页 湖南工业职业技术学院 摘 要 本次数字电子钟课程设计采用ATMEL公司的AT89S52为基本芯片,外配以12MHZ的晶振 作为时钟电路,按键与电阻电容组成的复位电路,通过程序下载软件与数字钟硬件连接, 实现24小时的时,分,秒计时系统。该电子钟设置4个按键,分别实现对时,分,秒 加一以及开启电子钟的作用。在具体数码显示中能够实现自动记时,手动调时,满24 小时自动清0的作用。 关键词 数字电子钟; AT89S52;硬件设计;软件设计 ABSTRACT The curriculum design, digital electronic clock with ATMEL Corporation AT89S52 as the basic chips, accompanied by 12MHz crystal as an external clock circuit, composed of key with the resistance and capacitance of the reset circuit, through the program to download software and digital clock hardware connection, to achieve a 24-hours,minutes and seconds,timekeeping system. The electronic clock is set four buttons, respectively, to realize hours, minutes and seconds, plus one and opening the electronic clock role.In specific digital display can be automatic timer, manual transfer, the full 24-hour automatic cleaning 0 role. Key words: Digital electronic clock;;AT89S5;Hardware Design;Software Design 目 录 1 设计课题任务、功能要求说明及方案介绍„„„„„„„„„„„„„„„„ 1 1.1 设计课题任务„„„„„„„„„„„„„„„„„„„„„„„„„„ 1 1.2 功能要求说明„„„„„„„„„„„„„„„„„„„„„„„„„„ 1 1.3 设计总体方案介绍及原理说明„„„„„„„„„„„„„„„„„„„ 1 2 设计课题硬件系统的设计„„„„„„„„„„„„„„„„„„„„„„„ 2 2.1 设计课题硬件系统各模块功能简要介绍„„„„„„„„„„„„„„„ 2 2.2 设计课题电路原理图、PCB图、元器件布局图 „„„„„„„„„„„„ 2 2.3 设计课题元器件清单„„„„„„„„„„„„„„„„„„„„„„„ 3 3 设计课题软件系统的设计„„„„„„„„„„„„„„„„„„„„„„„ 4 第 81 页 共 76 页 湖南工业职业技术学院 3.1 设计课题使用单片机资源的情况„„„„„„„„„„„„„„„„„„ 4 3.2 设计课题软件系统各模块功能简要介绍„„„„„„„„„„„„„„„ 4 3.3 设计课题软件系统程序流程框图„„„„„„„„„„„„„„„„„„ 4 3.4 设计课题软件系统程序清单„„„„„„„„„„„„„„„„„„„„ 8 4 设计结论、仿真结果、误差分析、教学建议„„„„„„„„„„„„„„„„ 9 4.1 设计课题的设计结论及使用说明„„„„„„„„„„„„„„„„„„ 9 4.2 设计课题的仿真结果„„„„„„„„„„„„„„„„„„„„„„„ 9 4.3 设计课题的误差分析„„„„„„„„„„„„„„„„„„„„„„„ 10 4.4 设计体会„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 10 4.5 教学建议„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 10 参考文献 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 12 致 谢 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 13 附 录 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 14 1 设计课题任务、功能要求说明及方案介绍 1.1 设计课题任务 设计一个数码显示的电子钟,具有以下功能:通电显示扫描字符P,按键实现自动记时, 定时报时,手动调时及数码显示的功能。 1.2 功能要求说明 对实验板通电后开始进入自动扫描系统,数码显示为P,按开始键自动进入24小时计时系统,在有键干扰下,进入手动调时系统:按调时键对时进行加一,按调分键对分进行加一,按调秒键对秒进行加一,退出手动调时系统后,计时系统在调整后的状态下运行。 当计时达到24小时后,系统自动清0,重新进入计时系统。 1.3 设计课题总体方案介绍及工作原理说明 本数字电子钟主要由时钟电路,复位电路,下载电路,4位独立式键盘,AT89S52,限流电 阻,74LS245驱动以及数码管组成。具体设计方案如图1.3所示: 第 82 页 共 76 页 湖南工业职业技术学院 图1.1 总体设计方案图 该数字电子钟由“秒脉冲发生器”,“分脉冲发生器”,“时脉冲发生器”,“时调时器”,“分调时器”,“秒调时器”,“译码显示器”“键扫描器”组成。1秒定时信号是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器来实现。将标准秒信号送入“秒计数”缓冲单元,“秒计数”缓冲采用10进制计数,每累计60秒产生一个“分脉冲”信号,该信号送入“分计数”缓冲单元。“分计数”缓冲单元也采用10进制计数,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数”缓冲单元。“时计数器”采用10进制计时,可实现对一天24小时的累计。通过对时,分,秒缓冲单元数据进行译码,分时输出送至七段LED数码管。整点报时电路为根据根据“时计数”缓冲单元的变化产生一个“报时脉冲”,开启蜂鸣器报时。在电子钟正常走时过程中,主要使用了单片机内部RAM的四组工作寄存器区,堆栈缓冲区,自定义的数据暂存区, 数据显示缓冲区等。 2 设计课题硬件系统的设计 2.1 设计课题硬件系统各模块功能简要介绍 数字电子钟的硬件系统模块设计主要分为:时钟电路,复位电路,键盘电路,显示电路, 第 83 页 共 76 页 湖南工业职业技术学院 电源电路。 (1)时钟电路:系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。AT89单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保 证震荡器稳定和可靠地工作。 (2)复位电路:复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路,如图所示。当时钟频率选用6MHz时,C 取22μF,Rs约为200Ω,Rk约为1K。 (3)键盘电路:当非编码键盘的按键较少时,采用独立式键盘比较方便,可以随意拿硬件作为预处理,各键盘之间不影响,编程相对矩阵式键盘简单,但占用的I/O口线较多。 (4)显示电路:显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料及生产工艺,单片机应用系统中常用的显示器有:发光二极管LED显示器、液晶LCD显示器、CRT显示器等。LED显示器是现在最常用的显示器之一。LED显示器的显示控制方式按驱动方式可分成静态显示方式和动态显示方式两种。对于多位LED显示器,通常都是采用动态扫描的方法进行显示,其硬件连接方式如系统原理图。在动态方式中,逐个地循环地点亮各位显示器。这样虽然在任一时刻只有一位显示器被点亮,但是由于人 眼具有视觉残留效应,看起来与全部显示器持续点亮效果完全一样。 (5)电源电路:现在市面上销售的编程器有很多都是由PC机的USB口直接供电,为了降低本设计的成本及节省设计时间,没有另外设计编程器,而直接购买了市场上的USB供 电及下载器。 2.2 设计课题电路原理图、PCB图、元器件布局图 设计课题电路原理图,见附录二; 设计课题电路的PCB图,见附录三; 设计课题电路的元器件布局图,见附录四; 2.3 设计课题元器件清单 设计课题元器件清单如表2.1所示。 表2.1 元器件清单 名 称 数 量 参 数 电阻 5个 1K 共阳数码管 2个 4位一体 电阻 4个 4.7k ISP下载口插座 1个 普通插座 1个 40PIN 电阻 8个 470 电阻 5个 200 按键 5个 插针 1排 40PIN 第 84 页 共 76 页 湖南工业职业技术学院 锁紧插座 1个 40PIN 驱动 一套 74ls245 USB供电接口及供电线 一套 晶振及其插座 一套 12MHz 电容 2个 30pF 极性电容 1个 22μF 排阻 1个 10K 芯片 1块 AT89S52 发光二极管 1个 六角开关 1个 电容 各1个 470μf、104P 铜柱 (带螺母) 4个 3 设计课题软件系统的设计 3.1 设计课题使用单片机资源的情况 单片机资源使用的情况如下: P0口作为段码输出口,输出数码管显示的段码信号;P3口作为位码输出口,输出数码管的位显示;输出数码管位选信号;晶振11.0592M;调整状态键IN_SET:P1.0;通过调整状态键来确定时间是否进入调整时间状态;小时调整键HH_SET:P1.1;按一次使选中位加1;分钟调整键MM_SET:P1.2;按一次使选中位加1;秒钟调整键SS_SET:P1.3;按一次使选中位加1;当自动运行到整点,蜂鸣器发声报时;30H-3FH;16个寄存器单元 作为数据显示单元; 30H 用于秒个位数据存储;31H 用于秒十位数据存储; 32H 用于分个位数据存储;33H 用于分十位数据存储; 34H 用于时个位数据存储;35H 用于时十位数据存储; 3FH 用于秒个位显示存储;3EH 用于秒十位显示存储; 3DH 用于分个位显示存储;3CH 用于分十位显示存储; 3BH 用于时个位显示存储;3AH 用于时十位显示存储; 46H 用于1秒计时溢出; 堆栈栈底:60H。 3.2 设计课题软件系统个模块功能简要介绍 本设计的软件系统模块大致分为:主程序模块,中断服务程序,数码驱动显示程序, 键扫程序。 主程序:用于对程序进行全局控制,包括信号的输入输出,调用各个功能的子模块,调 配按键的使用。 中断服务程序:用于产生1S的脉冲信号。 键盘扫描模块:用于及时校正计时状态。 数码驱动模块:用于驱动数码管的正确显示计时。 3.3 设计课题软件系统程序流程框图 系统软件采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程 序转变成十六进制程序语言,接着使用Proteous 进行仿真,读出显示数据。 主程序流程框图如3.1所示; 第 85 页 共 76 页 湖南工业职业技术学院 加1子程序如3.2所示; 显示子程序框图如3.3所示; 中断服务程序程序如3.4所示; 键盘扫描子程序框图如3.5所示; 图3.1 主程序流程框图 图3.2 加1子程序流程框图 图3.3 显示子程序 图3.4 中断子程序 图3.5 键盘扫描子程序 3.4 设计课题软件系统程序清单 设计课题软件系统程序清单,详见附录一。 4 设计结论、仿真结果、误差分析、教学建议 4.1 设计课题的设计结论及使用说明 本次数字电子钟的设计实现了24小时的计时,在P1口接四个独立式键盘对时间进行控制。设计使用了2个四位一体的共阳数码管做为显示器,用于显示24小时的时间值;设计了4个按键对时间进行控制:按键S1有三个作用:第一用于开启自动计时,第二用于退出自动计时并进入调整时间状态,第三用于退出调整时间状态,开启自动计时状态;按键S2用于对小时进行调整;按键S3用于对分钟进行调整;按键S4用于对秒钟 进行调整。当整点时间到,蜂鸣器报警。 4.2 设计课题的仿真结果 在Proteus ISIS的80C51中下载程序生成的HEX文件,按开始符号运行,在数码管上 第 86 页 共 76 页 湖南工业职业技术学院 观察程序运行结果,系统仿真结果如图4.1与4.2所示。 设计功能如下: (1)、“P.”状态:未按键之前,上电,数码显示P点。程序运行后,按复位键, 显示P点。 (2)、自动运行状态:程序开始显P后,按S1键,系统进入计时状态,此时,按S2,S3,S4 键无效。 (3)、调整状态:在自动运行过程中,按S1键,退出自动运行状态,计时暂停。此时,按键S2,S3,S4有效,均代表调节时,分,秒。每按一次,对应的数码加一。按键S1, 退出调整状态,接着计时。 时间显示格式为:时分秒; 图4.1 “P.”运行状态仿真 图4.2 时钟运行状态仿真 4.3 设计课题的误差分析 实际程序下载到实验板中的电子钟显示存在一定的误差,误差来源可能为三个方面:第一,在程序运行过程中,时钟周期的不精确导致机器周期与理论值存在一定的差别;第二在中断一秒显示过程中,一些指令需要消耗一定的机器周期,使得一秒延时比实际要 长;第三在键抖动的反应程度在运行中比较慢。 4.3 设计体会 本次数字电子钟的课程设计,学习将理论与实践相结合,对数字器件及集成电路有较深入的认识,初步掌握综合运用所学知识分析和设计一般数字系统的基本方法,增强动手解决实际问题的能力。认识到了自身的许多缺点和不足,初步接触到了如何将硬件与软件相连接来实现一定的自动化。在实验板的焊接过程中,更深地意识到焊接技术的重要 性。使我们明白现实生活中电子钟的工作原理,锻炼了查资料的能力。 4.4 教学建议 在一个学期的相处过程中,通过实践形象地将抽象化的单片机书本知识具体化,掌握一些与单片机相关的软件,在王韧老师的教学过程中,课堂气氛轻松愉快,同学们学习单片机的热情高涨,结合自身情况,希望王韧老师在以后的教学过程中能够多与同学交流 思想,讨论课程学习方法。 参考文献 [1] 马莹莹.基于Proteus的单片机系统电路设计与仿真.辽宁工学院学报.2007.8,第4 期. Ma Yingying.Microcontroller-based Proteus system circuit design and simulation.2007 .8 Journal of Liaoning Institute of Technology, No. 4. [2] 陈刚.张天鹏,数字电子钟的分析与设计.办公自动化杂志.2009,第152期. Chen 第 87 页 共 76 页 湖南工业职业技术学院 Gang. Zhangtian Peng, digital electronic clock analysis and design. Office utomation magazine .2009, p. 152. [3] 曹巧媛.单片机原理及应用[M],北京:电子工业出版社,1997.7. Cao Qiao Yuan. Microcontroller Theory and Application [M], Beijing: Electronic Industry Press, 1997.7. [4] 李广弟.朱月秀,单片机基础,北京:航空航天大学出版社,2007.6. Li Guangdi. Zhu Xiu, microcontroller-based, Beijing: Aeronautics and Astronautics University Press, 2007.6. 致 谢 在不断的努力中,单片机的课程设计终于告一段落。在此感谢王韧老师的悉心教导,使 我学会了如何理清编程的思路以及调试方法,才能够让我在程序的编排过程中少走弯 路,同时也感谢同学的帮助以及鼓励,使我学会了很多的宝贵经验。再次衷心的感谢你 们。 第 88 页 共 76 页 湖南工业职业技术学院 附 录 附录1 ;本电子钟6位数码管显示时分秒,可整点报时 ;显示格式:00-00-00 ;通过4只按键来调整时间 ;P0口输出数码管段选信号,P3口输出数码管位选信号;晶振11.0592M ;P2.1为蜂鸣器发声报时 ;刘远桃 2009年12月31日 ;;;;;;;;;;;变量定义段;;;;;;;;;;;;;;;;; SECGE EQU 30H ;秒个位存储单元 SECSH EQU 31H ;秒十位存储单元 MINGE EQU 32H ;分个位存储单元 MINSH EQU 33H ;分十位存储单元 HOUGE EQU 34H ;时个位存储单元 HOUSH EQU 35H ;时十位存储单元 INTCISHU EQU 46H ;要求的计数溢出次数,即1秒计 时的循 环次数 IN_SET EQU P1.0 HH_SET EQU P1.1 MM_SET EQU P1.2 SS_SET EQU P1.3 ;;;;;;;;;;;;;程序起始;;;;;;;;;;;;;;;;; ORG 0000H ;程序执行开始地址 LJMP DISPP ORG 000BH ;定时器T0中断程序入口 LJMP INTT0 ;跳至INTTO执行 ORG 0030H DISPP:MOV A, #20H ;位选 TT:MOV P3, A MOV P0, #0CH ;段码"P." 第 89 页 共 76 页 湖南工业职业技术学院 LYT2:JB IN_SET, TT ;键是否按下,没按下则转移 LCALL DL JNB IN_SET, LYT2 ;键是否松开,松开往下走 MAIN:MOV R0, #30H ;RAM区首地址 MOV R7, #16 ;RAM区单元个数 TT1:MOV @R0, #00H INC R0 DJNZ R7, TT1 MOV SP, #60H ;确立堆栈区 MOV IP, #02H SETB EA SETB ET0 ; MOV TMOD, #01H ;设定定时器0工作方式1 MOV TL0, #0DCH ;装计数初值 MOV TH0, #0BH SETB TR0 ;启动定时器0 START:LCALL DISP ;开始计时显示 JNB IN_SET, SETTIME ;判断是否进入时间调整状态 LJMP START ;;;;;;;;;;时间调整段;;;;;;;;;;;;;;;;; SETTIME:CLR TR0 ;暂停计时 LCALL DISP ;调显示 JNB IN_SET, SETTIME ;判键是否松开,松开则往下走 LYT:LCALL DISP ;调显示 JNB IN_SET, OUT_SET ;判断调整键是否再次按下,按 下则跳出 调整状态,正常计时 JNB SS_SET, S1 ;IN-SET没有再次按下,判断调秒 键是否 按下,按下则转移到秒加一程序 JNB MM_SET, S2 ;调秒键没有再次按下,判断调分键 是否 按下,按下则转移到分加一程序 JNB HH_SET, S3 ;调分键没有再次按下,判断调时健 是否 按下,按下则转移到时加一程序 LJMP LYT S1:LCALL DL ;去抖动 S11:LCALL DISP ;调显示 JNB SS_SET, S11 ;判调秒键是否松开,松开则往下执 行 MOV R0, #SECSH ;秒十位存储单元地址 第 90 页 共 76 页 湖南工业职业技术学院 LCALL DADD1 ;秒加1 LCALL DISP ;调显示 MOV A, R2 XRL A, #60H ;判是否到60秒 JNZ LYT1 ;是则往下走,没到则跳转 LCALL CLR0 LJMP LYT S2:LCALL DL ;去抖动 S22:LCALL DISP JNB MM_SET, S22 MOV R0, #MINSH ;秒十位存储单元地址 LCALL DADD1 ;分加1 LCALL DISP MOV A, R2 XRL A, #60H ;判是否到60分 JNZ LYT1 LCALL CLR0 LJMP LYT S3:LCALL DL ;去抖动 S33:LCALL DISP JNB HH_SET, S33 MOV R0, #HOUSH ;秒十位存储单元地址 LCALL DADD1 ;时加1 LCALL DISP MOV A, R2 XRL A, #24H ;判是否到24H JNZ LYT1 LCALL CLR0 LJMP LYT OUT_SET:LCALL DISP JNB IN_SET, OUT_SET ;判键是否松开 SETB TR0 ;松开则继续计时 LJMP START LYT1:LJMP LYT ;;;;;;;;;;;;;1秒中断程序;;;;;;;;;;;;;;;; INTT0:PUSH DPL PUSH DPH PUSH PSW PUSH ACC 第 91 页 共 76 页 湖南工业职业技术学院 SETB RS1 ;改变当前寄存器组为组3 SETB RS0 CLR ET0 CLR TR0 MOV TL0, #0DCH ;装计数初值 MOV TH0, #0BH SETB TR0 MOV A, INTCISHU ;循环次数减1 DEC A MOV INTCISHU, A JNZ RET0 ;不满20次,转RET0返回 SETB P2.1 MOV INTCISHU, #14H ;满20次,开始计时操作 MOV R0, #SECSH ;秒十位存储单元地址 LCALL DADD1 ;十进制秒加1 MOV A, R2 XRL A, #60H ;判是否到60秒 JNZ RET0 ;不到,转RET0返回 LCALL CLR0 ;到60秒,秒显示缓冲单元清0 MOV R0, #MINSH ;分十位存储单元地址 LCALL DADD1 ;十进制分加1 MOV A, R2 XRL A, #60H ; 判是否到60分 JNZ RET0 ;不到,转RET0返回 CLR P2.1 ;开蜂鸣器 LCALL CLR0 ;到60分,分显示缓冲单元清0 MOV R0, #HOUSH ;时十位存储单元地址 LCALL DADD1 ;十进制时加1 MOV A, R2 XRL A, #24H ;判是否到24时 JNZ RET0 ;不到,转RET0返回 LCALL CLR0 ;到24时,时显示缓冲单元清0 RET0:POP ACC POP PSW ;恢复当前寄存器组的组号 POP DPH POP DPL SETB ET0 RETI ;中断返回 ;;;;;;;;;;;;;显示子程序;;;;;;;;;;;;;;;;; DISP:PUSH DPH PUSH DPL PUSH ACC 第 92 页 共 76 页 湖南工业职业技术学院 PUSH PSW CLR RS1 ;改变当前寄存器组为组1 SETB RS0 MOV 3FH, 30H MOV 3EH, 31H MOV 3DH, 32H MOV 3CH, 33H MOV 3BH, 34H MOV 3AH, 35H MOV R1, #3AH ;显示缓冲存储单元首地址 MOV R2, #01H ;从右至左显示 DISP1:MOV A, @R1 MOV DPTR, #TAB MOVC A, @A+DPTR MOV P0, A ;送段控 MOV P3, R2 ;送位控 ACALL DL ;延时2毫秒 MOV A, R2 JB ACC.5, DISP2 RL A INC R1 MOV R2, A AJMP DISP1 DISP2:POP PSW ;恢复当前寄存器组的组号 POP ACC POP DPL POP DPH RET ;;;;;;;;;;;;加1子程序;;;;;;;;;;;;;;;;; DADD1: MOV A, @R0 ;将十位送入A DEC R0 SWAP A ;十位数占高4位 ORL A, @R0 ;个位数占低4位 ADD A, #01H ;个位加一 DA A ;十进制调整 MOV R2, A ;全值暂存R2中 ANL A, #0FH ;取个位 MOV @R0, A ;个位值送显示缓冲单元 MOV A, R2 INC R0 ANL A, #0F0H ;取十位 SWAP A 第 93 页 共 76 页 湖南工业职业技术学院 MOV @R0, A ;十位值送显示缓冲单元 RET ;;;;;;;;;;清零子程序;;;;;;;;;;;;;;;;; CLR0: CLR A MOV @R0, A ;十位数缓冲单元清0 DEC R0 MOV @R0, A ;个位数缓冲单元清0 RET ; ;;;;;;;;延时2毫秒子程序;;;;;; DL:PUSH PSW SETB RS1 SETB RS0 MOV R7, #02H DL1:MOV R6, #0FFH DL2:DJNZ R6, DL2 DJNZ R7, DL1 POP PSW RET ;;;;;;;;;;常数表格;;;;;;;;;;;;; TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H ;0-8 DB 90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH ;9,A,B,C,D,E,F,灭,p. ;;;;;;;;;;;程序结束;;;;;;;;;;;;;;; END 第 94 页 共 76 页 湖南工业职业技术学院 第 95 页 共 76 页
本文档为【单片机的汽车里程表设计+单片机电子钟合一】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_266065
暂无简介~
格式:doc
大小:471KB
软件:Word
页数:109
分类:工学
上传时间:2018-01-15
浏览量:15