




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆交通大学计算机与信息学院专业方向课程设计报告班 级: 电子信息工程 三班 姓 名: 张春秋 学 号: 09200309 设计项目名称: 出租车计价器 实验所属课程: 专业方向课程设计 实验室(中心): 现代电子实验中心 指 导 教 师 : 蓝章礼 设计完成时间: 2012.9.10 至 2012.12.20 一、 设计的目的 通过课程设计了解和掌握单片机应用技术;了解和掌握C语言的程序设计同硬件电路的结合;熟练运用proteus,keilC等软件的操作;了解和掌握单片机硬件电路的焊接和调试;了解和掌握掉电存储芯片AT24C02、霍尔传感器A44E、数码管、驱动芯片74LS245等外部接口芯片器件的应用。二、 设计内容简介利用AT89S51单片机,设计简单的出租车计价器。在出租车计价器的总体设计中,我主要负责出租车计价器硬件设计。其中主要的外围功能电路有:驱动电路,按键控制电路,掉电保护电路,时钟部分,数码管显示电路等。通过对以上各功能的设计,制作出的出租车计价器应具有以下功能:上电时显示全为零,通过按下启动按键来开始计价,数码管开始显示起步价和起步金额;按下模拟开关按键来产生一个脉冲信号,模拟行驶的里程;数码管开始显示所走里程和所应付的金额,并逐渐增加;按下停止按键,停止计价,数码管显示所走总里程和用户所需付总金额,按下清零按键,数码管全显示零,以备下次计价三、 系统结构采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。设计采用AT89S51单片机为主控器,以A44E霍尔传感器测距(按键替代),实现对出租车的基本的计价设计,并采用AT24C02实现在系统掉电的时候保存单价等信息,输出采用8段数码显示管。利用单片机丰富的I/O端口,及其控制的灵活性,实现基本的计价功能。系统结构图如下:按键控制 89C51单片机复位电路掉电保护时钟电路显示模块显示总里程和总金额四、 硬件设计硬件组成主要包括:驱动电路、显示电路、复位电路、掉电保护电路、时钟电路、按键电路。4.1.1 驱动电路74LS245是我们常用的芯片,用来驱动led或者其他的设备。总线驱动器74LS244和74LS245经常用作三态数据缓冲器,74LS244为单向三态数据缓冲器,而74LS245为双向三态数据缓冲器。本设计用74LS245作为驱动芯片,双向总线发送器/接收器(3S)。图2.4驱动芯片管脚图74LS245主要电器特性的典型值如下: 引出端符号: A A总线端 B B总线端 /G 三态允许端(低电平有效) DIR 方向控制端 功能表: 表 2.5功能表利用74LS245来驱动数码管显示,单片机的P2.0到P2.5分别接A0到A5管脚,进行数据的传送,其中AB/BA接高电平,控制数据从A到B进行传送,B0到B5分别接数码管的位选端,驱动数码管依次显示。P2.0到P2.5的数据通过A传送到B中的数据送到数码管,以达到显示数据信息的目的。4.1.2 显示电路 多数的应用系统,都要配输入和输出外设,LED显示器和LCD显示器,虽然LCD显示效果比较好,已经成为了一种发展趋势,但为了节约成本,我们选用了LED显示器(图2.6)。在显示方面,我们选用了动态显示。静态显示虽然亮度较高,接口编程容易,但是每位的段码线分别与一个8位的锁存器输出相连。占用的I/O口线比较多,在显示位数较多的情况下,一般都采用动态显示方式。利用动态显示的方法,由于LED显示器的余辉和人眼的视觉暂留现象,只要每位显示的时间间隔足够短,就仍能感觉到所有的数码管都在显示。为了简化硬件,通常将所有位的段码线相应段并联在一起,由一个8位I/O口控制,在同一时刻,只让一位选通,如此循环,就可以使各位显示出将要显示的字符。 图2.6 LED数码管 图2.7集成数码管LED数码有共阳和共阴两种,把这些LED发光二极管的正极接到一块(一般是拼成一个8字加一个小数点)而作为一个引脚,就叫共阳的,相反的,就叫共阴的,那么应用时这个脚就分别的接VCC和GND。再把多个这样的8字装在一起就成了多位的数码管了。在本设计仿真中使用的是6个一组的共阴8段数码管(图2.7)。 找公共共阴和公共共阳的方法:首先我们找个电源|稳压器(3到5伏)和1个1K(几百欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的,找到一个就够了,然后用GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。共阴极数码管,阴极接地,当某个发光二极管的阳极为高电平时,发光二极管点亮,对应的段就显示。4.1.3 复位电路单片机的复位是由外部的复位电路实现的, 复位电路通常采用上电自动复位和按钮复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的。除了上电复位外还需要按键手动复位(图2.8)。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经电阻与电源VCC接通而实现的。单片机的复位速度比外围I/O接口电路快为能够保证系统可靠的复位,在初始化程序中应安排一定的复位延迟时间。图2.8复位电路4.1.4 掉电保护电路掉电保护电路中采用了存储芯片AT24C02。AT24C02是一个CMOS标准的EEPROM存储器,是AT24CXX系列(AT24C01/02/04/08/16)成员之一,这些EEPROM存储器的特点是功耗小、成本低、电源范围宽,静态电源电流约30uA110uA,具有标准的I2C总线接口,是应用广泛的小容量存储器之一。 图29 AT24C02引脚图上图是AT24C02的引脚图,这个芯片是一个8脚芯片,内部存储器有256字节。引脚功能介绍如下:A0(引脚1):器件地址的A0位,是器件地址的最低位,器件地址排列是A6 A5 A4 A3A2 A1 A0 R/W。A1(引脚2):器件地址的A1位。A2(引脚3):器件地址的A2位。GND(引脚4):地线。SDA(引脚5):数据总线引脚。SCL(引脚6):时钟总线引脚。TEST(引脚7):测试引脚。Vcc(引脚8):电源线引脚。本设计采用掉电存储电路图如下:图2.10掉电存储电路4.1.5 时钟电路MCS-51单片机的各功能部件都是以时钟控制信号为基准,内部电路在时钟信号的控制下,严格地按时序执行指令进行工作,单片机本身如同一个复杂的同步时序电路,为了保证其各个部分同步工作,电路要在唯一的时钟信号控制下,严格地按照时序进行工作。其实只需在时钟引脚连接上外围的定时控制元件,就可以构成一个稳定的自激振荡器。为更好地保证振荡器稳定可靠地工作,谐振器和电容应尽可能安装得与单片机芯片靠近。本设计中使用的振荡电路,由12MHZ晶体振荡器和两个约30PF的电容组成,在XTAL1和XTAL2两端跨接晶体,电容的大小不会影响振荡频率的高低。在整个系统中为系统各个部分提供基准频率,以防因其工作频率不稳定而造成相关设备的工作频率不稳定,晶振可以在电路中产生振荡电流,发出时钟信号。如图2.11所示。图2.11时钟电路4.1.6 按键电路按键控制电路中,单片机的P1.0管脚接启动/停止按键,通过软件编程,当按下按键计数器开始工作,开始计价;当弹起按键时,计数器停止工作,停止计价,启动/停止按键带自锁功能。按下启动按键,开关处于导通状态,这时给P1.0送低电平信号,这时TR0=1,计数器开始工作,调用计价子程序开始计价。清零按键接单片机的P1.3管脚,按下清零按键,P1.3为低电平,调用清零子程序,用于将显示数据清零,在程序中给各位赋0代码(0x3f),以达到清零的目的,方便下次计价。另外为功能键,控制价格调整,这个按键是在没有按下启动/停止按键时有作用,计价过程中无效。图2.12 按键电路4.2.1硬件电路设计按下计价按键时,显示起步价和起步里程范围,这些在程序中设置;当等于或超过两公里后,按计算总价的公式为:总价=起步价+单价*(总里程-起步里程)+1进行计价。本设计中,起步价为4元,起步里程为2公里,当然这些数据可以在程序中改写,以满足不同时期价格调整的需要。下图是通过在Keil C中编译通过,并生成Hex文件,在PROTEUS中仿真通过的整体硬件原理图: 五、 软件设计整个程序的流程图如下:NNY 结果显示判断是否进入调价模式判断是否开始计费进入调价模式调用计费子程序判断是否停止键按下NY开显示N 初始化 清显示单价复位Y程序源代码#include /#include #include #define uchar unsigned char#define uint unsigned intint xscode6=0x3f,0x06,0x5b,0x4f,0x66,0x6d;/显示存储区int zxscode6=0x1f,0x2f,0x37,0x3b,0x3d,0x3e;/共阴显示片选码int codetab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/共阴极数码int i,j,flag;uchar sec;int kk=0;/路程标志位int jkk=0;/费用int jflag=0;/费用标志位int kflag=0;/路程标志位int zdflag=0;/中断标志位int kilo=0;/路程int dj=1;/路程单价 int djflag=0;/路程单价biaozhiweisbit key1=P10;sbit key2=P11;sbit key3=P12;sbit key4=P13;sbit key5=P34;sbit SDA=P30; /IIC引脚sbit SCL=P31;void delay() ;void delay1 (xms)/延时程序子程序 uint i,j; for(i=xms;i0;i-) for(j=110;j0;j-); void start() /IIC开始位 SDA = 1; SCL = 1; delay(); SDA = 0; delay(); void stop() / IIC停止位 SDA = 0; delay(); SCL = 1; delay(); SDA = 1; void respons() /IIC应答位 uchar i; SCL=1; delay(); while(SDA=1)&(i250) i+; SCL=0; delay();void init() SDA=1; delay(); SCL=1; delay(); uchar read_byte() / 从EEPROM读到MCU uchar i,j; for(i=0;i8;i+) SCL=1; j=1; j|=SDA; SCL=0; return(j); void write_byte(uchar date) / 从MCU写到EEPROM uchar i,temp; temp=date; for(i=0;i8;i+) temp=temp1; SCL=0; delay(); SDA=CY; delay(); SCL=1; delay(); SCL=0; delay(); SDA=1; delay();void write_data(uchar addr, uchar date) / 在指定地址addr处写入数据date start(); write_byte(0xa0); respons(); write_byte(addr); respons(); write_byte(date); respons(); stop();uchar read_data(uchar addr) / 在指定地址addr读取数据 uchar date; start(); write_byte(0xa0); respons(); write_byte(addr); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date; void xianshi()/显示程序子程序 for(flag=0;flag6;flag+) P0= xscodeflag;/送显示码P2= zxscodeflag;/ 送片选码 delay1(2);P0=0; void jijia()/计费子程序 if(kk2&kk35&kk900) jkk=4+2*dj*(kk-2)+1; kflag=kk/100;/路程百位 jflag=jkk/100;/路费百位 xscode2=codetabkflag; xscode5=codetabjflag; kflag=kk/10;/路程十位 jflag=jkk/10;/路费十位 xscode1=codetabkflag; xscode4=codetabjflag; kflag=kk%10;/路程个位 jflag=jkk%10;/路费个位 if(kflag=0)kflag=2;/不足两公里时,显示两公里 xscode0=codetabkflag; xscode3=codetabjflag; void qingling() for(i=0;i100) sec=0; TL0=(65536-2)%256 ;/计数值设置,记满两次产生中断 TH0=(65536-2)/256 ; TMOD=0x06; EA=1; ET0=1; TR0=0;/关定时器 kilo=0; qingling(); aa: if(key1=0)/当键按下去,开始计费 TR0=1;/开计数器0kk=kilo;jijia(); if(key1=1)/当键松开,停止计费TR0=0;/停计数器1 if(key2=0)/功能调整键 delay1(10);/延时判断键是否松开 if(key2=1) xscode2=codetabdjflag+;/当p1.2口的按键按下时功能标志位加一 if(key3=0&djflag=2)/当功能键标志位等1时,改变每公里的价钱 delay1(10); if(key3=1) dj+; xscode1= codetabdj/10 ;/把价钱十位送显示区,单价不能超100 xscode0=codetabdj%10; if(key4=0)/有键按下,清显示,单价会初始值,单价标志位清零 qingling(); dj=1; djflag=0; xianshi();/调显示子程序goto aa; void Timer0_Int() interrupt 1 using 2 / 计数器0中断服务 zdflag=zdflag+1;/中断标志位加一 if(zdflag=2)/当中断产生二次后,路程加一公里并清中断标志位 zdflag=0; kilo=kilo+1; 六、 测试及结论 6.1.1单片机仿真软件在线调试PROTEUS1.打开Proteus软件。2.选择file菜单下的 open design选项,找到所需的元器件,元器件上单击右键选中,再单击左键对其进行命名和赋
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 摩托车涂装知识培训课件
- 内蒙古乌兰察布市2024-2025学年七年级下学期期末语文试题(解析版)
- 桥梁施工技术试题及答案
- 2025年版简易建筑工程合同与现行建筑工程合同对比分析
- 2025合作协议大棚合作协议范本
- 2025标准版房屋租赁合同范本协议书
- 投资建厂合作建设协议书
- 摄像相机基础知识培训课件
- 2025停车场使用权置换合同样本
- 2025有关餐饮行业购销合同范本
- IATF16949中英文对照版2025-10-13新版
- 2025江苏徐州沛县经济开发区发展集团招聘工作人员拟聘用人员笔试历年参考题库附带答案详解
- 心之所向·素履以往+课件-2025-2026学年高三上学期开学第一课主题班会
- 2025秋人教版英语八年级上Unit 1 全单元听力材料文本及翻译
- 急性胰腺炎护理小讲课
- 电站安全急救课件
- 新型医药销售外包(CSO)行业跨境出海项目商业计划书
- 口腔诊室6S管理
- 临期保持食品管理制度
- 义务教育化学课程标准(2022年版)
- 旅游景区反恐管理制度
评论
0/150
提交评论