ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:294.98KB ,
资源ID:19624181      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19624181.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机出租车计价器课题设计c语言编写文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机出租车计价器课题设计c语言编写文档格式.docx

1、图2.1电路系统构成框图主控芯片使用51系列AT89C52单片机,采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位COMS微处理芯片,市场应用最多。时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片DS1302。采用DS1302作为主要计时芯片、可以做到计时准确。更重要的是,DS1302可以在很小的电流的后备电源(2.55.5V电源,在2.5V时耗电小于300nA)下继续计时,并可编程选择多种充电电流对后备电源进行慢速充电,可以保证后备电源基本不耗电。采用串行数据传输,与单片机硬件连接简单,如果使用时

2、钟芯片DS12887,将采用并行数据传输,占用更多的硬件资源。因此为节省单片机端口,时钟芯片采用DS1302。它们可以检测磁场及其变化,可在各种与磁场有关的场合中使用。霍尔器件以霍尔效应为其工作基础。霍尔器件具有许多优点,它们的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高(可达1MHZ),耐振动,不怕灰尘、油污、水汽及盐雾等的污染或腐蚀。活儿现行器件的精度高、线性度好;霍尔开关器件无触点、无磨损、输出波形清晰、无抖动、无回跳、无知重复精度高(可达Im级)。采用了各种步长和保护措施的霍尔器件的工作温度范围宽,可达-55摄氏度150摄氏度。数据显示模块采用的是LED数码管显示,LCD

3、虽然也能实现显示功能,但在距屏幕1米之外就无法看清数据,不能满足要求,而且在白天其对比度也不能满足要求,因此建议采用LED数码管显示。数码管总共用了12个,其中第一行显示小时和分钟,第二行第一个显示单价,后面3个显示里程数,最后一行显示总价。 按键控制模块使用了3个脉冲开关,其中一个开关负责换位,另一个负责改数,第三个按键负责切换至等待时间。三 系统硬件设计3.1电源电路因为出租车上的电压时12V,而芯片所需供电电压是5V,所以选择LM7805的经典电路电源电路完成12V转5V的目的。电源电路图如下图3.1所示:图3.1电源电路图3.2单片机的最小系统单片机最小系统采用的是STC89C54芯片

4、,STC89C54是一种低功耗、高新能CMOS 8为微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51铲平指令和引脚完全兼容。偏上FLASH允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有平桥的8为CPU何在系统可编程Flash,使得STC89C54为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C54具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16为定时器/计数器,一个6向量2级终端结构,全双工串行口,片内晶振及时钟电路。另外,AT89S5

5、2可降至0HZ静态逻辑操作,支持2中软件可选择节点模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、终端继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。单片机最小系统电路图如下图3.2所示:图3.2单片机最小系统电路图3.3 DS1302时钟电路若采用单片机计时,一方面需要采用计数器,占用阴间资源,另一方面需要设置终端、查询等,同样耗费单片机的资源,并且使用单片机的时钟误差比较大,当长时间使用后会,会出现很大错误,而在系统中采用DS1302则能很好的解决这个问题。DS1302时钟电路图如图3.3所示:图3.3 DS1

6、302时钟电路图3.4显示电路的设计在显示模块需要对时间、单价、总价、路程、等待时间进行显示,采用的是数码管,数码管总共用了12个,其中第一行显示小时和分钟,第二行第一个显示单价,后面3个显示里程数,最后一行显示总价。显示电路图(一个数码管)如下图3.4所示:图3.4 显示电路图3.5按键控制的设计 按键的设置是为了能够手动更改时间和单价,还有就是手动切换到等待时间的地方,按键采用的是脉冲按键。按键设置电路图如图3.5所示:图3.5按键控制电路图3.6掉电保护掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。掉电保护的芯片较多,如AT24C02 是ATMEL 公司的2KB 字节的电

7、可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8 脚的DIP 封装,使用方便。掉电保护电路图如下图3.6所示:图3.6 掉电保护电路图3.7复位电路复位功能采用的是MAX813L芯片。MAX813L是具有监控电路的微处理芯片,它具有4个功能:1具有独立的看门狗计时器,如果看门狗输入在1.6秒内无变化,就会产生看门狗输出;2掉电或电源电压低于1.25V时,产生掉电输出;3上电时能自动产生200ms宽的复位脉冲;4具有人工复位功能,当人工复位端输入低电平时,产生复位信号输

8、出。复位电路如图3.7所示:图3.7复位电路图四、系统软件设计4.1主程序设计程序的难度主要就是在数码管的显示和外部脉冲的采集部分,分别采用74LS273芯片对数码管进行段选,使数码管显示对应的数,另外使用74LS154对数码管进行位选,选择哪个数码管亮,采用的是动态显示。还有外部脉冲的收集,需要对里程数进行显示,所以必须要先进行脉冲的采集。程序流程图如图4.1所示:图4.1程序流程图4.2 子程序设计4.2.1 DS1302子程序4.2.1 DS1302子程序流程图显示单价、总价、路程、时间等数据,循环扫描进行显示。(如果在一分钟内没有脉冲,开启终端,显示秒分子程序。DS1302子程序流程图

9、如4.2.1所示:开始写入实参数addrCE=1 SCLK=0I=0取ADDR低位Addr右移一位Sclk上升沿是否是上升沿Y等待上升沿Ni+;i8 ?结束图4.2.1 DS1302子程序流程图4.2.2 显示子程序void sett() /显示等待时间及单价、总价、路程子程序TAB0=Read1302(0x83)/10;TAB1=Read1302(0x83)%10;TAB7=Read1302(0x81)/10;TAB6=Read1302(0x81)%10;TAB8=3;TAB2=Coo/100;TAB3=Coo/10%10;TAB4=Coo%10;if(TAB4 12 ?图4.2.2 显示子

10、程序流程图4.3 修改时间子程序修改TAB数组里的前5位数据,分别为小时、分钟、单价.五、调试及性能分析5.1调试步骤5.1.1硬件调试错误1:LM7805封装时2脚和3脚弄混解决办法:1、将LM78052脚和3脚手工矫正 2、利用飞线重新手工焊接错误2:进行原理图设计时,电源网络标号不一致(74LS14、74HC154电源网络标号与其他的不一致)利用飞线,将错误的网络标号和正确的网络标号进行手工焊接。错误3:1K*9排阻焊反手工拔出,重新焊接错误四:在焊接时,由于焊接时间过长,造成三极管烧坏手工拔出重新焊接错误5:有些器件焊接次数过于频繁,造成印刷板上焊盘和导线脱落利用飞线将对应的网络标号进

11、行连接5.1.2软件调试:在软件编程时,应充分利用原理图,不然会在编程时导致硬件与软件不能对应起来,使程序无法实现功能,还有在编程时子程序的名称应与其功能对应,否则会使别人在读程序的时候不能及时理解程序含义,而且在软件调试时逻辑一定要清晰,不然在找错时会浪费很多时间,5.2性能分析通过软件调试后,最终能实现实时时钟显示、里程数的显示、单价的显示、总价的显示、时间的调整、等待时间的显示。时间显示模块使用的是时钟芯片DS1302,它精确度高,功能强大,使用它能降低单片机的负荷,减小误差。里程数收集模块由于条件限制,所以我们使用一个外部脉冲信号作为里程数的收集,用一个脉冲表示一公里,最大的里程数可达

12、256公里。电源模块部分由于经验问题,没有在PCB板上加上串口和USB口,使得电源不稳,只能用导线在外部加一个5V电压,而且由于7805的封装引脚分配有错误,导致在最初调试的时候芯片烧坏,所以最终放弃7805的电压转换,而直接使用+5V电压。显示模块使用LED数码管,通过软件调试,12个数码管能显示时间、总路程、单价、总价及等待时间的自动切换。六、心得体会由于初次进行硬件电路设计,出现了很多简单又致命的错误(见硬件调试)。5个错误在一块线路密集并且已经焊好器件的电路板上无疑是大海捞针。像器件焊反之类的错误还比较好排除。而器件损坏和网络标号不一致这样的错误就很让人头疼。仅仅只是网络标号不一致这个

13、错误就让我们整整测试了一天才发现。所以下次设计硬件电路的时候一定要找几个人仔细检查电路图,不能再轻易犯这样的错误。像印刷板上导线断裂这样的错误也比较难找。而这种错误往往是焊接时温度过高或者是焊接过于频繁造成的,所以以后焊接的时候一定不会再犯这样的错误了。而且由于当初设计USB口和串行口,为软件调试造成了很大的麻烦(每天不停地拔单片机)。再做学生实验的时候不能太过于追求趋近于真实产品。过于追求真实会让你的实验过程变得极其困难。真的是后悔不已。当初想利用以前做的单片机最小系统开发板上的串行口进行程序下载,但是到真正实行的时候在发现并不是那么回事。由于对单片机的要求达不到,虽然理论上天衣无缝,但实际

14、上根本不可能实现。虽然出租车上提供的电源是12V,即便在实验板上设计了电源电路也应该再加上一个USB口提供5V电源。因为除了在实验室其他地方是并不太容易找到12V电源。由于对USB口的省略,对软件调试工作造成了很大的麻烦。七、参考文献1 徐维祥、刘旭敏. 单片微型机原理及应用. 大连:大连理工大学出版社,1996戴胜华,蒋大明单片机原理与应用北京:清华大学出版社2005李刚新概念单片机教程天津:天津大学出版社2004王宗和单片机实验与综合训练北京高等教育出版社 2000八、附录附录1、程序清单#includereg51.h#include intrins.h#define uchar unsi

15、gned charuchar tmp;uchar det;uchar Coo;int m;int f;uchar code DispTab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0; /字形码uchar TAB24;sbit P00=P00;sbit P01=P01;sbit P02=P02;sbit P03=P03;sbit P04=P04;sbit P05=P05;sbit P10=P10;sbit P27=P27;sbit P14=P14;sbit SCLK =P13; /*DS1302的SCLK脚脉冲*/sbit DI

16、O=P12; /*DS1302的IO脚数据*/sbit CE=P11; /*DS1302的RST脚片选*/sbit P15=P15;sbit P23=P23;sbit P21=P21;sbit P16=P16;sbit P35=P35;sbit P22=P22;sbit P17=P17;sbit P20=P20;sbit P26=P26;sbit P24=P24;sbit ACC7=ACC7;sbit ACC0=ACC0;void time() interrupt 1 /等待计时中断int i,j;TH0=0x15;TL0=0xa0;i+;if(i=100)i=0;j+;if(j=10)j=0

17、;f=Coo;void mDelay(unsigned int Delay) /延时子程序 unsigned int I;for(;Delay0;Delay-) for(I=0;I i- ) /循环8次移位 temp = addr; DIO = (bit)(temp&0x01); /每次传输低字节 addr = 1; SCLK = 0; /右移一位 SCLK = 1; /发送数据 i- ) temp = dat; dat SCLK = 1; CE = 0;unsigned char Read1302 ( unsigned char addr ) /数据读取子程序 unsigned char i

18、,temp,dat1,dat2; /读取数据 ACC7=DIO; ACC=1; SCLK = 0; dat1=ACC; dat2=dat1/16; /数据进制转换 dat1=dat1%16; /十六进制转十进制 dat1=dat1+dat2*10; return (ACC);void Initial() /初始化DS1302 Write1302 (0x8E,0x00); /禁止写保护 Write1302 (0x80,0x00); /秒位初始化 Write1302 (0x82,0x20); /分钟初始化 Write1302 (0x84,0x10); Write1302 (0x86,0x23);

19、Write1302 (0x88,0x05); Write1302 (0x8c,0x10); /小时初始化 Write1302 (0x8E,0x80); /允许写保护void set() /修改时间 Write1302 (0x82,TAB7*16+TAB6); Write1302 (0x84,TAB0*16+TAB1);void ss()/显示子程序int i;uchar *p;p=TAB;for(i=0;i1;i+)det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=0;P16=0;P17=0;p+;P14=1;P15=1;P16=1;P17=1;TAB9=Coo/100*TAB8+Coo%100*TAB8/

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1