ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:233.34KB ,
资源ID:19014907      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19014907.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(交通灯实验报告Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

交通灯实验报告Word文件下载.docx

1、其中P3.2口为外部中断信号的引脚输入,IT0设置为1,边沿触发方式,负跳变有效(4)剩下的锁存器模块和自定义红绿黄灯时间的显示模块锁存器模块,其中接低电平时,芯片内部数据保持器与输出端口连接。在此则直接接地,保持连接畅通。LE=0时,P1口与芯片内部数据保持器断开;LE=1时,P1口与芯片内部数据保持器连通。上面三个数码管,从左到右分别显示黄灯显示时间,汽车左转信号时间,行人看到绿灯的时间。由此就可以得到,汽车看到绿灯直行信号的时间=行人看到绿灯的时间+黄灯的时间汽车看到红灯的时间=汽车绿灯直行时间+汽车绿灯左转时间行人看到红灯的时间=汽车看到红灯的时间+汽车左转的时间(5)流程图三、实验过

2、程(1)编写交通灯控制程序自己编写头文件FUNCTION.Htraffic_light.c,包含需要用到的所有变量和main函数function.c,包含delay子程序和init初始化程序key.c,包含键盘扫描处理中断程序display.c,包含显示交通灯和数码管程序timer.c,包含利用计时器计时1s的程序(2)分析头文件FUNCTION.H#ifndef _FUNCTION.H_/定义如果其他c文件定义了该头文件,则包含以下内容#define FUNCTION.H#include#define uchar unsigned char#define uint unsigned int#

3、define green 20 /以下为预处理宏定义#define people_green 20/行人看到绿灯时间为20s#define blue 5/汽车看到绿灯左转时间为5s#define yellow 5/行人看到黄灯时间为5s#define car_green people_green+yellow/汽车看到绿灯直行和左转的时间,同时也是汽车红灯/的时间#define red green+blue+yellow/行人看到红灯的时间sbit du=P37;/定义数码管扫描的位选锁存器的LE端sbit we=P36;/定义交通显示数码管数据输送的锁存器的LE端sbit def=P33;/

4、定义自己定义交通灯信号显示时间的数据输送的锁存器的LE端sbit light_off=P30;/定义控制所有交通灯灭的端口void delay(uchar ms);/延时子函数void init();/初始化函数void traffic_light();/交通灯函数void get_number();/取值送入数码管倒计时的函数void xianshi_function();/数码管倒计时到3s后数字闪烁的子函数void key_scan();/键盘扫描子函数void key_function();/键盘按下后发生的作用的子函数#endif(3)分析包含main函数的traffic_light

5、.c文件#includeFUNCTION.H/包含头文件uchar code du_table=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; /选通显示的数码管uchar code we_table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /输送给数码管显示数据的字模uchar n,ston_time=red,etow_time=people_green,flag=0,etcarrun=car_green;uchar sncarrun=r

6、ed,status=0,key=0,temp;/ston_time东西路口行人的倒计时,etow_time南北路口行人的倒计时/sncarrun东西路口汽车的倒计时,etcarrun东西苦口汽车的倒计时/status选择汽车路口的工作状态,key确认按下的键值执行对应的函数/temp一个中间变量uchar xianshi_flag=0,jishi=0,jishi1=0,jishi2=0,jishi3=0,jishi4=0;/xianshi_flag中断显示函数中的标志位/jishi,jishi1,jishi2,jishi3,jishi4均是中间变量,无特殊意义uchar zidingyi=0,

7、symbol=0;/zidingyi选择是否要自己更改交通信号的时间/symbol显示要更改的是哪个交通灯信号的时间uchar num8;/存放显示倒计时数据的容器uchar normal3=5,5,20;/正常情况下,交通灯的倒计时时间,分别为黄灯,汽车左转,行/人绿灯时间uchar busy3=5,10,40;/下同uchar urgent3=5,10,60;/uchar define3=5,5,20;void main() init();/初始化,即打开总中断,外部中断0,定时器0,定时器1 while(1) key_scan();/键盘扫描程序 /*key_scan()函数执行的功能如

8、下 P2=0xfe;/分别将第四位轮流置低,检测到按键按下后 P2=0xfd;/进入中断程序,再执行key_function() P2=0xfb; P2=0xf7; if(key0) key_function(); */(4)分析function.c文件void delay(uchar ms)/延时子程序 uchar i,j; for(i=ms;i0;i-) for(j=110;jj-) ;void init()/初始化程序 EA=1;/开总开关 TMOD=0x11;/开定时器0和定时器1,设置工作模式 TH0=(65536-50000)/256;/定时器0倒计时50ms TL0=(65536

9、-50000)%256; TH1=(65536-2000)/256;/定时器1倒计时2ms TL1=(65536-2000)%256; ET0=1; ET1=1; TR0=1; TR1=1; we=0;/让锁存器内部芯片数据保持器与IO口断开 du=0; EX0=1;/开外部中断0,并选择触发模式 IT0=1; light_off=1;/让交通灯显示(5)分析display.c文件/* sbit yellow1=P00;sbit red1=P01;sbit green1=P02;sbit blue1=P03;sbit yellow2=P04;sbit red2=P05;sbit green2=

10、P06;sbit blue2=P07;标号为1,则为南北的信号灯,其中blue代表绿灯左转信号标号为2,则为东西的信号灯,其中blue代表绿灯左转信号 yellow1=1; red1=0; green1=1; yellow2=1; red2=1; green2=0; blue1=1; blue2=1; */extern uchar flag,zidingyi,xianshi_flag;/变量意义在traffic_light.c中解释过了extern uchar ston_time,jishi1,etow_time,jishi2;extern uchar sncarrun,jishi3,etca

11、rrun,jishi4,symbol,jishi;extern uchar code du_table8,we_table16;extern uchar sncarrun,define3,ston_time,etow_time,etcarrun,num8;void traffic_light()/交通灯显示程序 if(flag=0)/flag=0为南北路口红灯,东西路口汽车行人直行 P0=0xbd; if(flag=1)/flag=1南北路口红灯,东西路口汽车直行,行人遇黄灯 if(TR0=1)/在50ms计时器停止计数时,黄灯停止闪烁 P0=0xed; delay(5); P0=0xfd;

12、P0=0xed; delay(5); if(flag=2)/flag=2南北路口红灯,东西路口汽车左转,行人红灯 P0=0x7d; if(flag=3)/flag=3为东西路口红灯,南北路口汽车行人直行 P0=0xdb; if(flag=4)/flag=1东西路口红灯,南北路口汽车直行,行人遇黄灯 P0=0xde; P0=0xdf; P0=0xde; if(flag=5)/flag=5东西路口红灯,南北路口汽车左转,行人红灯 P0=0xd7;void get_number() if(zidingyi=0)/不自定义的情况下,将交通信号倒计时存入数组容器中 num0=ston_time/10;

13、num1=ston_time%10; num2=etow_time/10; num3=etow_time%10; num4=etcarrun/10; num5=etcarrun%10; num6=sncarrun/10; num7=sncarrun%10; else /在自定义信号时间时,将数据存入数组容器中 num0=define2/10; num1=define2%10; num2=define1/10; num3=define1%10; num4=define0/10; num5=define0%10;void xianshi_function() if(zidingyi=0)/非自定义

14、的情况下 /南北路口的行人在遇黄灯小于等于3s时,倒计时闪烁 if(ston_time4)&(jishi1100)&(flag=4) if(xianshi_flag=0) xianshi_flag=2; jishi1+; if(jishi1=100) jishi1=0; xianshi_flag=0; if(etow_time(jishi2(flag=1) /东西路口的行人在遇黄灯小于等于3s时,倒计时闪烁 if(xianshi_flag=2) xianshi_flag=4; jishi2+; if(jishi2=100) jishi2=0; if(etcarrun(jishi3(flag=2

15、) /东西路口的汽车在遇左转信号小于等于3s时,倒计时闪烁 if(xianshi_flag=4) xianshi_flag=6; jishi3+; if(jishi3=100) jishi3=0; if(sncarrun(jishi4(flag=5) /南北路口的汽车在遇左转信号小于等于3s时,倒计时闪烁 if(xianshi_flag=6) jishi4+; if(jishi4=100) jishi4=0; if(zidingyi=1)/自定义信号时间的情况下 if(symbol=1)/选择调节行人看到绿灯的时间,且显示的时间闪烁 if(jishi100) if(xianshi_flag=0

16、) xianshi_flag=2; jishi+; if(jishi=100) jishi=0; xianshi_flag=0; if(symbol=2)/选择调节行人看到黄灯的时间,且显示的时间闪烁 if(xianshi_flag=2) xianshi_flag=4; if(symbol=3)/选择调节汽车看到左转的时间,且显示的时间闪烁 if(xianshi_flag=4)void TIME1() interrupt 3 get_number();/等到数码管上要显示的数据 xianshi_function(); def=1;/关闭调节信号时间的数码管 P1=0xff; def=0; du

17、=1;/选通显示的数码管 P1=du_tablexianshi_flag; du=0; P1=0x00;/消影 we=1;/选择要显示在数码管上的数据 P1=we_tablenumxianshi_flag; we=0; delay(1);/延迟一小段时间 traffic_light();/显示交通灯的状况 xianshi_flag+;/显示标志位加1,到8变为0,防止逸出 if(xianshi_flag=8) xianshi_flag=0; else/自定义的情况下,分析同上面 if(xianshi_flag=6) (6)分析键盘扫描key.c文件extern uchar key,status

18、,ston_time,etow_time,etcarrun,sncarrun;extern uchar zidingyi,symbol,temp;extern uchar normal3,busy3,urgent3,define3;void key_scan()void key_function() if(key=1)/第一个键按下,停止倒计时 TR0=TR0; key=0; if(key=2)/第二个键按下,全部数码管和信号灯灭 TR1=TR1; light_off=light_off; P0=0xff; if(key=5)/第5个键按下,切换到正常模式 status=1; define0=

19、normal0; define1=normal1; define2=normal2; ston_time=define0+define1+define2; etow_time=define2; etcarrun=define0+define2; sncarrun=define0+define1+define2; if(key=6)/第6个键按下,切换到繁忙模式 define0=busy0; define1=busy1; define2=busy2; if(key=7)/第7个灯按下,切换到特殊模式 define0=urgent0; define1=urgent1; define2=urgent2; if(TR0=0)/必须停止倒计时计数后,按下第8个按键才有效 if(key=8)/按下第8个按键,进行自定义信号灯的计时时间 zidingyi=1; if(zidingyi=1) du=1; P1=0xff; du=0; we=1; P1=0x00; we=0; key=0; if(key=9)/第9个按键按下,切换回正常计数模式 zidingyi=0; ston_time=define0+define1+define2; etow_time=define2; etcarrun=define0+define2;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1