基于at89s51单片机的交通灯设计内容摘要:

态扫描:需要使用 4 个数码管分别显示东西、南北的倒计时数字,将暂存各状态剩余时间的数字从变量中提取出 “十位 ”和 “个位 ”,用动态扫描的方式在数码管中显示。 整个程序依据定时器的溢出数来计时,每计时 1S 则相应状态的剩余时间减 1,一直减到 0 时触发下一个状态的开始。 ( 2)单片机型号及所需外围器件型号,单片机硬件电路原理图 图 35 交通灯硬件电路原理图 选用 MCS51 系列 AT89S51 单片机作为微控制器,选择两个四联的共阴极数码管组成 8 位显示模块,由于 AT89S51 单片机驱动能力有限,采用两片 74HC244 实现总线的驱动,一个 74HC244 完成共阴极数码管位控线的控制和驱动,另一个 74HC244 完成数码管的 7 段码输出,在 7 段码输出口上各串联一个 100 欧姆的电阻对 7 段数码管限流。 用 P3 口的 完成发光二极管的控制,实现交通灯信号的显 示,每个发光二极管串联 500 欧姆电阻起限流作用。 硬 件电路原理图如图 35 所示。 ( 3)程序设计思路,单片机资源分配以及程序流程 ① 单片机资源分配 单片机 P3 口的 引脚用作输出,控制发光二极管的显示。 在计时模块中,需要定义两个数组变量( init_sn[3], init_ew[3])来存储东西、南北两个方向在不同状态中倒计时的初始值,题目中每个方向的交通灯共有 3 种显示状态,因此数组元素个数为 3。 还需要定义两个变量 ( t_ sn, t_ ew)暂存东西、南北两个方向的倒计时剩余时间。 在状态的切换中,为了明确当前处于哪种状态,东西、 南北方向各设置一个状态变量 (state_val_sn, state_val_ew),当倒计时的剩余时间到零时,状态变量增 1,表示启动下一个状态,当该变量增到 3 时变为 0,回到序号为 1 的状态。 ② 程序设计思路 在设计中,由于没有键盘功能,因此只涉及定时计数和动态扫描功能。 主程序将变量初始化之 后,设置单片机定时器和中断特殊功能寄存器的初始值,将定时器 T1 的工作方式设置为 8 位自动 装载模式,定时器每隔 250us 产生一次溢出。 在初始化变量与寄存器后,主程序进入一个循环结构,在循环中只做动态扫描的工作,根据东西、 南北两向的剩余时时间进行动态扫描显示。 计时以及状态的切换通过定时器的中断服务程序来实现,在中断服务程序中,每计时到一秒时,则各方向当前状态的剩余时间减 1,一直减到 0 时触发下一个状态的开始,改变交通灯的指示。 ③ 程序流程 ( 4)软硬件调试方案 软件调试方案:伟福软件中,在 “文件 \新建文件 ”中,新建 C 语言源程序文件,编写相应的程序。 在 “文件 \新建项目 ”的菜单中,新建项目并将 C 语言源程序文件包括在项目文件中。 在 “项目 \编译 ”菜单中将 C 源文件编译,检查语法错误及逻辑错误。 在编译成功后,产生以 “*.hex”和 “*.bin” 后缀的目标文件。 硬件调试方案:在设计平台中,将单片机的 分别与独立式键盘的相应位通过插线连接起来。 在伟福中将程序文件编译成目标文件后,运行 “MCU下载程序 ”,选择相应的 flash 数据文件,点击 “编程 ”按钮,将程序文件下载到单片机的 Flash 中。 然后,上电重新启动单片机,检查所编写的程序是否达到题目的要求,是否全面完整地完成试题的内容。 程序设计(仅供参考的 C 语言源程序) //晶振: T1250 微秒溢出一次 /*变量的定义 : show_val_sn,show_val_ew: 显示的值 059 state_val_sn,state_val_ew: 状态值 南北方向 0绿灯亮。 1黄灯亮。 2红灯亮 T1_t: 定时器计数溢出数 t_sn,t_ew: 倒计时的数值 init_sn[3],init_ew[3] 倒计时 led_seg_code:数码管 7 段码 */ include sbit SN_green=P3^2。 //南北方向绿灯 sbit SN_yellow=P3^1。 //南北方向黄灯 sbit SN_red=P3^0。 //南北方向红灯 sbit EW_green=P3^5。 //东西方向绿灯 sbit EW_yellow=P3^4。 //东西方向黄灯 sbit EW_red=P3^3。 //东西方向红灯 unsigned char data t_sn,t_ew。 unsigned int data T1_t。 unsigned char data state_val_sn,state_val_ew。 char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}。 char code init_sn[3]={24,4,29}。 char code init_ew[3]={29,24,4}。 // void delay(unsigned int i)//延时 { while(i)。 } // void led_show(unsigned int u,unsigned int v) { unsigned char i。 i=u%10。 //暂存个位 P0=led_seg_code[i]。 P2=0xbf。 delay(100)。 //延时 i=u%100/10。 //暂存十位 P0=led_seg_code[i]。 P2=0x7f。 delay(100)。 //延时 i=v%10。 //暂存个位 P0=led_seg_code[i]。 P2=0xfe。 delay(100)。 //延时 i=v%100/10。 //暂存十位 P0=led_seg_code[i]。 P2=0xfd。 delay(100)。 //延时 } // void timer1() interrupt 3 //T1 中断 { T1_t++。 if(T1_t3999) //如果计数 3999, 计时 1s { T1_t=0。 if (t_sn!=0) //南北方向计时 { t_sn。 } else { state_val_sn++。 if (state_val_sn2) state_val_sn=0。 t_sn=init_sn[state_val_sn]。 switch (state_val_sn) //根据状态值,刷新各信号灯的状态 { case 0: SN_green=0。 //南北方向绿灯 SN_yellow=1。 //南北方向黄灯 SN_red=1。 //南北方向红灯 break。 case 1: SN_green=1。 //南北方向绿灯 SN_yellow=0。 //南北方向黄灯 SN_red=1。 //南北方向红灯 break。 case 2:SN_green=1。 //南北方向绿灯 SN_yellow=1。 //南北方向黄灯 SN_red=0。 //南北方向红灯 break。 } } if (t_ew!=0) //东西方向计时 { t_ew。 } else { state_val_ew++。 if (state_val_ew2) state_val_ew=0。 t_ew=init_ew[state_val_ew]。 switch (state_val_ew) //根据状态值,刷新各信号灯的状态 { case 0: EW_green=1。 //东西方向绿灯 EW_yellow=1。 //东西方向黄灯 EW_red=0。 //东西方向红灯 break。 case 1: EW_green=0。 //东西方向绿灯 EW_yellow=1。 //东西方向黄灯 EW_red=1。 //东西方向红灯 break。 case 2: EW_green=1。 //东西方向绿灯 EW_yellow=0。 //东西方向黄灯 EW_red=1。 //东西方向红灯 break。 } } } } // main() {//初始化各变量 t_sn=init_sn[0]。 t_ew=init_ew[0]。 T1_t=0。 state_val_sn=0。 //启动后,默认工作在序号为 1 的状态 state_val_ew=0。 //初始化各灯的状态 SN_green=0。 //南北方向绿灯亮 SN_yellow=1。 //南北方向黄灯灭 SN_red=1。 //南北方向红灯灭 EW_green=1。 //东西方向绿灯灭 EW_yellow=1。 //东西方向黄灯灭 EW_red=0。 //东西方向红灯亮 //初始化 51 的寄存器 TMOD=0x20。 //用 T1 计时 8 位自动装载定时模式 TH1=0x19。 //0x4b。 //500 微秒溢出一次。 250=(256x)*12/ x= TL1=0x19。 EA=1。 //开中断 ET1=1。 TR1=1。 //开定时器 T1 while(1) { led_show(t_sn,t_ew)。 }} 实训四 交通灯控制系统 当今 ,社会上的汽车越来越多,并且交通事故愈演愈烈,为了要减少此类的事情的发生,必须加强道路的管理。 因此、合理设计交通灯控制系统可以大大减少此类事情发生。 一、 系统功能要求: 1. 设计任务在一十字路口设置交通灯,并用单片机对其进行合理的控制。 时间方向 控制要求 白天 东西 绿灯 黄灯 红灯 南北 红灯 绿灯 黄灯 晚上 东西 黄灯 南北 红灯。 本设计采用一主干道(南北方向),一从干道(东西方向)的路口,即主干道的通行时间为从干道的 2倍。 在正常情况下,两干道的交通灯按图 1进行转换,并以倒计数的方式将剩余时间显示在每个干道对应的两位 LED 上;另发挥部分为当出现紧急情况时,路口的交通灯全为红灯,紧急情况解除时,恢复到原来的状态。 二、 总体设计方案提示:。 初始状态 0 为东西红灯,南北红灯。 然后转状态 1 东 西绿灯通车,南北红灯。 过一段时间转状态。 ,黄灯闪烁几次,南北仍然红灯。 再转状态。 ,东西红灯。 过一段时间转状态。 ,闪几次黄灯,延时几秒,东西仍然红灯。 最后循环至状态 1。 三.硬件设计 电路原理图如下: G1F2C O M3A4B5E6D7C O M8C9DP10U38L E D10111213141516G1F2C O M3A4B5E6D7C O M8C9DP10U48L E D10111213141516G1F2C O M3A4B5E6D7C O M8C9DP10U78L E D10111213141516G1F2C O M3A4B5E6D7C O M8C9DP10U88L E D10111213141516G1F2C O M3A4B5E6D7C O M8C9DP。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。