天津天狮学院
毕业实践报告
题目:基于单片机的交通灯控制系统设计
二级学院 电子与计算机学院 专 业 08级电子信息工程技术 学生姓名 焦侃 指导教师 韩彬彬
2011年5月24日
摘 要
随着社会经济的发展,城市交通问题越来越引起人们的关注,人、车、路三者关系得和谐已成为交通治理部分必需要解决的主要问题之一,本交通灯设计系统用于对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。
本设计主要为实现一款带时间自主修改功能的多功能交通灯。本文选定了采用单片机技术实现交通灯功能,本设计应用AT89C51芯片作为核心,CD4511芯片作为显示芯片驱动,详细介绍了Atmel公司的AT89C51单片机的性能和特点,以及CD4511原理和特性,指出了交通灯设计系统的思路和所需考虑的问题,详细描述了交通灯系统的硬件、软件设计以及系统仿真调试过程等。该设计的优点是电路简单、性能可靠、实时性好、时间精度高,操作简单,可广泛应用于各个交通要道。
关键词:单片机,交通灯,控制器
Abstract
This design is mainly for realizing a paragraph of time the independent modify functions with multi-function traffic. This paper adopts single-chip microcomputer selected technologies to realize this design, lights function AT89C51 chip as the core, CD4511 chip as display chip drive, introduces in detail the AT89C51 Atmel company performance and characteristics of CD4511 principle and characteristics, and lights design system, points out the idea and the problems needed to consider the advantages of this method is reliable in performance, simple circuit, good real-time, high precision time, simple operation. And widely used in various hubs.
When entering adjustment function can add, subtract function operation, in order to achieve timing function, thus can undertake traffic lights countdown system. When the timing Settings, system through the AT89C51 control things, sn of traffic light real-time status. Eight LED digital tube will show countdown time, time display format for: ten - bytes; And have real-time display current countdown time functions
Keywords: a single-chip microcomputer, the lights, controller, design, realization
目录
一、绪论............................................................ 2 二、系统设计........................................................ 2
2.1 功能........................................................ 2 2.2交通灯硬件组成 .............................................. 3
2.2.1单片机最小系统 ........................................ 3 2.2.2 数码管及显示驱动电路.................................. 6 2.2.3交通灯电路 ............................................ 8 2.2.4键盘电路 .............................................. 8 2.2.5电路原理图设计 ........................................ 9 2.3 软件设计.................................................... 9
2.3.1 主程序流程图.......................................... 9 2.3.2 键盘子程序设计....................................... 10 2.4 主程序设计................................................. 11 三、系统调试与仿真................................................. 12
3.1 KeilC51进行程序调试 ....................................... 12
3.1.1 KeilC51软件介绍 ..................................... 12 3.2 Proteus软件简介 ........................................... 13 3.3 Proteus 电路图设计......................................... 13 3.4 Proteus中仿真过程 ......................................... 14 四、结论........................................................... 16 参考文献........................................................... 17 附录............................................................... 18
1
一、绪论
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本设计是根据我所学习的单片机课程,按照大纲要求对我进行的一次课程检验,是进行单片机课程训练的必要任务,也对我们掌握单片机应用有很大的帮助。掌握单片机技术是一门不可或缺的技术,对我将来的工作以及生活和学习都有很密切的联系。当今世界的发展是以科学技术为基础的,微控技术在生产中所占的比重也越来越大。单片机的出现是近代计算机技术发展史上的一个重要里程碑。近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。
在今天,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。这一技术在19世纪就已出现了。近年来交通事故情况日趋严重,如果将每个交通十字路口的多余交通警察撤回,安排在最不利于管理和事故高发的地方,不但可以大大的降低交通事故的发生率,而且可以节省大量的人力财力。在本次研究实践中,我采用单片机和汇编语言编程来自动控制交通灯通灯有现实的社会意义。
二、系统设计
2.1 功能
本交通灯设计系统不仅具有普通十字路口交通灯的基本功能,而且还具有自主设定时间的功能以及倒计时显示时间功能,时间自主设定功能可以根据各种不同的路况而自主设定时间从而适应各种交通情况的路口,倒计时显示时间功能显示范围为0至99,该功能可以大大降低过路行人危险性,使人们可以在过马路时注意红灯时间以免引发危险,使该设计具有更高的普及性,采用了大量的已有技术的微电子器件和集成电路,大大的降低了成本,提高了性能价格比例。
综上所述,开发一款具有倒计时自主设定功能的交通灯在设计上是可行的,在市场上也是需要的。
2
2.2交通灯硬件组成
由晶振电路传给单片机达到产生脉冲信号的作用,通过单片机复位电路对系统进行系统复位从而使系统初始化,单片机传出信号控制红、黄、绿3种颜色的交通灯电路使其发光,键盘电路输入信号给单片机实现加、减、换挡、确定计时功能控,单片机输出信号给数码管驱动显示电路,经数码管驱动显示电路编译传给8段数码管显示电路。 如图 2-1
数码管3种颜色的交通灯电路 晶振电路 复位电路 单片机 键盘电路 驱动显示电路 8段数码管显示电路
图 2-1交通灯系统设计流程图
2.2.1单片机最小系统
单片机最小系统包括单片机、晶振电路和复位电路,如图 2-2所示。晶振电路有两个电容和一个石英谐振器组成。
3
图2-2 单片机最小系统
AT89C51简介:
AT89C51单片机是一款低功耗,低电压,高性能CMOS 8位单片机,片内含4KB(可经受1000次擦写周期)的FLASH可编程可反复擦写的只读程序存储器(EPROM),器件采用CMOS工艺和ATMEI公司的高密度、非易失性存储器(NURAM)技术制造,其输出引脚和指令系统都与MCS-51兼容。片内的FLASH存储器允许在系统内可改编程序或用常规的非易失性存储器编程器来编程。因此,AT89C51是一种功能强,灵活性高且价格合理的单片机,可方便的应用在各个控制领域。如图2-3
AT89C51具有与8031 CPU与MCS-51 兼容、4K字节可编程FLASH存储器(寿命:1000写/擦循环)、全静态工作:0Hz-24KHz、128*8位内部RAM、32条可编程I/O线、两个16位定时器/计数器、6个中断源、可编程串行通道、低功耗的闲置和掉电模式和片内振荡器和时钟电路等主要性能。
AT89C51管脚说明:
1)VCC:AT89C51电源正极输入,接+5V电压。 2)GND :电源接地端。
4
3)XTAL1:接外部晶振的一个引脚。在单片机内部它是一反相放大器输入端,这个放大器构成了片内振荡器。它采用外部振荡器时,些引脚应接地。
4)XTAL2:接外部晶振的一个引脚。是接至振荡器的反相放大器输出端和内5)RST:AT89C51的复位信号输入引脚,高电位工作,当要对芯片又时,只要将此引脚电位提升到高电位,并持续两个机器周期以上的时间,AT89C51便能完成系统复位的各项工作,使得内部特殊功能寄存器的内容均被设成已知状态。
6) P0口(P0.0~P0.7)是一个8位漏极开路双向输入输出端口,当访问外部数据时,它是地址总线(低8位)和数据总线复用。外部不扩展而单片应用时,则作一般双向I/O口用。
7) P1口(P1.0~P1.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口)。仅供用户作为输入输出用的端口。
8)P2口(P2.0~P2.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),当访问外部程序存储器时,它是高8位地址。外部不扩展而单片应用时,则作一般双向I/O口用。
9)P3口(P3.0~P3.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),它还提供特殊功能,包括串行通信、外部中断控制、计时计数控制及外部随机存储器内容的读取或写入控制等功能。其特殊功能引脚分配如下:
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外部随机存储器的读选通,低电平有效
10)PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的
PSEN信号将不出现。
部时钟发生器输入端。当采用外部振荡器时,则此引脚接外部振荡信号的输入。
11)EA/VPP:当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
5
12)ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
图2-3 AT89C51各管脚图
2.2.2 数码管及显示驱动电路
CD4511简介:
6
CD4511数码管显示驱动(如图2-5)是BCD锁存/7段译码器/驱动器,常用的显示译码器件,CD4511引脚功能:
BI:4脚是消隐输入控制端,当BI=0 时,不管其它输入端状态是怎么样的,七段数码管都会处于消隐也就是不显示的状态。
LE:锁定控制端,当LE=0时,允许译码输出。 LE=1时译码器是锁定保持状态,译码器输出被保持在LE=0时的数值。
LT:3脚是测试信号的输入端,当BI=1,LT=0 时,译码输出全为1,不管输入 DCBA 状态如何,七段均发亮全部显示。它主要用来检测数7段码管是否有物理损坏。
A1、A2、A3、A4、为8421BCD码输入端。
a、b、c、d、e、f、g:为译码输出端,输出为高电平1有效。
图2-5 CD4511图
数码管及显示驱动电路原理结构如图 2-4所示,其中上拉电阻为CD4511增加加电压使其正常工作,LT、BI接口接高电平,CD4511显示驱动模块A接数码管a,B接数码管b,C接数码管c,D接数码管d,E接数码管e,F接数码管f,G接数码管g,段选给数码管使其显示数字,数码管共阴极接地端接三极管,使其高电位接地,低电位传回单片机。
7
图2-4 数码管及显示驱动电路
2.2.3交通灯电路
交通灯电路由LED和电阻组成,LED灯顺序为南北向红灯、南北向黄灯、
南北向绿灯、东西向红灯、东西向黄灯、东西向绿灯。如图 2-6
图2-6 AT89S51来控制交通灯LED电路
2.2.4键盘电路
键盘分别控制确定键、换挡键、减1键、加1键输入单片机P2.4至P2.7管脚,上拉电阻使键盘处于高电平状态。 如图 2-7
8
图2-7 键盘电路
2.2.5电路原理图设计
,单片机管脚P0.0、P0.1、P0.2、P0.3分别接CD4511数码管驱动显示芯片的A、B、C、D,单片机管脚P0.4、P0.5、P0.6、P0.7、分别接第二个CD4511的A、B、C、D接口,单片机P2.4、P2.5、P2.6、P2.7分别接键盘电路确定键、换挡键、减1键、加1键,单片机从管脚P1.0、P1.1、P1.2、P1.3、P1.4、P1.5输出信号给交通灯LED电路,RST 是AT89C51的复位信号输入引脚,XTAL1和XTAL2是分别接晶振电路。 如图 2-8
图2-8 电路原理总图
2.3 软件设计
2.3.1 主程序流程图
首先对系统进行初始化,然后进行中断延时,定义键盘控制后进行显示。如图 2-9
9
main 初始化 中断 延时 键盘控制 图2-9 主程序流程图
显示 2.3.2 键盘子程序设计
首先对系统进行初始化,然后定义键盘控制,如过按下K1键则加1如果没按则进入K2键,K2键如果按下则减1如果没按下则进入K3键,如果按下K3键则移位,没按下则进入K4键,如果按下K4键则退出。如图 2-10
定义键盘控制字 初始化 键盘 N K1 键 Y N Y K2键 -1 N K3 键 Y N Y K4键
图2-10 键盘子程序设计图
+1 移位 退出
10
2.4 主程序设计
***main 函数*** 初始化部分 count20 equ r7 count50 equ r6 count15 equ r5 buff equ 30h bufl equ 31h bufh
;计时次数 20次=1s ; ;
50次=2.5s 15次=0.75s
;数码管显示缓存 ;数码管显示低位缓存
;数码管显示高位缓存 ;delay时间参数 ;
;红绿灯设置时间 ;高标志位 ;低标志位 1有效
equ 32h
temp1 equ 33h temp2 equ 34h buftime equ 40h flagh flagl ljmp ljmp
bit 10h bit 11h main tt0
org 0000h org 000bh
;T0中断,红绿灯计时 ;T1中断,闪烁控制
org 001bh ljmp tt1 org 0030h main:
mov sp,#60h
;4511数据锁存控制端,0有效 ;数码管,1有效 ;标志位,1有效
setb leh setb lel clr ledh clr ledl clr flagh clr flagl
11
三、系统调试与仿真
系统调试仿真步骤:先做Proteus仿真图,然后用KeilC51编译程序,编译后生成.hex文件,最后使用Proteus仿真图加载.hex文件,完成仿真,若仿真有错,需对软硬件进行进一步修改。
3.1 KeilC51进行程序调试
3.1.1 KeilC51软件介绍
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。
Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
利用KeilC51对程序进行编译,编译结果如图 3-1所示。
图3-1 keil编译图
12
3.2 Proteus软件简介
Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
3.3 Proteus 电路图设计
图3-2 Proteus 电路图设计
13
3.4 Proteus中仿真过程
生成.Hex步骤:点击“Project->New Project„”菜单,出现一个对话框,要求给将要建立的工程起一个名字,你可以在编缉框中输入一个名字,不需要扩展名。点击“保存”按钮,出现一个对话框,这个对话框要求选择目标CPU(即你所用芯片的型号),我们选择Atmel公司的89C51芯片。点击ATMEL前面的“+”号,展开该层,点击其中的89C51,然后再点击“确定”按钮,回到主界面,此时,在工程窗口的文件页中,出现了“Target 1”,前面有“+”号,点击“+”号展开,可以看到下一层的“Source Group1”,这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Source Group1”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单。选中其中的“Add file to Group”Source Group1”,出现一个对话框,要求寻找源文件,注意,该对话框下面的“文件类型”默认为C source file(*.c),也就是以C为扩展名的文件,而我们的文件是以asm为扩展名的,所以在列表框中找不到XXX.asm,要将文件类型改掉,点击对话框中“文件类型”后的下拉列表,找到并选中“Asm Source File(*.a51,*.asm),这样,在列表框中就可以找到exam1.asm文件了。 双击exam1.asm文件,将文件加入选择目标CPU,在文件加入项目后,该对话框并不消失,等待继续加入其它文件。
工程建立好以后,还要对工程进行进一步的设置,以满足要求。首先点击左边Project窗口的Target 1,然后使用菜单“Project->Option for target ‘target1’”好在绝大部份设置项取默认值就行了。在设置好工程后,即可进行编译、连接。选择菜单Project->Build target,对当前工程进行连接,如果当前文件已修改,软件会先对该文件进行编译,然后再连接以产生目标代码;如果选择Rebuild All target files将会对当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,而Translate „.项则仅对该文件进行编译,不进行连接。 以上操作也可以通过工具栏按钮直接进行。 编译过程中的信息将出现在输出窗口中的Build页中有有关编译、连接、项目设置的工具条,正确编译、连接之后的结后,最终会得到提示获得了名为exam1.hex的文件,该文件即可被编程器读取。
打开Proteus软件,在Proteus软件中进行画图,在DEVICES中选择P字母搜索元器件,在画完图之后在DEBUG中选择use remote Debug monitor 来支持远程调试。之后右键单击AT89C51选中元此元器件,然后再左键单击,之后出现在对话框。在对话框PROGRAM FILE栏中加载程序的.hex文件,然后关闭对话框后进行仿真。 如图 3-3
14
图4-2加载.hex文件图
图3-3 Proteus加载.hex图
3.5 Proteus进行交通灯系统仿真
图3-4 Proteus仿真图
15
四、结论
本次设计设计的是一个交通灯控制系统,以单片机为核心,采用目前比较流行的AT89S51单片机,对十字路口交通灯电路进行了仿真制作,主要完成十字路口交通灯的红、绿、黄灯的点亮时间控制,在模拟系统中,采用了两组红、黄、绿三种发光二极管分别代表两道上的交通灯,采用了数码管显示每种灯点亮的时间;并采用了四个按钮开关来实现计时功能。在本次设计中,程序采用了原来学习书本上的汇编语言, 程序仿真采用流行的PROTEUS软件,和keil联合仿真,方便调试程序和修改硬件,结果证明方案的硬件设计正确,程序也符合要求。
通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。
16
参考文献
[1] 王晓薇、王 慧.基于GA 的交叉路口自适应模糊控制器设计[J]. 吉林大学学报(信息科
学版),第22卷第4期2004.7
[2] 付家才. 单片机控制工程实践技术[M]. 北京: 化学工业出版社, 2004.
[3] 刘丽莎、黄辉先、汤红忠.单交叉口模糊交通控制器的研究 [J].电机与控制学报,2003 [4] 陈小忠、黄宁、赵小侠.单片机接口技术实用子程序[M].北京:人民邮电出版社,2005.9 [5] 沙占友、孟志永、王彦朋.单片机外围电路设计(第2版)[M].北京:电子工业出版
社,2006.6
[6] 何立民. 单片机应用技术选编[M] . 北京航空航天大学出版社. 2004. [7] 张化光、孟祥萍.智能控制基础理论及应用[M]. 北京:机械工业出版社,2005 [8] 张秀珍、戴伏生、毛兴鹏.热释电红外传感器在车辆计数系统中的应用[J].传感器技术,
2000 年,第19 卷,第2 期
[9] 沈红卫. 单片机应用系统设计实例与分析[M] . 北京:航空航天大学出版社,2003.
17
附录
;端口定义部分 dat equ P0 d1 equ P0.0 d2 equ P0.1 d3 equ P0.2 d4 equ P0.3 d5 equ P0.4 d6 equ P0.5 d7 equ P0.6 d8 equ P0.7 leh equ P2.0 lel equ P2.1 ledh ledlequ P2.3 k1 equ P2.4 k2 equ P2.5 k3 equ P2.6 k4 equ P2.7 Nr equ P1.0 Ny equ P1.1 Ng equ P1.2 Er equ P1.3 Ey equ P1.4 Eg equ P1.5 ;初始化部分 count20equ r7 count50 equ r6 count15 equ r5 buff bufl bufh
equ 30h equ 31h equ 32h
;计时次数 20次=1s ; ;
50次=2.5s 15次=0.75s
;高位
;上数码管显示控制 ;K1,增1键 ;K2,减1键 ;K3,移位键 ;NSred控制 ;NSyellow ;NSgreen ;WEred
;1有效 | | |
P2.4~7低电平
;低位4511数码管数据端
;4511数码管控制端0有效 ;下数码管显示控制
;1有效
| 按键
equ P2.2
;K4,确认并退出键
;南北红灯 0有效 ;0有效 ;0有效
;东西红灯 0有效 ;0有效 ;0有效
;WEyellow ;WEgreen
***main 函数***
;数码管显示缓存 ;数码管显示低位缓存 ;数码管显示高位缓存 ;delay时间参数
18
temp1 equ 33h
temp2 equ 34h buftime equ 40h flagh bit 10h flagl ljmp ljmp
bit 11h main tt0
org 0000h org 000bh
;
;红绿灯设置时间 ;高标志位 ;低标志位 1有效
;T0中断,红绿灯计时 ;T1中断,闪烁控制
org 001bh ljmp tt1 org 0030h main: ; ; ; ;
mov sp,#60h setb leh setb lel clr ledh clr ledl clr flagh clr flagl
;标志位,1有效
;数码管,1有效
;4511数据锁存控制端,0有效
;*******************计时器初始化********************
mov tmod,#11h mov th0,#3ch mov tl0,#0b0h mov th1,#0fch mov tl1,#18h mov th1,#0d8h mov tl1,#0F0h mov th1,#3ch mov tl1,#0b0h mov count20,#00h mov count50,#00h setb et1 setb et0 setb pt0 setb ea
;t1中断允许 ;t0中断允许 ;T0优先级1
;中断开放
;T1初始地址,单次50ms ;T1初始地址,单次10ms
;T1初始地址,单次1ms ;T0初始地址,单次50ms ;t0,t1,计时方式1
19
; ; ;
初始部分,显示00 mov buff,#00h setb flagh setb flagl lcall load setb ledh setb ledl lcall part clr flagh setb flagl setb tr1 jb k1,kk2 lcall add1 lcall load lcall delay50ms jb k2,kk3 lcall sub1 lcall load lcall delay50ms jb k3,kk4 cpl flagl cpl flagh lcall delay50ms jb k4,kk1
;退出键 ;保存设置时间 ;+1方便使用
;设置结束,T1中断关闭,闪烁停止 ;t1中断允许关
mov buftime,buff inc buftime clr tr1 clr et1 nop
;T0中断开启
;初始东西绿
;位移键
;-1键
;+1键
;初始高位亮,低位闪 ;T1中断开启,闪烁开始
;装载
;拆数
;开数码管
键盘部分,设置初始时间
kk1: lcall delay50ms
kk2:
kk3:
kk4:
红绿灯部分,计时变灯 setb tr0 clr eg
20
clr nr setb er setb ey setb ny setb ng sjmp $ nop
ljmp cut ;
part,拆数函数 ;入口参数: buff,显示缓存
part: mov a,buff anl a,#0fh
mov bufl,a mov a,buff anl a,#0f0h
rr a rr a rr a rr a mov bufh,a
ret
;
load,数据装载函数 ;入口参数: buff,显示缓存 load: mov dat,buff clr lel clr leh
nop setb lel setb leh loadr: ret
add1,加1函数 add1:
jnb flagh,addl
inc bufh
mov a,bufh
;南北红
出口参数:bufl,bufh,显示缓存高低位
;屏蔽高位
;
;屏蔽低位
;
;写入
;高位
21
;
cjne a,#0ah,addr mov bufh,#00h ljmp addr
addl:
jnb flagl,addr
inc bufl mov a,bufl cjne a,#0ah,addr mov bufl,#00h addr:
mov a,bufh rl a rl a rl a rl a add a,bufl
mov buff,a
ret
; sub1,减1函数 sub1:
jnb flagh,subl
dec bufh mov a,bufh cjne a,#0ffh,subr mov bufh,#09h ljmp subr
subl:
jnb flagl,subr
dec bufl mov a,bufl cjne a,#0ffh,addr mov bufl,#09h subr:
mov a,bufh rl a rl a rl a rl a
add a,bufl
;低位
;高低位和起来
;更改buff
;flagh=1,转高位
;高低位和起来
22
; ;
mov buff,a ret
;更改buff
tt0,定时函数1s,红绿灯控,t0中断计时 inc count20 mov th0,#3ch mov tl0,#0b0h mov count20,#00h lcall time setb tr0 reti
time,变灯&计时减1函数 mov a,buff cjne a,#05h,time1 jb eg,time2 setb eg clr ey setb ng clr ny
;南北绿变黄
;0S黄变红,红变绿
cjne a,#00h,time6 mov buff,buftime lcall part jb er,time3 setb er clr eg setb nr clr ng setb ey clr er
;东西黄变红
;南北红变绿
jb ey,time5
;东西红变绿
jb nr,time4
;是0秒
;东西绿变黄
jb ng,time1
;5s绿变黄 ;是5秒
;1s
;T0初始地址,单次50ms
cjne count20,#20,tt0r
tt0: clr tr0
tt0r:
*********************变灯***********************
time:
time2:
time1:
time3:
time4:
23
time5:
jb ny,time6 setb ny clr nr
;南北黄变红
;**********************************计时减1************************************
time6:
mov a,bufl cjne a,#00h,time7 mov bufl,#0ah mov a,bufh cjne a,#00h,time8 mov bufh,#04h dec bufh dec bufl mov a,bufh rl a rl a rl a rl a add a,bufl call load ret
tt1,定时函数2.5s,LED闪烁控制,T1中断计时 inc count50 mov th1,#3ch mov tl1,#0b0h mov count50,#00h lcall blink
reti
blink,闪烁控制函数,t1查询计时 jnb flagh,blink1
;
;T1初始地址,单次50ms
cjne count50,#50,ttr
;2.5s
;高低位和起来 ;更改buff
mov buff,a
;高位溢出 ;置04h
;低位溢出 ;置09h
time8: time7: ; ;
tt1: clr tr1
ttr: setb tr1
blink:
24
;
clr ledh setb tr1 jnb tf1,$ clr tf1
;高位灭 ;T1计时开
blink2:
inc count15 mov th1,#3ch
;T1初始地址,单次50ms ;0.75s ;高位亮
mov tl1,#0b0h mov count15,#00h setb ledh
cjne count15,#15,blink2
ljmp blinkr jnb flagl,blinkr clr ledl setb tr1 jnb tf1,$ clr tf1 inc count15 mov th1,#3ch
blink1: blink3:
;低位灭
mov tl1,#0b0h mov count15,#00h setb ledl ret
;T1初始地址,单次50ms
cjne count15,#15,blink3
;低位亮
blinkr:
delay50ms,延时函数 ,软件计时 mov temp2,#250 djnz temp2,$ djnz temp1,loop ret end
;1+(1+250*2+2)*100+1=50302us
delay50ms: mov temp1,#100 loop:
nop
cut:
25
因篇幅问题不能全部显示,请点此查看更多更全内容