已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*单片机交通灯实时控制系统* 模块名称: jtd.c 说 明: 数码管段地址74HC373(U2)FE00、位地址74HC373(U3)为FD00 G1选通FE00、G2选通FD00、G3选通FB00、G4选通EF00、G5选通F700 共阴极数码管显示0 1 2 3 4 5 6 7 8 9 0X7E 0XOC 0XB6 0X9E 0XCC 0XDA 0XFA 0X0E 0XFE 0XDE 四个方向的标识: 南(S)北(N) 东(E) 西(W) 两位数码管的标识:北向N1N2,南向S1S2、西向W1W2、东向E1E2 指示灯标识:G(绿)Y(黄)R(红)L(左转弯) F(直行)M(人行) 例如:北向左转弯灯行 用NLG; 左转弯等待 用NLY ;左转弯停 用NLR 程序设计:GYX 设计时间:20100604 修改时间:20100604*/#include /内含单片机寄存器地址#include /访问绝对地址 XBYTEunsigned char Set_time8;bit Set_flag,flag,fsec;unsigned char NSLGtime,NSLYtime,NSFGtime,NSFYtime,NStime;unsigned char WELGtime,WELYtime,WEFGtime,WEFYtime,WEtime;unsigned char T,count,Tab,Set_num,key,p;/函数声明void cpuInit(void); /cpu初始化void Display(void); /显示运行时间void Set_bitDisplay();/显示设定时间void key_analyse(void); /键处理程序void Kv_Set(void); /设置键void Kv_Enter(void); /确定键void Kv_Up(void); /加键void Kv_Down(void); /减键void smec(unsigned char x); /延时子程序 /0 1 2 3 4 5 6 7 8 9unsigned char TAB110=0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0x0E,0xFE,0xDE;/* 函 数 名:main() 功 能,主程序不断查询有键按下 说 明:主函数 入口参数:无 返 回 值:无 设 计:GYX 日期:20100605 修 改: 日期:*/main() cpuInit(); while(1) key_analyse(); /查询是否有键按下 if(Set_flag) Set_bitDisplay(); else Display(); /显示 switch(T) case 1 :XBYTE0XFB00=0XAD;/NS左转行,直行停 人行左停 XBYTE0XF700=0XFE;/NS人行右停 XBYTE0XEF00=0XBC;/WE左转停,直行停,人行左停 XBYTE0XF700=0XFA;/NS人行右停,WE人行右停 break; case 2 :XBYTE0XFB00=0XB9;/NS左转等待,直行停 ,人行左停 XBYTE0XF700=0XFE;/NS人行右停 XBYTE0XEF00=0XBC;/WE左转停,直行停,人行左停 XBYTE0XF700=0XFA;/NS人行右停,WE人行右停 break; case 3 :XBYTE0XFB00=0X5E;/NS左转停,直行行, 人行左行 XBYTE0XF700=0XF9;/NS人行右行,WE人行右停 XBYTE0XEF00=0XBC;/WE左转停,直行停,人行左停 break; case 4 :XBYTE0XFB00=0XB6;/NS左转停,直行等待 ,人行左停 XBYTE0XF700=0XFA;/NS人行右停,WE人行右停 XBYTE0XEF00=0XBC;/WE左转停,直行停,人行左停 break; case 5 :XBYTE0XFB00=0XBC;/NS左转停,直行停 ,人行左停 XBYTE0XF700=0XFA;/NS人行右停,WE人行右停 XBYTE0XEF00=0XAD;/WE左转行,直行停,人行左停 break; case 6 :XBYTE0XFB00=0XBC;/NS左转停,直行停 ,人行左停 XBYTE0XF700=0XFA;/NS人行右停,WE人行右停 XBYTE0XEF00=0XB9;/WE左转等待,直行停,人行左停 break; case 7 :XBYTE0XFB00=0XBC;/NS左转停,直行停, 人行左停 XBYTE0XF700=0XF6;/NS人行右停,WE人行右行 XBYTE0XEF00=0X5E;/WE左转停,直行行,人行行 break; case 8 :XBYTE0XFB00=0XBC;/NS左转停,直行停 人行左停 XBYTE0XF700=0XFA;/NS人行右停,WE人行右停 XBYTE0XEF00=0XB6;/WE左转停,直行等待,人行左停 count=0; break; default:break; /* 函 数 名:cpuInit(void) 功 能:cpu初始化 说 明: 入口参数: 返 回 值:无 设 计:GYX 日期:20100604 修 改: 日期:20100604*/void cpuInit(void) TMOD=0x01; /定时器0按方式1工作 TH0=0x4c; /定时50ms (11.0592M) TL0=0x00; ET0=1; TR0=1; EA=1; XBYTE0XFD00=0XFF; /关8位显示 XBYTE0XFB00=0XFF; /关LED XBYTE0XEF00=0XFF; /关LED XBYTE0XF700=0XFF; /关LED Set_flag=0; /初始值设置 NSLGtime=20;/南北左转弯时间 NSLYtime=3; /南北左转弯注意时间 NSFGtime=25;/南北直行时间 NSFYtime=3; /南北注意时间 WELGtime=30;/东西左转弯时间 WELYtime=3; /东西左转弯注意时间 WEFGtime=35;/东西直行时间 WEFYtime=3; /东西注意时间 /初始值存入数组 Set_time0=NSLGtime; Set_time1=NSLYtime; Set_time2=NSFGtime; Set_time3=NSFYtime; Set_time4=WELGtime; Set_time5=WELYtime; Set_time6=WEFGtime; Set_time7=WEFYtime; /工作过程1取值 T=1; NStime=NSLGtime; WEtime=(NSLGtime+NSLYtime+NSFGtime+NSFYtime); count=1; P=0;/* 函 数 名:Display(void) 功 能:显示交通灯时间 说 明: 入口参数:无 返 回 值:无 设 计:GYX 日期:20100604 修 改: 日期:20100604*/void Display(void) XBYTE0XFE00=TAB1NStime/10; /N1 S1送段码 if(T=2|T=4) /NS注意时间 XBYTE0XFD00=0XFF;/N1 S1位关闭 else XBYTE0XFD00=0XFA;/N1 S1位为0选通 smec(2); XBYTE0XFE00=TAB1NStime%10; /N2 S2送段码 if(T=2|T=4)/NS注意时间 XBYTE0XFD00=0XFF;/N2 S2位关闭 else XBYTE0XFD00=0XF5;/N2 S2位为0选通 smec(2); XBYTE0XFE00=TAB1WEtime/10; /W1 E1送段码 if(T=6|T=8)/WE 注意时间 XBYTE0XFD00=0XFF;/W1 E1位关闭 else XBYTE0XFD00=0XAF;/W1 E1位为0选通 smec(2); XBYTE0XFE00=TAB1WEtime%10; /W2 E2送段码 if(T=6|T=8)/WE 注意时间 XBYTE0XFD00=0XFF;/W2 E2位关闭 else XBYTE0XFD00=0X5F;/W2 E2位为0选通 smec(2);/* 函 数 名:Set_bitDisplay() 功 能:设定南北方向、东西方向的左转弯、左转弯等待时间 设定南北方向、东西方向的直行、直行等待时间 说 明: 入口参数: 返 回 值:无 设 计:GYX 日期:20100604 修 改: 日期:20100604*/void Set_bitDisplay() switch(Tab) /根据设置过程其相应指示灯亮 case 1 :XBYTE0XFB00=0XEF; break; /NSLG亮 case 2 :XBYTE0XFB00=0XFB; break; /NSLY亮 case 3 :XBYTE0XFB00=0XDF; break; /NSFG亮 case 4 :XBYTE0XFB00=0XF7; break; /NSFY亮 case 5 :XBYTE0XEF00=0XEF; break; /WELG亮 case 6 :XBYTE0XEF00=0XFB; break; /WELY亮 case 7 :XBYTE0XEF00=0XDF; break; /WEFG亮 case 8 :XBYTE0XEF00=0XF7; break; /WEFY亮 default:break; if(Tab1) NStime- ; /NS方向显示时间 秒-1 else flag=1; if(WEtime1) WEtime-; /WE方向显示时间 秒-1 else flag=1; if(flag=1) flag=0; switch(+count) /根据工作过程取显示值 case 1 :NStime=NSLGtime;WEtime=(NSLGtime+NSLYtime+NSFGtime+NSFYtime);T=1; break; case 2 :NStime=NSLYtime;T=2; break; case 3 :NStime=NSFGtime;T=3;break; case 4 :NStime=NSFYtime;T=4; break; case 5 :WEtime=WELGtime;NStime=(WELGtime+WELYtime+WEFGtime+WEFYtime);T=5; break; case 6 :WEtime=WELYtime;T=6; break; case 7 :WEtime=WEFGtime;T=7; break; case 8 :WEtime=WEFYtime-1;T=8; break; default:break; /* 函 数 名:key_analyse() 功 能:按键键处理程序 说 明: 调 用smec(); 入口参数: 返 回 值:无 设 计:GYX 日期:20100605 修 改: 日期:20100605*/void key_analyse(void) unsigned char key_value; key_value=P1; if(key_value&0x0f)!=0x0f)/ 有键按下 smec(150); if(key_value&0x0f)!=0x0f)/ 有键按下 smec(80); key_value=key_value&0x0f; key=key_value; switch(key) case 0x0e: key=0; Kv_Set(); break; /功能键 case 0x0d: key=0; Kv_Up(); break; /加键 case 0x0b: key=0; Kv_Down(); break; /减键 case 0x07: key=0; Kv_Enter(); break; /确定键 default: break; /* 函 数 名:Kv_Set() 功 能:设置键 说 明: Set_flag=0 功能状态, Set_flag=1 按键状态 调 用 Set_bitDisplay(); 入口参数: 返 回 值:无 设 计:GYX 日期:20100605 修 改: 日期:20100605*/void Kv_Set(void) Set_flag=1; XBYTE0XFD00=0XFF; /关8位显示 XBYTE0XFB00=0XFF; /关LED XBYTE0XEF00=0XFF; /关LED XBYTE0XF700=0XFF; /关LED if(Tab7)Tab=0; NSLGtime = Set_time0; NSLYtime = Set_time1; NSFGtime = Set_time2; NSFYtime = Set_time3; WELGtime = Set_time4; WELYtime = Set_time5; WEFGtime = Set_time6; WEFYtime = Set_time7; switch(+Tab) case 1: if(flag) flag=0; Set_time7=Set_num; Set_num=NSLGtime; break; case 2: Set_time0=Set_num; Set_num=NSLYtime; break; case 3: Set_time1=Set_num; Set_num=NSFGtime; break; case 4: Set_time2=Set_num; Set_num=NSFYtime; break; case 5: Set_time3=Set_num; Set_num=WELGtime; break; case 6: Set_time4=Set_num; Set_num=WELYtime; break; case 7: Set_time5=Set_num; Set_num=WEFGtime; break; case 8: Set_time6=Set_num; Set_num=WEFYtime; break; flag=1; default: break; Set_bitDisplay();/* 函 数 名:Kv_Enter(void) 功 能:确定键 说 明: 调 用Set1302(Set_time); 入口参数: 返 回 值:无 设 计:GYX 日期:20100605 修 改: 日期:20100605*/void Kv_Enter(void) Set_flag=0; switch(Tab) case 1: Set_time0=Set_num; break; case 2: Set_time1=Set_num; break; case 3: Set_time2=Set_num; break; case 4: Set_time3=Set_num; break; case 5: Set_time4=Set_num; break; case 6: Set_time5=Set_num; break; case 7: Set_time6=Set_num; break; default: break; T=1;flag=1;count=0; NSLGtime=Set_time0; NSLYtime=Set_time1; NSFGtime=Set_time2; NSFYtime=Set_time3; WELGtime=Set_time4; WELYtime=Set_time5; WEFGtime=Set_time6; WEFYtime=Set_time7; Tab=0; P=0;/* 函 数 名:void Kv_Up(void) 功 能:加键 说 明: 调 用: Set_bitDisplay();s 入口参数: 返 回 值:无 设 计:GYX 日期:20100605 修 改: 日期:20100605*/void Kv_Up(void) if(Set_flag) Set_num+; switch(Tab-1) case 0: if(Set_num99) Set_num=99; break; /NSLG case 1: if(Set_num5) Set_num=5; break; /NSLY case 2: if(Set_num99) Set_num=99; break; /NSFG case 3: if(Set_num5) Set_num=5; break; /NSFY case 4: if(Set_num99) Set_num=99; break; /WELG case 5: if(Set_num5) Set_num=5; break; /WELY case 6: if(Set_num99) Set_num=99; break; /WEFG case 7: if(Set_num5) Set_num=5; b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年安全员B证考试试卷【必刷】附答案详解
- 小学二年级主题班会记录【三篇】
- 《个人有关事项报告表》
- 2025年一级建造师考试试题一(模拟题)附答案详解
- 《宁德事业单位招聘2025年考试真题及答案解析》
- 医学免疫学考试试题及答案
- 2025年证券从业之金融市场基础知识能力提升试卷A卷附答案
- 店长转正试题及答案
- 建筑a证考试题及答案
- 建筑实施工程师资格考试试题及答案解析
- 健身房开业投资预算方案
- 2025城发环保能源(汝南)有限公司招聘4人笔试历年备考题库附带答案详解试卷3套
- 河北省沧衡名校联盟2025-2026学年高三上学期11月期中考试语文试题(含答案)
- 2025年酉阳土家族苗族自治县辅警招聘考试真题附答案详解(满分必刷)
- 世界艾滋病日健康讲座
- 2025-2026学年河南省天一大联考高一上学期9月月考历史试题
- 省级总代理合同协议范本2024
- 物业公司服务标准手册
- 爱情合同协议电子合同
- 有趣的汽车越野教案
- 城市商业综合体管理运营策略分析
评论
0/150
提交评论