收藏 分销(赏)

模拟交通灯程序及电路图.doc

上传人:仙人****88 文档编号:8365517 上传时间:2025-02-10 格式:DOC 页数:9 大小:58.50KB 下载积分:10 金币
下载 相关 举报
模拟交通灯程序及电路图.doc_第1页
第1页 / 共9页
模拟交通灯程序及电路图.doc_第2页
第2页 / 共9页


点击查看更多>>
资源描述
交通灯程序: //晶振:12M /*************************变量的定义: show_val_sn,show_val_ew: 显示的值0-59 state_val_sn,state_val_ew: 状态值 南北方向0-绿灯亮;1-黄灯亮;2-红灯亮 T1_cnt: 定时器计数溢出数 cnt_sn,cnt_ew: 倒计时的数值 init_sn[3],init_ew[3] 倒计时 led_seg_code:数码管7段码*************************/ #include "reg51.h" 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 cnt_sn,cnt_ew; unsigned int data T0_cnt; unsigned char data state_val_sn,state_val_ew; char code led_seg_code[10]={0x3f,0x06,0x5b,0x4f,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 x)//延时 { unsigned int i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } //------------------------ void led_show(unsigned int u,unsigned int v) { unsigned char i; i=u%10; //暂存个位 P0=led_seg_code[i]; P2=0xbf; delay(5); //延时 P0=0;//数码管灯灭 i=u%100/10; //暂存十位 P0=led_seg_code[i]; P2=0x7f; delay(5); //延时 P0=0; i=v%10; //暂存个位 P0=led_seg_code[i]; P2=0xfe; delay(5); //延时 P0=0; i=v%100/10; //暂存十位 P0=led_seg_code[i]; P2=0xfd; delay(5); //延时 P0=0; } //------------------------- void timer0() interrupt 1 //T1中断 { TH0 = 0x3c; // 设置定时器初值(定时50ms) TL0 = 0xb0; T0_cnt++; if(T0_cnt==20) //如果计数>3999, 计时1s { T0_cnt=0; if (cnt_sn!=0) //南北方向计时 { cnt_sn--; } else { state_val_sn++; if (state_val_sn>2) state_val_sn=0; cnt_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_red=1 ;//南北方向红灯 SN_yellow=~SN_yellow ;//南北方向黄灯 break; case 2:SN_green=1 ;//南北方向绿灯 SN_yellow=1 ;//南北方向黄灯 SN_red=0 ;//南北方向红灯 break; } } if (cnt_ew!=0) //东西方向计时 { cnt_ew--; } else { state_val_ew++; if (state_val_ew>2) state_val_ew=0; cnt_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() {//初始化各变量 cnt_sn=init_sn[0]; cnt_ew=init_ew[0]; T0_cnt=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=0x01;//用T1计时 8位自动装载定时模式 TH0 = 0x3c; // 设置定时器初值(定时50ms) TL0 = 0xb0; EA=1; //开中断 ET0=1; TR0=1; //开定时器T1 while(1) { led_show(cnt_sn,cnt_ew); if(state_val_sn==1) { unsigned char m; for(m=0;m<=2;m++) { SN_yellow=~SN_yellow ;//南北方向黄灯 } } if(state_val_ew==2) { unsigned char n; for(n=0;n<=2;n++) { EW_yellow=~EW_yellow ;//东西方向黄灯 } } } } 电路图: 图1
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服