单片机城市交通灯控制系统--软件设计(编辑修改稿)内容摘要:

洁明了对后面程序的编写有很大的帮助。 初始化程序作用主要有: ( 1)设定与定时器、中断、串口相关的特殊功能寄存器; ( 2)设定各 IO 口的初始状态,比如将连接键盘的输入输出口均设为 1,红外发射电路的初始状态; 9 ( 3)内存中需要赋初值的寄存器赋初值,比如上电后要显示的内容最好先赋个初值; ( 4)打开中断允许、启动定时器(这一步也可根据具体需要放在前面或其它地方) ; ( 5)开始主程序循环 [9]。 在本设计中,定义、初始化程序如下: define uchar unsigned char define uint unsigned int include /*****定义控制位 **********************/ sbit EW_LED2=P2^3。 //EW_LED2控制位 sbit EW_LED1=P2^2。 //EW_LED1控制位 sbit SN_LED2=P2^1。 //SN_LED2控制位 sbit SN_LED1=P2^0。 //SN_LED1控制位 sbit SN_Yellow=P1^6。 //SN黄灯 sbit EW_Yellow=P1^2。 //EW黄灯 sbit EW_Red=P1^3。 //EW红灯 sbit SN_Red=P1^7。 //SN红灯 sbit EW_Green=P1^1。 //EW绿灯 sbit SN_Green=P1^5。 //SN绿灯 sbit EW_LGreen=P1^0。 //EW左转绿灯 sbit SN_LGreen=P1^4。 //SN左转绿灯 sbit EW_ManGreen=P3^0。 //EW人行道绿灯 sbit SN_ManGreen=P3^1。 //SN人行道绿灯 bit Flag_SN_Yellow。 //SN黄灯标志位 bit Flag_EW_Yellow。 //EW黄灯标志位 bit flag1。 //按键中断标志位 bit flag2。 //按键中断标志位 bit SW1。 //倒计时单元标志位 int Time_EW。 //东西方向倒计时单元 int Time_SN。 //南北方向倒计时单元 uchar EW=60,SN=40,EWL=19,SNL=19。 //程序初始化赋值,正常模式 uchar EW1=40,SN1=60,EWL1=19,SNL1=19。 //用于存放修改值的变量 uchar code table[10]={0x3F,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07, 0x7F,0x6F}。 //0~~~~9段选码 uchar code S[8]={0XD7,0XB7,0XE7,0XB7, 0X7D,0X7B,0X7E,0X7B}。 //交通信号灯控制代码 uint s1num=0,s2num=0,count,b,c,d,e。 另外,为了编程方便,外部中断和定时中断模块的初始化放在主程序中 [10]。 系统运行的整体程序 本系统主要由数码管显示程序,外部中 断 0 外部中断 1 程序和定时器 0 中断程序 和 10 主程序 组成。 系统自动运行流程如图 所示 [11]: 图 系统自动运行流程图 系统自动运行的状态切换程序如下 [12]: /*******S0状态 **********/ if(Time_SN5amp。 amp。 SW1==0amp。 amp。 Time_EW20) { EW_ManGreen=1。 //EW人行道禁止 SN_ManGreen=0。 //SN人行道通行 Flag_EW_Yellow=0。 //EW关黄灯显示信号 P1=S[0]。 //SN通行, EW红灯 Display()。 //数码管显示 } /*******S1状态 **********/ if(Time_SN=0amp。 amp。 Time_SN=5amp。 amp。 SW1==0amp。 amp。 Time_EW=20) { EW_ManGreen=1。 //EW人行道通行 SN_ManGreen=0。 //SN人行道禁止 EW_Green=1。 SN_Green=1。 SN_Red=1。 Flag_SN_Yellow=1。 //SN开黄灯信号位 EW_Red=0。 //SN黄灯亮,等待左拐信号 , EW红灯 Display()。 } /*******S2状态 **********/ 11 if(Time_SN5amp。 amp。 Time_SN20amp。 amp。 SW1==1amp。 amp。 Time_EW20) { EW_ManGreen=1。 //EW人行道通行 SN_ManGreen=0。 //SN人行道禁止 P1=S[2]。 //SN左拐绿灯亮, EW红灯 Display()。 Flag_SN_Yellow=0。 //SN关黄灯显示信号 } /*******S3状态 **********/ if(Time_SN=0amp。 amp。 Time_SN=5amp。 amp。 SW1==1amp。 amp。 Time_EW=5) { EW_ManGreen=1。 //EW人行道通行 SN_ManGreen=0。 //SN人行道禁止 EW_LGreen=1。 SN_LGreen=1。 EW_Green=1。 SN_Green=1。 SN_Red=1。 Flag_SN_Yellow=1。 //SN开黄灯信号位 EW_Red=0。 //SN黄灯亮 ,等待停止信号, EW红灯 Display()。 } /*******S4状态 **********/ if(Time_EW5amp。 amp。 SW1==1amp。 amp。 Time_SN20) { EW_ManGreen=0。 //EW人行道通行 SN_ManGreen=1。 //SN人行道禁止 Flag_SN_Yellow=0。 //SN关黄灯显示信号 P1=S[4]。 //EW通行, SN红灯 Display()。 } /*******S5状态 **********/ if(Time_EW=0amp。 amp。 Time_EW=5amp。 amp。 SW1==1amp。 amp。 Time_SN=20) { EW_ManGreen=0。 //EW人行道通行 SN_ManGreen=1。 //SN人行道禁止 EW_Green=1。 SN_Green=1。 EW_Red=1。 Flag_EW_Yellow=1。 //EW开黄灯信号位 SN_Red=0。 //EW黄灯亮,等待左拐信号, SN红灯 Display()。 } /*******S6状态 **********/ if(Time_EW5amp。 amp。 Time_EW20amp。 amp。 SW1==0amp。 amp。 Time_SN20) 12 { EW_ManGreen=0。 //EW人行道通行 SN_ManGreen=1。 //SN人行道禁止 Flag_EW_Yellow=0。 //EW关黄灯显示信号 P1=S[6]。 //EW左拐绿灯亮, SN红灯 Display()。 } /*******S7状态 **********/ if(Time_EW=0amp。 amp。 Time_EW=5amp。 amp。 Time_SN=5amp。 amp。 SW1==0) { EW_ManGreen=0。 //EW人行道通行 SN_ManGreen=1。 //SN人行道禁止 EW_LGreen=1。 SN_LGreen=1。 EW_Green=1。 SN_Green=1。 EW_Red=1。 Flag_EW_Yellow=1。 //EN开黄灯信号位 SN_Red=0。 //EW黄灯亮,等待停止信号, SN红灯 Display()。 } 两个按键分 别用外部中断 0 和中断 1,系统在自动运行过程中检测到任何外部中断则转为手动控制模式 [13]。 按键中断流程如图 所示: 图 按键中断流程图 按键中断程序如下所示 [14]: 13 void EXINT0(void)interrupt 0 using 1 { EX0=0。 s1num++。 if(s1num==1) { flag1=1。 TR0=0。 b=Time_EW。 //存放自动运行状态数码管数值 c=Time_SN。 Time_EW=99。 Time_SN=99。 } if(s1num==2) { flag1=0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。