1、单片机课程设计-城市十字路口交通灯控制系统的设计【完整版】(文档可以直接使用,也可根据实际需要修订后使用,可编辑放心下载)摘 要本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统包括人行道、左转、右转、以及根本的交通灯的功能。系统除根本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间、违规车辆检测以及根据具体情况手动控制等功能。本文通过查询相关资料及对系统设计要求和交通灯电路逻辑的分析,结合MCS-51的使用特点提出了一套系统实现的软、硬件方案,并通过MCS-51开发装置实现了该设计方案的根本功能,对交通灯系统设计进行了一种经济、有效的尝试。关键词
2、MCS-51单片机 KEIL C51编译器 LED显示 时序目 录第1章 引言11.1 交通灯的历史概况11.2 程序主芯片功能介绍11.3 程序编译语言及开发软件简介2第2章 总体方案设计52.1 设计要求及可实现功能52.2 交通灯显示规律分析52.3 方案选择8第3章 硬件系统设计113.1 LED显示控制电路113.2 计时器显示电路113.3 车辆违规检测电路12第4章 软件系统设计144.1 主程序设计144.2 按键子程序设计18第5章 系统调试235.1 状态灯显示测试与分析235.2 数码管显示测试与分析235.3 整体电路测试与分析23结论24参考文献25附录26第1章 引
3、言1.1 交通灯的历史概况当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两色旋转式方形玻璃提灯组成,红色表示“停止,绿色表示“注意。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。红灯
4、亮表示“停止,绿灯亮表示“通行。1918年,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。红外线红绿灯当行人踏上对压力敏感的路面时,它就能发觉到有人要过马路。红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。1968年,联合国?道路交通和道路标志信号协定?对各种信号灯的含义作了规定。绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标
5、志禁止某一种转向。左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能平安停车时可以进入交叉路口。我们设计的单片机控制交通灯就是基于信号灯。1.2 程序主芯片功能介绍MSC-51芯片简介8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们
6、分别加以说明:中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。数据存储器(RAM):8051内部有128个8位用户数据存储单元和128个专用存放器单元,它们是统一编址的,专用存放器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。定时/计数器(ROM):8
7、051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。并行输入输出(I/O)口:8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。时钟电路:8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。单片机的结构有两
8、种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机那么采用普林斯顿结构。1.3 程序编译语言及开发软件简介1.3.1 程序编译语言选择51的编程语言常用的有二种,一种是汇编语言,一种是C语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且
9、C语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。综合以上C语言的优点,本文在程序编写时选择了C语言来作为编译语言。1.3.2 开发软件简介1. 8051开发工具KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保存了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编 器,实时操作系统,工程管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开
10、发环境。C51是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三方开发工具。2. uVision2集成开发环境工程(project)是由源文件、开发工具选项以及编程说明三局部组成的。一个单一的uVision2工程能够产生一个或多个目标程序。产生目标程序的源文件构成“组。开发工具选项可以对应目标,组或单个文件。uVision2包含一个器件数据库(device database),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定 微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针(ext
11、ra data pointer)或者加速器(math accelerator)的特 性。uVision2可以为片外存储器产生必要的连接选项:确定起始地址和规模。3. 编辑器和调试器uVision2编辑器包含了所有用户熟悉的特性。彩色语法显像和文件辩识都对C源代码进行和优化。可以在编辑器内调试程序并且可以编写或使用类似C的数语言进行调试。4. C51编译器KEIL C51编译器在遵循ANSI标准的同时,为8051微控制器系列特别设计。语言上的扩展能让用户使用应用中的所有资源。C51允许用户使用C语言编写中断效劳程序,快速进、出代码和存放器区的转换功能使C语言中断功能更加高效。可再入功能是用关键字
12、来定义的。多任务,中断或非中断的代码要求必须具备可再入功能。C51提供了灵活高效的指针。通用指针用3个字节来存储存储器类型及目标地址,可以在8051的任意存储区内存取任何变量。特殊指针在声明的同时已指定了存储器类型,指向某一特定的存储区域。由于地址的存储只需12字节,因此,指针存取非常迅速。5. 测试程序uVision2调试器具备所有常规源极调试,符号调试特性以及历史跟踪,代码覆盖,复杂断点等功能。DDE界面和shift语言支持自动程序测试。第2章 总体方案设计2.1 设计要求及可实现功能本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。由MCS-51单片机组成单片机最小应用系统,控
13、制南北,东西两条干线十字路口的交通信号灯的亮灭,使两条干线交替成为放行线和禁止线。系统包括人行道、左转、右转、以及根本的交通灯的功能。除根本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间、违规车辆检测以及根据具体情况手动控制等功能。2.2 交通灯显示规律分析2.2.1 交通灯时序显示对于一个交通路口来说,能在最短的时间内到达最大的车流量,就算是到达了最正确的性能,我们称在单位时间内多能到达的最大车流为车流量,用公式:车流量= 车流 / 时间 来表示。车人行驶行人灯行人灯白圈代表红灯左弯灯右弯灯黑圈代表绿灯图2-1标号设定图2-2规那么状态图说明:此图为直方图,上
14、边为北路口灯,右边为东路口灯,下边为南路口灯,左边为西路口灯。图22 所示为一种红绿灯规那么的状态图,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期,循环执行见图23。图2-3(a)车辆行驶状态S1 图2-3(b)车辆行驶状态S2图2-3(c)车辆行驶状态S3 图2-3(d)车辆行驶状态S42-3 交通灯四种状态请注意图23(b)和图23(d),它们在一个时间段中四个方向都可以通车,这种状态能在一定的时间内到达较大的车流量,效率特别高。依据上述的车辆行驶的状态图,可以列出各个路口灯的逻辑表,由于相向的灯的状态图是一样的,所以只需写出相邻路口的灯的逻辑表;根据图23可以看出,相邻
15、路口的灯它们的状态在相位上相差180。因此最终只需写出一组S1、S2、S3、S4的逻辑状态表。如表21 所示:开始S1S4S3S2S2S1S3S4外圈是北方为前进方向的状态循环,内圈是东方为前进方向的状态循环。S1的状态ABCDEFGH逻辑值显示时间从40秒到0秒S2的状态ABCDEFGH逻辑值显示时间从30秒到0秒S3的状态ABCDEFGH逻辑值显示时间从70秒到30秒S4的状态ABCDEFGH逻辑值显示时间从30秒到0秒表2-1 交通灯的循环逻辑表表中的“代表是红灯亮也代表逻辑上的0,“是代表绿灯亮也代表逻辑上的1,依上表,就可以向相应的端口送逻辑值。2.2.2 交通灯时间显示方案东西和南
16、北方向的放行时间的长短是依据路口的各个方向平时的车流量来设定,并且S1、S2、S3、S4各个状态保持的时间之有严格的对应关系,其公式如下所示:T-S1+T-S2=T-S3T-S2=T-S4T-S1=T-S3我们可以依据上述的标准来改变车辆的放行时间。按照一般的规那么,一个十字路口可分为主干道和次干道,主干道的放行时间大于次干道的放行时间,我们设定值时也应以此为参考。2.3 方案选择本文采用以单片机为核心本系统采用MSC-51系列单片机80c51为中心器件来设计交通灯控制器,采用C语言为程序编译语言,使用Keil C单片机软件完成编辑、编译、连接、调试、仿真等流程。该系统具体分为输入模块、界面显
17、示模块、电源模块以进行方案设计与选择。2.3.1 输入模块对于本系统要求的能手动设灯亮时间、紧急情况处理,我们讨论了两种方案:方案一:采用8155扩展I/O 口及键盘,显示等。该方案的优点是:使用灵活可编程,并且有RAM,及计数器。假设用该方案,可提供较多I/O 口,但操作起来稍显复杂。方案二: 直接在IO口线上接上按键开关。因为设计时精简和优化了电路,所以剩余的口资源还比拟多,我们使用四个按键,分别是K1、K2、K3、K4。由于该系统对于交通灯及数码管的控制,只用单片机本身的I/O 口就可实现,且本身的计数器及RAM已经够用,应选择方案二。2.3.2 界面显示模块该系统要求完成倒计时、状态灯
18、等功能。基于上述原因,我们考虑了三种方案:方案一:完全采用数码管显示。这种方案只显示有限的符号和数码字符,无法胜任题目要求。方案二:完全采用点阵式LED 显示。这种方案实现复杂,且须完成大量的软件工作;但功能强大,可方便的显示各种英文字符,汉字,图形等。方案三:采用数码管与点阵LED 相结合的方法因为设计既要求倒计时数字输出,又要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与LED灯分别显示时间与提示信息。这种方案既满足系统功能要求,又减少了系统实现的复杂度。权衡利弊,第三种方案可互补一二方案的优缺,我们决定采用方案三以实现系统的显示功能。2.3.3 电源模块为使模块稳定工作,须有可
19、靠电源。我们考虑了两种电源方案:方案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。方案二:采用单片机控制模块提供电源。本方案的优点是系统简明扼要,节约本钱;缺点是输出功率不高。综上所述,我们选择第二种方案,如图2-4。图2-4电源电路第3章 硬件系统设计3.1 LED显示控制电路红绿灯的显示采用普通的发光二极管,每个方向上设置红绿黄灯及行人灯各一个,共四组,如图3-1所示。如果东西方向红灯亮那南北方向就是绿灯,反之亦然,所以在硬件连接图上也成对称分布。图3-1 LED控制电路3.2 计时器显示电路8段LE
20、D是一种常用的数码显示屏。这种数码管的每个线段都是一个发光二极管,因而把它叫做LED数码管。由于在数码管的右下角增加了一个小数点,形成了所谓的8段数码管。E10501是属于共阴极类型的数码管,只要公共端接地,其他端送上高电平就能点亮。E10501不仅具有工作电压低,体积小,寿命长,可靠性高等优点,而且响应时间短一般不超过0.1微秒,亮度也比拟高。缺点是工作电流比拟高,一般工作电流都在10毫安左右。E10501的外形图和等效电路图如图3-2(a)所示。 图3-2(a) E10501外形图 图3-2(b) E10501等效电路图LED段显示数码管的设置为每个方位上一对2位显示器。四个方位上总共有8
21、个LED接在单片机的I/O口上。显示时我们不需要小数点,所以每个LED的10根管脚只用了9根。连接后的时间显示电路,如图3-2(b)所示,虽然路口不一样,但是显示的时间在数字上是一样的,所以两边连接的I/O口是对称的,原理图如图3-2(c)。图3-2(c) 数码管显示3.3 车辆违规检测电路在红灯和黄灯期间,车辆是禁止通行的.为了对那些违反规那么的车辆进行检测,受条件限制,本系统设计中只使用了普通光敏二极管。根本设计思路如下:将光敏二极管放在停车线上,当车辆通过的时候,因光敏二极管给遮住,二极管就不导通,单片机检测到这一信号后就执行报警操作。但是,显然在实际中,使用发光二极管无法实现。违规车辆
22、检测电路除了使用光敏二极管,还使用了三极管,型号为9031。由于普通的光敏二极管的开关性能不是很好,所以在设计中加个三极管做开关。由于普通光敏二极管在导通的情况下的电阻能到达0.51k,所以在设计中将光敏二极管直接接上了电源。同时三极管还可以起到一定的隔离作用。当光敏二极管关断时,三极管的基极为低电平,基极与发射极之间电压为零,三极管关断,检测口的电压为高电平;同理,当光敏二极管导通时,三极管的基极电压为高电平,基极与发射极之间的电压为高,三极管导通,检测口的电压为低电平。基于此就可以检测是否有车辆违章,其原理图如图3-3。图3-3 违规检测电路第4章 软件系统设计4.1 主程序设计4.1.1
23、 主程序设计流程图程序初始化是否是状态S1启动状态S1是否是状态S2启动状态S2是否是状态S3启动状态S3是否是状态S4启动状态S4按键是否按下按键处理返回开始主程序开始是运用定时器0来定时,到达准确记时,在往下走就走到程序的死循环局部,分别判断是哪一个状态,当是状态S1时,就用软件的方法启动S1,运行S1,及南北通行,东西禁止。后面S2、S3、S4与S1一样,在这过程中,如果遇到突发事件,那么要进行突发事件的按键处理,当突发事件处理完后,在回到主程序,其流程图如图41所示。图4-1主程序流程图4.1.2 局部程序列表/主函数/Void main () t=5; TIME_Init (); /
24、定时器初始化 sec=COUNT_DOWN; /定时初值while(1) key_scan(); /按键扫描 switch (key_flag) case 0:t+;if(t=30)t=5;break; /设置时间 case 1:TR2 = 1;break; /恢复 case 2:EW_ON;P1=LED4;TR2 = 0;break; /南北禁行,定时器停止 case 3:SN_ON;P1=LED4;TR2 = 0;break; /东西禁行,定时器停止 /=状态S1= if( (aspect_flag = 0)&(interim_flag = 0)&(key_flag = 0) ) EW_O
25、N; P1=LED0; P2=LED7Code(sec-INTERIM)/10;/东西方向绿灯,少5秒 Delay1Ms(1); P2 = 0XFF; P1=LED1; P2=LED7Code(sec-INTERIM)%10; Delay1Ms(1); P1=LED2; P2=LED7Codesec/10; /南北方向红灯 Delay1Ms(1); P2=0XFF; P1=LED3; P2=LED7Codesec%10; Delay1Ms(1); /=状态S2= if( (aspect_flag = 0)&(interim_flag = 1)&(key_flag = 0) ) if(half_
26、sec % 2 = 1) EW_Y_ON; else EW_Y_OFF; P1=LED0; P2=LED7Codesec/10; /东西方向黄灯 Delay1Ms(1); P2 = 0XFF; P1=LED1; P2=LED7Codesec%10; Delay1Ms(1); P1=LED2; P2=LED7Codesec/10; /南北方向红灯 Delay1Ms(1); P2 = 0XFF; P1=LED3; P2=LED7Codesec%10; Delay1Ms(1); /=状态S3= if( (aspect_flag = 1)&(interim_flag = 0)&(key_flag =
27、0) ) SN_ON; P1=LED0; P2=LED7Codesec/10; /东西方向红灯 Delay1Ms(1); P2 = 0XFF; P1=LED1; P2=LED7Codesec%10; Delay1Ms(1); P1=LED2; P2=LED7Code(sec-INTERIM)/10;/南北方向绿灯,少5秒 Delay1Ms(1); P2 = 0XFF; P1=LED3; P2=LED7Code(sec-INTERIM)%10; Delay1Ms(1); /=状态S4= if( (aspect_flag = 1)&(interim_flag = 1)&(key_flag = 0)
28、 ) if(half_sec % 2 = 1) SN_Y_ON; else SN_Y_OFF; P1=LED0; P2=LED7Codesec/10; Delay1Ms(1); P2 = 0XFF; P1=LED1; P2=LED7Codesec%10; Delay1Ms(1); P1=LED2; P2=LED7Codesec/10; Delay1Ms(1); P2 = 0XFF; P1=LED3; P2=LED7Codesec%10; Delay1Ms(1); 4.2 按键子程序设计4.2.1 按键子程序设计流程图K4按K1按K2按K3按进入时间调整循环执行S1S3+,S4返回循环执行S3它
29、包含倒计时调整和紧急状态两个状态。主程序中放了一个按键的判断指令,当有按键按下的时候,程序就自动的跳转到按键子程序处理。当检测到K2键按下的时候就自动返回到主程序。当出现紧急的情况的时候,按下K3或者K4就切换到紧急状态,当紧急事件处理完毕的时候,按下K2,就可以返回正常状态,流程图如图4-2。 4-2按键子程序流程图4.2.2 按键原理说明图4-3 按键设置 键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘.而靠软件编程来识别的称为非编码键盘;在单片机组成的各种系统中,用的最多的是非编码键盘。也有用到编码键盘的。非编码键盘
30、有分为:独立键盘和行列式又称为矩阵式键盘。其图如图4-4,而我们用的是独立式键盘,如上图4-3。图4-4 矩阵键盘的原理图按键在编写程序时,应注意问题,如消颤,一般有物理消颤和软件消颤,我们这使用 软件消颤。具体操作是,当按键按下,用软件延时一段时间,再次扫描按键情况,如果确实有按键按下,就进入相应的操作。当操作完后要做一个按键是否断开的判断,其依据如图4-5:图4-5 键闭合和断开时的电压抖动4.2.3 按键程序void key_scan()if (KEY1 = 0)Delay1Ms(10); /按下延时消颤if (KEY1 = 0) if(key_flag = 1) key_flag =
31、0; /取消 else key_flag = 1; /确定 while(KEY1 = 0);Delay1Ms(5); /弹起延时消颤while(KEY1 = 0);if (KEY2 = 0)Delay1Ms(10); /按下延时消颤if (KEY2 = 0) if(key_flag = 2) key_flag = 0; /取消 else key_flag = 2; /确定 while(KEY2 = 0);Delay1Ms(5); /弹起延时消颤while(KEY2 = 0);if (KEY3 = 0)Delay1Ms(10); /按下延时消颤if (KEY3 = 0) if(key_flag
32、= 3) key_flag = 0; /取消 else key_flag = 3; /确定 while(KEY3 = 0);Delay1Ms(5); /弹起延时消颤while(KEY3 = 0);if (KEY4 = 0)Delay1Ms(10); /按下延时消颤if (KEY4 = 0) if(key_flag = 4) key_flag = 0; /取消 else key_flag = 4; /确定 while(KEY4= 0);Delay1Ms(5); /弹起延时消颤while(KEY4 = 0);第5章 系统调试5.1 状态灯显示测试与分析当电路连接完毕后,将写好的测试程序刷写到芯片内
33、,开启电源开关K,以及按下K1 和K2分别给端口送高电平和低电平,通电即可检测。5.2 数码管显示测试与分析将串口和电路板上的接口连接,通过专业烧写软件,将写好的相应测试程序及.HEX文件刷写到芯片内,我们这用的ISPlayv15下载线编程软件,其显示的效果图如图5-1,开电源即可测试。图5-1 ISP下载软件5.3 整体电路测试与分析系统上电,刷写好程序即可开始测试,观测一个周期共计S1S4四个状态,默认140秒灯的显示状态是否正常,同时观察倒计的计数是否正常,以及按键调节突发事件,是否正常。结论1.心得体会本系统设计在历经几个月的努力下终于完成了。实验证明,本系统能成功对交通灯实际运行进行
34、控制,并且除根本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间、违规车辆检测以及根据具体情况手动控制等功能。在初期查阅了大量的文献书籍资料及指导老师的帮助下终于编译出完整的程序。然而在程序的调试过程中,却经常会遇到程序执行错误或运行结果不对的地方。有时是因为自己的粗心。比方一次在输入程序的过程中,误将数字“0输入成字母“O,结果程序无法正确运行,经单步调式、不断排查,花了将近一下午的时间才找到问题。也曾因为端口设置错误,使程序无法运行,浪费了很多时间。 这次设计不仅稳固了我所学的知识如MCS-51单片机等让我学到了很多新知识和珍贵的实践经验,也检验、锻炼了我将知
35、识运用到实践的能力,培养了我严谨细致的工作作风,为我以后踏上工作岗位打下了坚实的根底。2.系统改良由于使用的是单片机作为核心的控制元件,使得电路的可靠性比拟高,功能也比拟强大,而且可以随时的更新系统,进行不同状态的组合。但是在我们设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规那么的效率还不是很高等等,这需要在实践中进一步完善。且功能的全面性还不够强,经过这么长的时间的失败到成功的过程,让我更加清楚的明白单片机的运用就是对其端口的控制,同时外围电路的设计以及了解,让我对以前学过的知识能更加了解和认识,比方:电路、数、模电子技术、单片机技术、自动检测技术、电路板设计
36、、智能仪器的设计应用与传感器的使用。参考文献及网站1 许泳龙等.单片机原理及应用.机械工业出版社,2005年 2 侯媛彬等.单片机原理及其毕业设计精选.科学出版社,2006年3 何立民.单片机应用技术大全.北京:北京航空航天大学出版社,1994年4 谭浩强.MCS-51单片机应用教程.北京:清华大学出版社,2004年5 马忠梅等.单片机的C语言应用程序设计.北京航空航天大学出版社,2003修订版6 张毅刚等. MCS-51单片机应用设计.哈工大出版社,2004年 7 边海龙,单片机开发与典型工程工程,电子工业出版社,2021年8 郭天翔单片机网络视频,2007年9 单片机学习网10 21ic
37、21IC单片机学习网附录1.系统总体电路图2.总程序:/*/程序名称: 十字路口简易交通灯/功能介绍:/ KEY1按下,设置时间/ KEY2按下,恢复/ KEY3按下,东西禁止通行/ KEY4按下,南北禁止通行/*#include #include /= #define uchar unsigned char#define uint unsigned int/=指示灯状态定义=#define ALL_OFF (P0 = 0xdb) /全部禁行#define EW_ON (P0 = 0xeb) /东西绿灯,南北红灯#define SN_ON (P0 = 0xdd) /南北绿灯,东西红灯#define EW_Y_ON (P0 = 0xF3) /南北红灯,东西黄灯亮#define EW_Y_OFF (P0 = 0xFB) /南北红灯,东西黄灯灭#define SN_Y_ON (P0 = 0xDE) /东西红灯,南北黄灯亮#define SN_Y_OFF (P0 = 0xDF) /东西红灯,南北黄灯灭#define COUNT_DO