计价器计价器系统设计.doc

上传人:土8路 文档编号:10527397 上传时间:2021-05-21 格式:DOC 页数:14 大小:767KB
返回 下载 相关 举报
计价器计价器系统设计.doc_第1页
第1页 / 共14页
计价器计价器系统设计.doc_第2页
第2页 / 共14页
计价器计价器系统设计.doc_第3页
第3页 / 共14页
计价器计价器系统设计.doc_第4页
第4页 / 共14页
计价器计价器系统设计.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《计价器计价器系统设计.doc》由会员分享,可在线阅读,更多相关《计价器计价器系统设计.doc(14页珍藏版)》请在三一文库上搜索。

1、目 录一设计目标 2 二设计要求 2三元器件 2四功能模块设计 3 五软件设计 5六电路组装与调试 6七总结 7八附录 8一、设计目的本设计采用AT89S52单片机为主控器,以红外对管测转速,对实际里程的模拟,实现对出租车的多功能的计价设计,并采用AT24C01实现在系统掉电的时候保存单价等信息,输出采用8段数码显示管。本电路设计的计价器不但能实现基本的计价,而且还能根据白天,黑夜和中途等待来调节单价。以实现用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能的目的。二、设计要求(1)设计指标 出租车计价器根据乘客乘坐汽车行驶距离和等候时间

2、的多少进行计价,并在行程中同步显示车费值。从起步价开始,当汽车程行驶未满3公里时,均按起步价计算。过3公里后,实现每1公里单价收费,中间遇暂停时,计程数不再增加,开始计时收费,测距收费和测时收费的和便构成了一位乘客的车费。同时,白天和夜晚价格不同,可以进行切换。白天单价、夜晚单价、等待单价和起步价格都可通过独立键盘进行调节。(默认起步价为10元/3公里,里程单价白天为2元/公里,夜晚为3元/公里,等待计时单价为0.5元/5分钟)(2)设计要求 画出电路原理图(或仿真电路图); 元器件及参数选择; 电路仿真与调试; 实物图。(3)制作要求:自行装配和调试,并能发现问题和解决问题。(4)编写设计报

3、告,写出设计与制作的全过程,附上有关资料和图纸,有心得体会。三、元器件AT89S52单片机1块11.0592M时钟晶体1个22P瓷片电容 2个轻触开关5个22uF电解电容 1个1K电阻8个4.7K电阻2个9015三极管8个共阳四合一八段数码管2AT24C010集成块1块Max232USB转串口电机红外对管导线若干四、功能模块1、AT89S52简介AT89S52 8 位单片机是 MSC-51系列产品的升级版, 有世界著名半导体公司 ATMEL 在购买 MSC-51设计结构后,利用自身优势技术(掉电不丢数据)闪存 生产技术对旧技术进行改进和扩展,同时使用新的半导体生产工艺,最终得到成 型产品.与此

4、同时,世界上其他的著名公司也通过基本的 51 内核,结合公司自身 技术进行改进生产,推广一批如 51F020 等高性能单片机. AT89S52 片内集成 256 字节程序运行空间,8K 字节 Flash 存储空间,支持最 大 64K 外部存储扩展.根据不同的运行速度和功耗的要求,时钟频率可以设置在 0-33M 之间.片内资源有 4 组 I/O 控制端口,3 个定时器,8 个中断,软件设置低 能耗模式,看门狗和断电保护.可以在 4V 到 5.5V 宽电压范围内正常工作.不断 发展的半导体工艺也让该单片机的功耗不断降低.同时,该单片机支持计算机并 口下载,简单的数字芯片就可以制成下载线,仅仅几块钱

5、的价格让该型号单片机 畅销 10 年不衰.根据不同场合的要求,这款单片机提供了多种封装,本次设计根 据最小系统有时需要更换单片机的具体情况,使用双列直插 DIP-40 的封装. DIP-40 封装 89S52 引脚图 2、模拟里程原理图:电路图:红外对接管每受到一次发射管发来的红外,就产生一次中断,计数器加1,计数超过1000次时,里程加1,计数清零,从新开始计数.3、掉电保护模块AT24C02存储单元AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过

6、IIC总线接口进行操作,有一个专门的写保护功能。功能简介AT24C02支持IC,总线数据传送协议IC,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上。芯片图封装图和引脚功能管脚名称功能管脚名称功能A0 A1 A2器件地址选择SDA串行数据/地址SCL串行时钟WP写保护Vcc+1.8V 6.0V 工作电压Vss地存储单元电路原理图4、键盘

7、调整单元当单价等信息需要进行修改时,就要用到键盘进行修改。由于调节信息不多,故采用4个独立键盘即可,分别实现清零、切换、增大、减小和功能等作用。键盘调整单元接线图S1:接P1.0口,对上一次的计费进行清零,为下次载客准备S2:接P1.1口,实现白天和夜晚单价的切换;当功能键S4按下时,S2可对数据进行增大。S3:接P1.2口,当功能键S4按下时,S3可对数据进行减小。S4:接P1.3口,按1次,进入调整白天单价;按2次,进入调整夜晚单价;按3次,进入调整等待单价;按4次,进入调整起步价;按5次,返回。5、显示单元显示单元由7个8段共阳数码管组成,采用动态扫描进行显示。前三个数码管分别接P3.0

8、、P3.1和P3.2,用于显示总金额;中间两个分别接P3.4和P3.5,用于显示里程;后边两个分别接P3.6和P3.7,用于显示单价。数码管显示图五、软件设计(1)系统主程序 在主程序模块中,需要完成对各参量和接口的初始化、出租车起价和单价的初始化以及中断、计算、循环等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。当汽车运行起来时,就启动计价,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。若已超过,则根据里程值、每公里的单价数和起步价数来计

9、算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待价格加到总金额里,然后将总金额、里程和单价送数码管显示出来。程序流程如图(2)里程计数中断程序 每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1000次时,进入里程计数中断服务程序中,里程变量加一。主函数中总金额也相应地变化。(3)中途等待中断程序 在中途等待中断程序中,每1ms产生一次中断,将当前里程值送入某个缓存变量,每5分钟将缓存变量中的值和当前里程值比较,当汽车停止,霍尔传感器5分钟没有输出信号,当前里程值和缓存变量内的值相同,

10、则进入等待计时,每5分钟记一次价格。(4)计算程序 计算程序根据里程数分别进入不同的计算公式。如果里程大于3公里,则执行公式:总金额=起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:总金额=起步价+等待时间*等待单价。(5)显示程序 显示程序利用定时器每1ms产生一次中断,相应变量置位,点亮一个数码管,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示。(6)键盘程序 键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦右按键按下,便转向相应的子程序处理,处理结束再返回。流程图如图键盘程序流程图六、电路的

11、组装与调试焊接电路板,注意元器件按先小后大的顺序,一面带来不便。将数码管安装到事先焊好的插槽上,然后,对照电路图确定好各芯片所在的位置,按照对应的引脚插到插槽上,最后接好合适的电源。调试时按照以下步骤进行调试:n 调试动态显示电路。查看数码管是否显示正常。n 调试AT24C02存储单元。尝试写入读出指定数据看是否符合要求。n 调试键盘控制电路。结合程序调试按键抖动,查看是否符合程序要求。n 整体调试。结合实际效果对程序进行优化。七、总结 在课程设计的过程中,还是碰到了许多的问题。比如,对于数码管动态扫描显示和键盘的延时防抖的综合编程不能较好地解决;对于代码的前后顺序及调用掌握得还不够好;对于一

12、些相关的应用软件没能熟练掌握。通过反复调试和修改,最终还是把问题解决了。通过这次课程设计,我最大的收获就是自己的动手能力得到了很大的锻炼,也充分体会到了学以致用的重要性,必须亲自去试着实践,才能加深对单片机的应用有了更深的了解,才能在解决问题的过程中掌握知识。附件 1原理图附件 2系统源程序#include#include #define uchar unsigned char#define uint unsigned int#define delayNOP(); _nop_();_nop_();_nop_();_nop_();_nop_();uchar code table=0xC0,0xF

13、9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; sbit exter=P33; /外部中断sbit key0=P10; /清零sbit key1=P11; /切换/+sbit key2=P12; /-sbit key3=P13; /功能键 sbit P3_0=P30; /数码管各位控制sbit P3_1=P31;sbit P3_2=P32;sbit P3_4=P34;sbit P3_5=P35;sbit P3_6=P36;sbit P3_7=P37; sbit SDA=P23; /IIC引脚sbit SCL=P22;uint inter,aa,bb,tem

14、p,temp1;uint zongjine,licheng,dengdai;uint key3num,qiehuantemp,delaytemp;uchar danjia1,danjia2,danjia3,danjia,qibu; void delay(unsigned char t) unsigned char j,i; for(i=0;it;i+) for(j=0;j255;j+);void start() /IIC开始位 SDA = 1; SCL = 1; delayNOP(); SDA = 0; delayNOP(); SCL = 0; void stop() / IIC停止位 SDA

15、 = 0; delayNOP(); SCL = 1; delayNOP(); SDA = 1; void respons() /IIC应答位 uchar i; SCL=1; delayNOP(); while(SDA=1)&(i250) i+; SCL=0; delayNOP(); 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=

16、date; for(i=0;i8;i+) temp=temp1; SCL=0; delayNOP(); SDA=CY; delayNOP(); SCL=1; delayNOP(); SCL=0; delayNOP(); SDA=1; delayNOP();void write_data(uchar addr, uchar date) / 在指定地址addr处写入数据date start(); write_byte(0xa0); respons(); write_byte(addr); respons(); write_byte(date); respons(); stop(); uchar r

17、ead_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 display(uint zongjine0,uint licheng0,uint danjia0) uchar z; uint jbai,jshi,jge,lshi,lge,dshi,dge; jbai

18、=zongjine0/100; jshi=zongjine0%100/10; jge=zongjine0%100%10; lshi=licheng0/10; lge=licheng0%10; dshi=danjia0/10; dge=danjia0%10; for(z=0;z7;z+) P3=0xff; switch(z) case 0:P3_0=0;P0=tablejbai;break; case 1:P3_1=0;P0=tablejshi&0x7f;break; case 2:P3_2=0;P0=tablejge;break; case 3:P3_4=0;P0=tablelshi;brea

19、k; case 4:P3_5=0;P0=tablelge;break; case 5:P3_6=0;P0=tabledshi&0x7f;break; case 6:P3_7=0;P0=tabledge;break; delay(3); void keyscan() /键盘扫描 if(key3=0) /功能键调节 delay(5); if(key3=0) key3num=1; while(!key3); delay(5); while(!key3); while(key3num) if(key3num=1) /调白天单价 if(key1=0) delay(5); if(key1=0) danji

20、a1+; if(danjia1=100) danjia1=0; while(!key1); delay(5); while(!key1); if(key2=0) delay(5); if(key2=0) danjia1-; if(danjia1=-1) danjia1=99; while(!key2); delay(5); while(!key2); display(1,0,danjia1); if(key3num=2) /调夜晚单价 write_data(1,danjia1); if(key1=0) delay(5); if(key1=0) danjia2+; if(danjia2=100)

21、 danjia2=0; while(!key1); delay(5); while(!key1); if(key2=0) delay(5); if(key2=0) danjia2-; if(danjia2=-1) danjia2=99; while(!key2); delay(5); while(!key2); display(2,0,danjia2); if(key3num=3) /调等待单价 write_data(2,danjia2); if(key1=0) delay(5); if(key1=0) danjia3+; if(danjia3=100) danjia3=0; while(!k

22、ey1); delay(5); while(!key1); if(key2=0) delay(5); if(key2=0) danjia3-; if(danjia3=-1) danjia3=99; while(!key2); delay(5); while(!key2); display(3,0,danjia3); if(key3num=4) /调起步价 write_data(3,danjia3); if(key1=0) delay(5); if(key1=0) qibu+; if(qibu=100) qibu=0; while(!key1); delay(5); while(!key1);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1