出租车计费系统设计_第1页
出租车计费系统设计_第2页
出租车计费系统设计_第3页
出租车计费系统设计_第4页
出租车计费系统设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

毕业论文(设计)电信学院2009级电子信息工程专业题目出租车计费系统设计学生 宋雷 学号 200907301151指导教师周尚万2013年6月1日 摘要 随着测量还有控制技术的发展与应用,以单片机为核心的控制系统的研发与应用在很大程度上提高了生产生活中对汽车测速水平的控制。本文通过红外线测速测量车轮的转速,将所测量得到的信息传输到单片机AT89C51进行计数,从而判断出租车的行驶,停止,倒车等运行状态。最后的结果经过译码器译码然后通过4位键盘的切换,最终在8位LCD显示出相应的速度,路程,费用等有用信息。本文硬件包括红外线传感器及信号放大电路按键接入电路,显示电路;软件上采用C51语言编程。本文设计的系统基本能满足的出租车计费需要。关键词:at89c51单片机,红外线测速,放大电路,显示电路,出租车计费系统。 SummaryWith the measure, as well as the development and application of control technology, the development and application of microcontroller as the core control system has greatly improved the production life of the vehicle speed level control. By infrared gun to measure the speed of the wheel, as measured by the transmission of information to the microcontroller AT89C51 count, in order to determine the taxi driving, stop, reversing running. The final result decoder decodes and then through four keyboard to switch the final 8-bit LCD shows the corresponding speed, distance, fees and other useful information. This article hardware including infrared sensor and signal amplifier circuit button access circuit, display circuit; C51 programming language software. This design of the system to meet the basic needs of taxi meter.: AT89C51 microcontroller infrared speed amplifier circuit, display circuit, taxi billing system. 目录: 第一部分 实验目的,设计要求,单片机介绍1.1实验目的1.2 设计要求1.3 单片机介绍1.3.1主要特性:1.3.2管脚说明: 第二部分 硬件设计2.1.1测速模块2.1.2显示模块2.1.3复位模块2.1.4cpu及外设模块2.1.4.1存储器2.1.4.2输入输出端口2.1.4.3中断系统2.1.4.4定时器/计数器2.1.5A/D模块 D/A模块2.1.6键盘模块2.1.7系统总图 第三部分 软件设计 附录:软件设计第一部分 实验目的,设计要求,单片机介绍1.1实验目的利用主控制单片机at89c51,红外线传感器,led数码管,外围电路,信号放大器及数模还有模数转换电路设计出出租车计费系统。使用的器件:89c51单片机一块、8155接口芯片一片,74LS245驱动器一片,八段显示器若干、电阻若干、晶振一个、74LS164移位寄存器若干。1.2 设计要求1.2.1该系统的红外线测速部分能够在一般天气状况下正常运转;1.2.2该系统的单片机部分能够在一般的情况下正常显示出租车的时间,价钱,路程,速度等参数。1.3单片机介绍AT89C51是一种带4K字节闪烁可擦除可编程只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 1.3.1主要特性:与MCS-51 兼容4K节可编程闪烁存储器命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低耗的闲置和掉电模式片内振荡器和时钟电路1.3.2管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH ,p0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该被略微拉高。如果微处理器在外部执行状态禁止,置位无效。/PSEN:外部程序存储器的信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。 第二部分硬件设计 2.1.1测速模块该模块主要应用了测速的原理现代转速的有3个发展阶段1将反射纸贴在装置的盘上进行测量。2频闪式侧转速利用了频闪效应原理,首先,在需要测速的装置上做出明显的标记,档标准的装置转轴的转速与被测转速表的闪光相等或成一定的倍数关系时,转轴上的额将呈现停留不动的状态,此时,转速表的显示值将与频闪停留序数的乘积即为转速表的实测值。3磁电式转速表利用的是非电量电测的原理,它包括磁感应式,电脉冲式和电动式。该测量方法分为两类:接触式和非接触式两种。红外线侧转速属于非接触式,测速原理如下:红外线转速表采用的红外线探头分为式和反射式两种。直射式探头、发光管和受光管分别被放在被测物体的两边。发光管射出的直接照射到受光管上面,被测物体运动时会阻挡光线产生计数信号,这种探头经常用做光电计数器。反射式的探头、发光管和受光管被放在被测物体的同一侧。当探头接近时会接收到脉冲的红外线信号这样测量转速比较方便。 测量转速的探头,根据测量距离可以采用透镜系统,也可以不用透镜系统。当被测物体离开探头距离在15cm以内时,无须采用透镜。探头设计时可采用小功率发光管5GL和光敏受光管3DU5C。如图3-20所示的组装电路,其两管并排放置,两个管子的中心线夹角很小,使它们在1015cm远处相交。这种探头靠接近物体上漫反射回来的光线工作,对全黑色物体时,接收灵敏度很低,对白色物体和镜面反射体接收最灵敏,也能接收到其他颜色物体的反射光,但相应的探测距离要近些。 测量转速的探头经常用透镜系统。根据光学的折射反射原理,发光管和接收管都固定在探测架上,通过透镜聚焦。在探测架中间用半透腆使发射的红外线折射向转动体,又能使转动的物体反射回来的红外线通过半透膜射向接收管。半透膜上最好涂一层只能透过某个单色波长的物质,或用单色性很好的滤色玻璃制作,使它只能透过固定波长的红外线(例如0.93m),这样对抗杂散光的干扰更有利。为了提高反射红外线的能力,通常在转动物体上贴上一小片红外线反射纸,使反射效果极好。有时用镜面、铝箔、洁白平滑的纸、白油漆等也能提供反射性能。当转动物体转到反射纸恰好对着从发光管发出的红外线时,接收管接收到光信号,从单位时间内收到光信号的次数便可测量出转速。 测量远距离转动物体,可用中功率和大功率的发光二极管(HL系列发光二极管),还可以采用砷化镓单异质结激光二极管(如2EJD系列),这种管子的峰值波长为0.90m,输出功率为210W,额定工作电流为1545A,发射距离超过几十米。相应的接收管仍可采用硅光电三极管3DU5C。设转动部件线速度Vmax=200km/h,半径: R=20cm,周长: L=2*pi*R=125cm 在转动部件上最多有m个通光孔,光传感器检测得到的脉冲频率只与转动部件的角速度有关设角速度为n转/秒,则脉冲频率f为:f=m*n=m*Vmax/(2*3.14*R)=38*m(HZ) 即使转动部件有10个通光孔此时脉冲频率也只为380HZ。这样完全能达到能被红外线传感器响应的要求。也能达到能被信号处理系统(us级)的响应时间特性的要求。图2所示为计数器信号输入、频率计信号输入以及转速表信号输入而应用的红外线发射接收对管的示例。 电路中,调整发射管的限流电阻(200R),可以调整灵敏度,但是注意不能让电流超过50mA,以免烧毁发射管。 输出侧的10K电阻是提供“0”电平时的接地电阻,如果电路里已经有信号输入的接地电阻,则可以省略本处的10K电阻。此电阻不能太小阻值,否则高电平输出会达不到大于3.5V。(这是普通信号的高电平要求,如果是TTL电平标准,可以适当降低,最后是要以实际电路的配合为准的。) 只要在红外线发射接收对管的中间缺口处插入一件对红外光有遮挡作用的物质,图示的输出端口“OUT”的电平立即从高变成低。如果该遮挡物质是循环连续动作的话,就是一种非常好的无触点信号源。设转动部件线速度Vmax=200km/h,半径: R=20cm,周长: L=2*pi*R=125cm 在转动部件上最多有m个通光孔,光传感器检测得到的脉冲频率只与转动部件的角速度有关设角速度为n转/秒,则脉冲频率f为:f=m*n=m*Vmax/(2*3.14*R)=38*m(HZ) 即使转动部件有10个通光孔此时脉冲频率也只为380HZ。这样完全能达到能被红外线传感器响应的要求。也能达到能被信号处理系统(us级)的响应时间特性的要求。图中所示为计数器信号输入、频率计信号输入以及转速表信号输入而应用的红外线发射接收对管的示例。 电路中,调整发射管的限流电阻(200),可以用来调整灵敏度,但是必须注意不能让电流超过50mA,避免烧毁发射管。 输出侧的10K电阻是提供“0”电平时的接地电阻,此电阻不能太小阻值,否则高电平输出会达不到大于3.5V。 只要在红外线发射接收对管的中间缺口处插入一件对红外光有遮挡作用的物质,图示的输出端口“OUT”的电平立即从高变成低。 2.1.2显示模块Led数码显示管有两种接法:第一种:共阳极接法,把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5v,每个发光二极管的阴极通过电阻与输入端相连。当阴极端输入低电平时,段发光二极管导通点亮,而输入高电平时则不点亮。第二种:共阴极接法,把发光二极管的阴极连接在一起构成公共阴极,使用时公共阴极接地,每个发光二极管的阳极通过电阻与输入端相连。当阳极端输入高电平时,段发光二极管就导通点亮,而输入低电平时则不点亮。使用LED数码显示器时要注意区分这两种不同的接法,在器件出厂时其内部的公共端已经接好,用户可根据自己的需要正确使用共阳极接法或共阴极接法。2.LED数码显示器的显示段码为了显示字符,要为LED显示器提供显示段码(或称字形代码),组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED显示器的显示段码为1个字节。各段码位的对应关系如下段码位D7D6D5D4D3D2D1D0限时段dpgfedcba:用LED显示器显示十六进制数和空白字符与P的显示段码如表所示:字型共阳极段码共阴极断码字型共阳极段码共阴极段码0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHb83H7CH3B0H4FHCC6H39H499H66HdA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFH00H880H7FHP8CH73HLED数码显示器以软件为主的接口方法2.1.3复位模块系统复位的母的是使系统能够进入一种初始状态,为系统工作做好准备。2.1.4cpu及外设模块2.1.4.1存储器51单片机的存储从物理结构上分为:片内,片外程序存储器与片内,片外数据存储器4个部分;从寻址空间分布可分为:程序存储器,内部数据存储器,外部数据存储器3大部分;从功能上可分为:程序存储器,内部数据存储器,特殊功能寄存器,位地址空间和外部数据存储器5大部分。2.1.4.2输入输出端口 51单片机有4个8位并行的输入输出接口p0,p1,p2,p3这4个接口可以并行的输入或输出8位数据,也可以按位使用,即每一位均能独立作输入输出用,每个口虽功能有所不同,但都具有1个锁存器(即特殊功能寄存器p0-p3),1个输出驱动器和2个(p3口为3个)三态缓冲器。P0口是一个三态双向口,可作为地址/数据分时复用口,也可作为通用的i/o接口。P1口为准双向口,p2也是一准双向口,p3也是一准双向口。2.1.4.3中断系统 概念:计算机暂时中止正在执行的主程序,转去执行中断服务程序,并在中断服务程序执行完了之后能自动回到原主程序处继续执行,这个过程叫做“中断”。51单片机的中断系统属于8位单片机中功能较强的1种中断系统,它可以提供5个中断源,2个外部中断请求INT0和和INT1,2个片内定时器/计数器T0和T1的溢出中断请求TF0和TF1及串行口中断请求T1或RI。每个中断源,每个中断源有两个中断优先级别可供选择,可实现两级中断服务程序嵌套。此外,所有中断均可由软件设定为允许中断或禁止中断,也就是说,用户可以用关中断指令来屏蔽所有的中断请求,也可以用开中断指令使cpu接受中断请求。单片机的中断系统有两个外部中断源,引脚信号为INT0和INT1。其中断请求触发信号有电平触发和边沿触发两种,当TCON寄存器中的IT0位和IT1位为“0”时采用电平触发;为“1”时采用边沿触发。在电平触发方式下,单片机在每一个机器周期的S5P2期间采样中断输入信号INTx的状态,若为低电平,则可直接直接触发外部中断,这就使得CPU对来自外部的中断申请能得以及时响应。在这一触发方式中,中断源必须持续请求,一直到中断产生为止。然后,在中断服务程序返回之前,必须撤出中断请求信号,否则机器将认为又发生了1次中断请求。所以电平触发方式适合于外部中断输入为低电平,且在中断服务程序中能清除该中断源的申请信号的情况。在边沿触发方式中,如果在INTx端连续采样到1个周期的高电平和紧接着1个周期的低电平,则TCON寄存器中的中断请求标志位IEx就被置位,并由该标志位请求中断。显然,这种方式的中断请求即使cpu暂时不能响应,中断请求标志由于被保存也不会丢失,而一旦cpu响应中断,进入中断服务程序时,IEx会被CPU自动清除,所以该方式适合于以负脉冲形式输入的外部中断请求。本文中主要运用2个片内定时器/计数器T0和T1的溢出中断2.1.4.4定时/计数器在实际的控制系统中常要求有外部实时时钟,以实现定时或延时控制,还要求有外部计数器,以实现对外界事件进行计数。对于定时/计数器来说,不管是独立的定时器芯片还是单片机内的定时器,大多有以下特点:(1) 定时/计数器有多种工作方式,可以是计数方式也可以是定时方式。(2) 定时/计数器的计数值是可变的,当然对计数的最大值有一定限制,这取决于计数器的位数。计数的最大值也就限制了定时的最大值。(3) 可以按照规定的定时或计数值,在定时时间到或者终止时,发出中断请求,以便实现定时控制。工作方式0:是一种13位工作方式,由TL1/TL0的低5位和TH1/TH0的8位构成13位计数器(TL1/TL0的高3位无效);工作方式1:16位工作方式,与工作方式0基本相同,区别仅在于工作方式1的计数器由TL1/TL0和TH1/TH0组成16位计数器,从而比工作方式比工作方式0有更宽的定时/计数范围;工作方式2:8位自动装入时间常数方式,由TL1/TL0构成8位计数器,TH1/TH0仅用来存放时间常数。启动T1/T0前,TL1/TL0和TH1/TH0装入相同的时间常数,当TL1/TL0计满后,除定时器回零标志TF1置位,具有向CPU请求中断的条件外,TH1/TH0中的时间常数还会自动装入TL1/TL0,并重新开始定时或计数;工作方式3:2个8位方式,工作方式3只适用于定时器0。如果使定时器1为工作方式3,则定时器1将处于关闭状态。2在本次出租车计费系统的设计中,我们将要采取什么工作方式,可以由以下推导决定:假设计程车轮胎周长为2米,计费按每公里计费制折算:每公里计费次数=1000/2=500次故工作方式3和工作方式2的计数宽度达不到设计要求。工作方式0和工作方式1可任选其一,我们不妨采用工作方式1来实现本次设计的计费方案。51单片机的定时器/计数器采用增量方式计数。当运行于计数器方式时,每当引脚出现下跳沿,计数器自动加1,无论是作定时用还是计数用,当T0或T1加满回零后,定时器回零标志置1。而当允许中断时TF可以申请中断进而在中断服务程序中相应的操作;TF也可以用程序判断定时到或计数满的标志位。所以我们必须首先确定为达到计数满500次申请中断要求的计数初值,以下给出了计数初值的确定过程:将10进制数(500)10换算成16进制=1F4H;对1F4H求补=FE0BH;FE0BH即为计数初值;故将FEH存放在TH1/TH0,将0BH存放在TL1/TL0。2.1.5A/D模块 D/A模块自动控制是单片机应用的一个重要领域。在自动控制领域中,除数字量之外经常会遇到另一种物理量,即模拟量,由于计算机只能处理数字量,因此计算机系统中凡遇到有模拟量的地方,就要进行模拟量向数字量或数字量向模拟量的转换,也就出现了单片机的数/模转换(D/A)和模/数转换(A/D)的接口问题。现在这些转换器都已集成化,具有体积小,功能强,可靠性高,误差小,功耗低等特点。模/数转换(A/D)用以实现模拟量向数字量的转换。按转换原理可分为4种:计数式,双积分式,逐次逼近式及并行式A/D转换器。目前最常用的是双积分式和逐次逼近式。双积分式A/D转换器的主要优点为转换精度高,抗干扰性能好,价格便宜;缺点是转换速度较慢。因此这种转换器主要用于速度要求不高的场合。另一种常用的A/D转换器是逐次逼近式。逐次逼近式A/D转换器是一种速度较快,精度较高的转换器,其转换时间大约在几微妙到几百微妙之间。典型A/D转换器芯片ADC0809简介ADC0809的内部逻辑图D/A转换器的输入为数字量,经转换后输出为模拟量。有关D/A转换器的技术性能指标很多,如:绝对精度,相对精度,线性度,输出电压范围.对这些技术性能指标,仅对几个与接口有关的技术性能指标作一介绍。分辨率,分辨率是D/A转换器对输入量变化敏感程度的描述,与输入数字量的位数有关。如果数字量的位数为n,则D/A转换器的分辨率为2的负n次方。这就意味着D/A转换器能对满刻度的为2的负n次方输入量作出反应。即是说,数字量的位数越多,分辨率就越高,亦即转换器对输入量变化的敏感程度也就越高。使用时,应根据分辨率的需要来选定转换器的位数。2.1.6键盘模块 对于8051单片机来说,一般利用p0到p2口中的任意两个口构成多达8*8的键盘,其中1个作为输入口,1个作为输出口。如果单片机本身的口线已被占用的话则可以外口i/o接口芯片。2.1.7系统总图 第三部分 软件设计乘客上车显示起步价6.0元,2km后以1.4元每公里加价。通过键盘操作,使得LCD可以显示路程,费用,速度,时间这四个结果。用INT0计算脉冲数并转化为路程(lucheng),路程达到100m时给以公里为单位的路程加上0.1即0.1公里。路程达到2km后以1.4元每1000m加价。 用定时器0处理速度计算,定时50ms*20=1s,每秒采样一次脉冲数存放在(count_pluse),并转化为速度(sudu),在LED上显示出来且每秒刷新一次。 附录:软件设计#include#define uchar unsigned char#define uint unsigned intxdata uchar addr_8155 _at_ 0x7f00;xdata uchar addr_8155a _at_ 0x7f01;xdata uchar addr_8155b _at_ 0x7f02;xdata uchar addr_8155c _at_ 0x7f03;uchar table15=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0x89,0x86,0xC7,0xFF; /共阳七段码表,014,前10个为数字09,10-,11H,12E,13L,14空uchar disp_date8;/led上显示的 8个数字uchar count_pluse=0;/脉冲计数uchar disp_state=3;/1复位,2费用和时间,3路程和速度uchar num=20;/配合计数器0实现1s定时uint wait_time=0,chengche_time=0;/等待时间sfloat lucheng,sudu,jijia;bit flag=0;/1,计算价格和时间;0,停止void disp();void delay(uint x);void get_disp(float d1,float d2);uchar keyscan();void main()uchar key; addr_8155=0x03;/8155控制字 TMOD=0x11; /timer0完成1s定时,timer1显示定时,方式1 TH0=-(50000/256); TL0=-(50000%256);/50ms TH1=-(20000/256); TL1=-(20000%256);/20ms IP=0x09;/中断优先级,PX0=1,PT1=1,PT0=0 IT0=1;/ out int0 跳变边沿触发 EX0=1; ET0=1; ET1=1; EA=1;/打开相关中断 TR0=1; TR1=1;/TIMER 启动 while(1)/按键控制,改变状态和显示 key=keyscan(); if(key=1) disp_state=1;flag=0;/复位 ,显示0000 0000 while(key!=2) key=keyscan(); wait_time=0;/启动计价,计算候时 chengche_time=0; lucheng=0; jijia=0; flag=1; while(key!=1) key=keyscan(); switch(key) case 3:disp_state=2;break; case 4:disp_state=3;break; default:disp_state=2;break; void out_int0() interrupt 0 count_pluse+;void timer0_int() interrupt 1 float wait_jijia; TH0=-(50000/256); TL0=-(50000%256);/重载初值 num-; if(num=0) num=20; /计算各各参数,根据count_pluse sudu=1.25*count_pluse*3.6;/1.25周长,3.6为M/S到KM/H的转换 lucheng+=1.25*count_pluse;/m,单位if(flag=1) chengche_time+;/s,单位 if(count_pluse4.5) wait_time+;/s,单位 if(lucheng/10003) jijia=7; else wait_jijia=(uchar)(wait_time/10); jijia=7+1.5*lucheng/1000+0.1*wait_jijia;/元,单位 count_pluse=0; void timer1_int() interrupt 3 uchar i; TH1=-(20000/256); TL1=-(20000%256);/重载初值 switch(disp_state)/参数转化然后显示case 1:disp_date0=0;disp_date1=0;disp_date2=0;disp_date3=0; disp_date4=0; disp_date5=0; disp_date6=0; disp_date7=0; break;/ 0000 0000 ; case 2:get_disp(jijia,chengche_time/60);break; case 3:get_disp(lucheng/1000,sudu);break;default: for(i=0;i8;i+) disp_datei=14;break;/不合规则,显示nothing delay(8); disp();void disp() uchar i,tt,t; addr_8155a=0; t=0x01;/按位取反得到位选信号 addr_8155b=t; for(i=0;i8;i+) tt=tabledisp_datei; if(i=3 | i=6) tt=0x80 | tt;/显示小数点 addr_8155a=tt; delay(8);/延时,通过实验调出一个合适的值,对于亮度和键盘响应都合适 addr_8155a=0; t=t; addr_8155b=t; /键盘扫描子程序#define uchar unsigned char/如果把位选和段选调换位置,键盘扫描应该很简单#define uint unsigned intextern xdata uchar addr_8155a ;extern xdata uchar addr_8155b ;extern xdata uchar addr_8155c ;uchar keyscan() uchar t,value=0; uint i; addr_8155a=0; addr_8155b=0xf7; t=addr_8155c&0x01; if(t=0) for(i=0;i4000;i+);/延时20ms去抖动 t=addr_8155c&0x01; if(t=0) value=1;return value; addr_8155b=0xfb; t=addr_8155c&0x01; if(t=0) for(i=0;i4000;i+);/延时20ms去抖动 t=addr_8155c&0x01; if(t=0) value=2;return value; addr_8155b=0xfd; t=addr_8155c&0x01; if(t=0) for(i=0;i4000;i+);/延时20ms去抖动 t=addr_8155c&0x01; if(t=0) value=3;return value; addr_8155b=0xfe; t=addr_8155c&0x01; if(t=0) for(i=0;i0) for (j=0;j125;j+); 结束语本文利用c51单

温馨提示

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

评论

0/150

提交评论