单片机课程设计-对外部脉冲计数及出租车计费系统的设计1.doc_第1页
单片机课程设计-对外部脉冲计数及出租车计费系统的设计1.doc_第2页
单片机课程设计-对外部脉冲计数及出租车计费系统的设计1.doc_第3页
单片机课程设计-对外部脉冲计数及出租车计费系统的设计1.doc_第4页
单片机课程设计-对外部脉冲计数及出租车计费系统的设计1.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

电气与信息工程学院湖南工业大学课程设计任务书 20142015学年第 1 学期 电气与信息工程 学院(系、部) 电子信息 专业 1203 班级课程名称: 单片机应用系统 设计题目: 对外部脉冲计数及出租车计费系统的设计 完成期限:自 2014 年 12 月 27 日至 2015 年 1 月 4 日共 2 周内容及任务1.1 外部脉冲自动计数,自动显示:(1)设计255计数器:0255计数,计满后自动清0,重新计数(在数码管中显示)。(2)设计50000计数器:050000计数,计满后自动清0,重新计数(在数码管中显示)。1.2 设计一个出租车计费系统:起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后4位数码管显示价钱(角,元,十元,百元)1.3* 长短按键的设计(附加题)系统从000开始,一个按键若短按一下(0.5s以内),则个位数加1;如果长按2s不放,则个位数按步长0.2s快速进满后,十位数按步长0.5s加1;加到100则停止并长时间显示。注:要求首先采用PROTEUS完成单片机最小系统的硬件电路设计及仿真;程序仿真测试通过后,再下载到单片机板上进行硬件调试。进度安排起止日期工作内容2014. 12.27讲述设计内容及基本原理2014.12.27-2014.12.29进行系统的设计2014.12.30-2015.1.4进行系统的调试主要参考资料1 刘苗生、潘宗预.单片机测控系统设计.中国物质出版社,2006年2 周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真M .北京航天航空大学出版社,2006指 导 教 师 (签字): 年 月 日系(教研室)主任(签字): 年 月 日单片机应用系统课程设计说明书起止日期:2014年12月27日至2015年1月4 日姓 名: 联想组 员:班 级:电子信息 1203班学 号:1240172成 绩: 指导老师: 电气与信息工程学院2015年 1 月 5 日一、设计任务:1.1 外部脉冲自动计数,自动显示1.1.1设计一个255计数器:0255计数,计满后自动清0,重新计数(在数码管中显示)。1.1.2设计一个50000计数器:050000计数,计满后自动清0,重新计数(在数码管中显示)。1.2 设计一个出租车计费系统 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)注:要求首先采用PROTEUS完成单片机最小系统的硬件电路设计及仿真;程序仿真测试通过后,再下载到单片机实训板上执行。1.3长短按键的设计(附加题)系统从000开始,一个按键若短按一下(0.5s以内),则个位数加1;如果长按2s不放,则个位数按步长0.2s快速进满后,十位数按步长0.5s加1;加到100则停止并长时间显示。二、单片机最小系统硬件资源介绍 STC89C52RC单片机; 8位共阴极数码管; 段码驱动器74HC573; 4路独立式按键; ISP下载接口(In system program,在系统编程); ISP下载线。1. STC89C52RCSTC89C52RC单片机8K字节程序存储空间;512字节数据存储空间;内带2K字节EEPROM存储空间;可直接使用串口下载;8K字节程序存储空间;256字节数据存储空间。(1)增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.(2)工作电压:5.5V3.3V(5V 单片机)/3.8V2.0V(3V 单片机)(3)工作频率范围:040MHz,相当于普通8051的080MHz,实际工作频率可达48MHz;(4)用户应用程序空间为8K字节;(5)片上集成512字节RAM;(6)通用I/O口(32个),复位后为:P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻,设计电路时需要注意这点。共3个16位定时/计数器,分别为T0,T1,T2。STC89C52引脚图如图1所示,其主要芯片功能如下所示。VCC:电源电压GND:接地P0口:P0口是一组8位双向I/O口。P0口即可作地址/数据总线使用,又可以作为通用的I/O口使用。P1口:P1是一个带内部上拉电阻的8准位双向I/O口,P1作为通用的I/O口使用。P2口:P2是一个带有内部上拉电阻的8 位准双向I/O口 P3口:P3口是一组带有内部上拉电阻的8 位准双向I/0口RST:复位输入程序储存允许()输出是外部程序存储器的读选通信号/VPP:外部访问允许XTAL1:振荡器反相放大器及内部时钟发生器的输入端XTAL2:振荡器反相放大器及内部时钟发生器的输:出端图1 STC89C52引脚图2. 数码管显示电路显示电路既可以选用液晶显示器,也可以选用数码管显示。我采用的是数码管显示电路。用八个共阴极数码管显示,LED是七段式显示器,内部有7个条形发光二极管和1个小圆点发光二极管组成,根据各管的亮暗组合成字符。共阴极数码管的码表为如表1所示。表1 共阴数码管码表01234567890x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f在用数码管显示时,我们有静态和动态两种选择,静态显示程序简单,显示稳定,但是占用端口比较多;动态显示所使用的端口比较少,可以节省单片机的I/O口。LED数码管的显示原理:数码管有段选与位选两个使能端,由于采用共阴极数码管,要把数码管点亮,就必须给位选选通,至于显示什么数字,只需给段选输入数据即可。通过给52单片机P0口送入初始值,并用P0口来控制段选位,P2.6、P2.7口来控制位显来实现动态显示,来显示各灯所在状态的显示时间。在设计中,我们采用LED数码管动态显示,用P0口驱动显示。由于P0口的输出级时,数码管显示的亮度不够,根据以前学习的知识及学长们的经验,只需给P0口强势上拉10K排阻,经实验验证,P0口上拉10K排阻后,数码管显示较亮。电路图如图2所示。其中单片机P0口与数码管各引脚之间的连接关系分别为:P0.0-aP0.1-bP0.2-cP0.3-dP0.4-eP0.5-fP0.6-gP0.7-Dp图2 数码管显示电路其中a,b,c,d,e,f,g,Dp在数码管上的位置如图3所示。图3 数码管3. 74HC57374HC573的八个锁存器都是透明的D 型锁存器,当使能(G)为高时,Q 输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工作寄存器。芯片引脚如图4所示。图4 74HC573引脚图三、设计思路1、设计一个255计数器:0255计数,计满后自动清0,重新计数(在数码管中显示)。设计思路:255可用8位二进制数表示,故本设计可直接采用可以自动装载初值的计数器T1模式二进行计数。然后对TL1的内容进行相应的二进制-十进制转换:首先TL1的内容除以64H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。接着将相应的十进制数进行译码,并在LED数码管上显示出来。每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。流程图如图5所示。图5 255计数程序流程图2、设计一个50000计数器:050000计数,计满后自动清0,重新计数(在数码管中显示)。设计思路:通过外部中断循环次数判断实现计数。20H-24H分别存放个、十、百、千、万位。通过向每个内存单元自增一,判断每个数是否已经增至10,如果增至10立即转向十位,以此类推,但是由于是50000计数,所以在最后在万位到5的时候,我要限制其不再增至10,达到5便清零,最后便得到了结果所需。其中程序用了查表来实现数码管的显示。流程图如图6所示。图6 50000计数程序流程图3、设计一个出租车计费系统: 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)设计思路:首先由按键控制的外部中断脉冲来模拟出租车车轮走过的里程,每按一次P3.3按键产生一个脉冲,1个脉冲当作100m。自动计费模块会按照不同的计费标准自动调节计费。计费标准设定模块包挂起步费、单位里程费、低速行驶等待时间设定部分。设定好的数值分别送到自动计费模块、计时模块和计程模块。按下电源开关后开始自动计费。统计模块统计的各项数据将通过LED显示模块,在最终界面上显示行驶路程和总费用。难点主要在于计费金额的显示,可将初值置为50,其中十位调用带点的字型码,即显示05.0,超过1个脉冲,里程加1,金额加8,由于十位是带有小数点,即可实现金额加0.8元。流程图如图7所示。图7 出租车计费系统程序流程图4、长短按键的设计(附加题)设计思路:所有的主要程序都在等待按键释放的时候进行。在没有长按功能时,由于使用的是定时器中断数码管扫描,所以等待释放所做的工作就是等待。我们利用等待的这个时间来做一些事情,判断长短按键并执行对应的动作。同时定义一个临时变量用于计数按键的时长,这里使用key_press_num,检测到这个数值大于200,也就是2s时,我们认为按键进入长按动作,此时进入长按键处理程序,首先清零计数变量,以待下次使用,再次检测按键是否按下,如果按下,执行长按程序,否则退出。此程序中长按键的动作是快速加减数值,没有这个按键的时候,按一次按键值加减一次,如果数值比较大,调节占用的时间会比较长,进入长按键后,可以快速对数值进行连加或者连减动作,并实时调用显示处理。流程图如图8所示。图8 长短按键的设计程序流程图四、设计内容1、0255数码管计数(1)程序清单显示子程序:DISPLAY: MOV A,TL1MOV B,#100DIV ABMOV BAI,AMOV A,BMOV B,#10DIV ABMOV SHI,AMOV GEE,B MOV DPTR,#TABMOV R0,#3MOV A,BAI ;输入百位MOVC A,A+DPTRMOV P0,ASETB P2.6NOPCLR P2.6MOV P0,#0DFHSETB P2.7NOP ACALL DELAY MOV P0,#0FFHCLR P2.7MOV A,SHI ;输入十位MOVC A,A+DPTRMOV P0,ASETB P2.6NOPCLR P2.6MOV P0,#0BFHSETB P2.7NOP ACALL DELAY MOV P0,#0FFHCLR P2.7MOV A,GEE ;输入个位MOVC A,A+DPTRMOV P0,ASETB P2.6NOPCLR P2.6MOV P0,#7FHSETB P2.7NOP ACALL DELAYMOV P0,#0FFHCLR P2.7 RET(2)PROTEUS仿真图图9 255计数器PROTEUS仿真图(3)调试结果图10 255计数器调试结果2、050000数码管计数(1)程序清单显示子程序和255计数器相差无几,这里只列出中断服务程序。中断服务程序:INTO: LCALL DELAY1PUSH ACCMOV A,WANCJNE A,#5,LOOP1MOV WAN,#0SJMP LOOP2 LOOP1: INC GEELOOP2: MOV A,GEECJNE A,#10,GOOMOV GEE,#0INC SHIMOV A,SHICJNE A,#10,GOOMOV SHI,#0INC BAIMOV A,BAICJNE A,#10,GOOMOV BAI,#0INC QIAMOV A,QIACJNE A,#10,GOOMOV QIA,#0INC WAN GOO: POP ACCRETI DELAY: MOV R3,#80 DJNZ R3,$RETDELAY1:MOV R1,#2LOOP4:MOV R0,#255LOOP3:NOPNOPDJNZ R0,LOOP3DJNZ R1,LOOP4RET(2)PROTEUS仿真图图11 50000计数器仿真图(3)调试结果图12 50000计数器调试结果3、出租车计费系统(1)程序清单延时子程序:void delay() for(j=0;j25;j+);显示子程序:void display() P2 = 0x01; /选定初始位for(i = 0; i 8; i+) P1 = (i = 1|i=6)?NumCounti&0x7f:NumCounti;delay(); /固定小数点位置P2 = 1; /位左移价格的算法程序:int Compute_Money(int Far) Money = (Far 2000)? 5:5+(Far - 2000)/500)+1)*0.8;return Money*10; /返回价格数 /思路:先返回10倍价格,再固定小数点value_Count(int Far)Get_money = Compute_Money(Far); /调用算法程序Count0 = Get_money%10; /价钱的小数位Count1 = Get_money%100/10; /价钱的个位Count2 = Get_money%1000/100; /价钱的十位Count3 = 0; /四五位不显示Count4 = 0; Count5 = Far%1000/100; /公里制小数位Count6 = Far%10000/1000; /公里制个位Count7 = Far%100000/10000; /公里制十位(2)PROTEUS仿真图图13 出租车计费系统仿真图(3)调试结果图14 出租车计费系统调试结果4、长短按键的设计(附加题)(1)程序清单位码:unsigned char code HEYAO_WeiMa=0xf7,0xef,0xdf,0xbf,0x7f;/之前调试一直出问题,找到最后才发现是这里位码出问题了;分别对应相应的数码管点亮。主函数:void main (void)unsigned char num=0,key_press_num; P35=0; /这是为了关闭开发板上的点阵实际应用去掉KEY_ADD=1; /按键输入端口电平置高KEY_DEC=1;Init_Timer0();while (1) /主循环if(!KEY_ADD) /如果检测到低电平,说明按键按下DelayMs(10); /延时去抖,一般10-20msif(!KEY_ADD) /再次确认按键是否按下,没有按下则退出while(!KEY_ADD)key_press_num+;DelayMs(10); /10x200=2000ms=2s if(key_press_num=200) /大约2skey_press_num=0; /如果达到长按键标准 /则进入长按键动作while(!KEY_ADD) /这里用于识别是否按/键还在按下,如果按/下执行相关动作,否则退出if(num100) /加操作num+;/即时把显示数据处理,如果去掉下面2/句处理信息,实际上看不到渐变效果,/而是看到跳变效果/用户可以自行屏蔽测试/分解显示信息,如要显示68,则68/10=6 68%10=8TempData0=HEYAO_DuanManum/100; TempData1=HEYAO_DuanManum%100/10;TempData2=HEYAO_DuanManum%100%10;DelayMs(50);/用于调节长按循环操作/的速度,可以自行调整此值以便达到最佳效果key_press_num=0;/防止累加造成错误识别if(num100) /加操作num+;/分解显示信息,如要显示68,则68/10=6 68%10=8 TempData0=HEYAO_DuanManum/100; TempData1=HEYAO_DuanManum%100/10;TempData2=HEYAO_DuanManum%100%10;/ Display(0,8); /显示全部8位/主循环中添加其他需要一直工作的程序(2)PROTEUS仿真

温馨提示

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

评论

0/150

提交评论