C语言参考源代码:
/*****************************************************
十字路口交通灯控制 C 程序
******************************************************/
#define uchar unsigned char
#define uint unsigned int
#include /定义控制位*****************/ sbit Time_Show_LED2=P2^5;//Time_Show_LED2控制位 sbit Time_Show_LED1=P2^4;//Time_Show_LED1控制位 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_ManGreen=P3^0;//EW人行道绿灯 sbit SN_ManGreen=P3^1;//SN人行道绿灯 sbit Special_LED=P2^6;//交通正常指示灯 sbit Busy_LED=P2^7;//交通繁忙指示灯 sbit Nomor_Button=P3^5;//交通正常按键 sbit Busy_Btton=P3^6;//交通繁忙按键 sbit Special_Btton=P3^7;//交通特殊按键 sbit Add_Button=P3^3;//时间加 sbit Reduces_Button=P3^4;//时间减 bit Flag_SN_Yellow; //SN黄灯标志位 bit Flag_EW_Yellow;//EW黄灯标志位 char Time_EW;//东西方向倒计时单元 char Time_SN;//南北方向倒计时单元 uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化赋值,正常模式 uchar EW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量 uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码 uchar code S[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信号灯控制代码 /延时子程序**/ void Delay(uchar a) { uchar i; i=a; while(i–){;} } /显示子函数*********/ void Display(void) { char h,l; h=Time_EW/10; l=Time_EW%10; P0=table[l]; EW_LED2=1; Delay(2); EW_LED2=0; P0=table[h]; EW_LED1=1; Delay(2); EW_LED1=0; h=Time_SN/10; l=Time_SN%10; P0=table[l]; SN_LED2=1; Delay(2); SN_LED2=0; P0=table[h]; SN_LED1=1; Delay(2); SN_LED1=0; h= EW1/10; l= EW1%10; P0=table[l]; Time_Show_LED1=1; Delay(2); Time_Show_LED1=0; P0=table[h]; Time_Show_LED2=1; Delay(2); Time_Show_LED2=0; } /外部0中断服务程序**/ void EXINT0(void)interrupt 0 using 1 { EX0=0; //关中断 if(Add_Button0) //时间加 { EW1+=5; SN1+=5; if(EW1>=100) { EW1=99; SN1=79; } } if(Reduces_Button0) //时间减 { EW1-=5; SN1-=5; if(EW1<=40) { EW1=40; SN1=20; } } 1 if(Nomor_Button0)//测试按键是否按下,按下为正常状态 { EW1=60; SN1=40; EWL1=19; SNL1=19; Busy_LED=0;//关繁忙信号灯 Special_LED =0;//关特殊信号灯 } if(Busy_Btton0) //测试按键是否按下,按下为繁忙状态 { EW1=45; SN1=30; EWL1=14; SNL1=14; Special_LED=0;//关特殊信号灯 Busy_LED=1;//开繁忙信号灯 } if(Special_Btton==0)//测试按键是否按下,按下为特殊状态 { EW1=75; SN1=55; EWL1=19; SNL1=19; Busy_LED=0;//关繁忙信号灯 Special_LED =1;//开特殊信号灯 } EX0=1;//开中断 } /***T0中断服务程序/ void timer0(void)interrupt 1 using 1 { static uchar count; TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==10) { 1 2 if(Flag_SN_Yellow1) //测试南北黄灯标志位 {SN_Yellow=~SN_Yellow;} if(Flag_EW_Yellow1) //测试东西黄灯标志位 {EW_Yellow=~EW_Yellow;} } if(count20) { Time_EW–; Time_SN–; if(Flag_SN_Yellow1)//测试南北黄灯标志位 {SN_Yellow=~SN_Yellow;} if(Flag_EW_Yellow==1)//测试东西黄灯标志位 {EW_Yellow=~EW_Yellow;} count=0; } } /主程序开始*/ void main(void) { Busy_LED=0; Special_LED=0; IT0=1; //INT0负跳变触发 TMOD=0x01;//定时器工作于方式1 TH0=(65536-50000)/256;//定时器赋初值 TL0=(65536-50000)%256; EA=1; //CPU开中断总允许 ET0=1;//开定时中断 EX0=1;//开外部INTO中断 TR0=1;//启动定时 while(1) { /S0状态***/ EW_ManGreen=0; //EW人行道禁止 SN_ManGreen=1;//SN人行道通行 Flag_EW_Yellow=0; //EW关黄灯显示信号 Time_EW=EW; Time_SN=SN; while(Time_SN>=5) {P1=S[0]; //SN通行,EW红灯 Display();} /S1状态***/ P1=0x00; while(Time_SN>=0) {Flag_SN_Yellow=1; //SN开黄灯信号位 EW_Red=1; //SN黄灯亮,等待左拐信号,EW红灯 Display(); } /S2状态***/ Flag_SN_Yellow=0; //SN关黄灯显示信号 Time_SN=SNL; while(Time_SN>=5) {P1=S[2];//SN左拐绿灯亮,EW红灯 Display();} /S3状态***/ P1=0x00; while(Time_SN>=0) {Flag_SN_Yellow=1; //SN开黄灯信号位 EW_Red=1; //SN黄灯亮,等待停止信号,EW红灯 Display();} /*赋值/ EW=EW1; SN=SN1; EWL=EWL1; SNL=SNL1; /S4状态***/ EW_ManGreen=~EW_ManGreen;//EW人行道通行 SN_ManGreen=~SN_ManGreen;//SN人行道禁止 Flag_SN_Yellow=0; //SN关黄灯显示信号 Time_EW=SN; Time_SN=EW; while(Time_EW>=5) {P1=S[4]; //EW通行,SN红灯 Display();} /S5状态***/ P1=0X00; while(Time_EW>=0) {Flag_EW_Yellow=1;//EW开黄灯信号位 SN_Red=1;//EW黄灯亮,等待左拐信号,SN红灯 Display();} /S6状态***/ Flag_EW_Yellow=0; //EW关黄灯显示信号 Time_EW=EWL; while(Time_EW>=5) {P1=S[6];//EW左拐绿灯亮,SN红灯 Display();} /S7状态***/ P1=0X00; while(Time_EW>=0) {Flag_EW_Yellow=1; //EN开黄灯信号位 SN_Red=1;//EW黄灯亮,等待停止信号,SN红灯 Display();} /*赋值/ EW=EW1; SN=SN1; EWL=EWL1; SNL=SNL1; }
上一篇:单片机水塔控制系统
下一篇:51单片机控制的数字温度计
推荐阅读最新更新时间:2024-11-08 10:21
推荐帖子
- 求个双色灯转换充电器电路9015和358的,谢谢。
- 说明:DC转DC,输入12V,输出12.6V2A,用方案9015和LM358的双色灯转换电路,谢谢。求个双色灯转换充电器电路9015和358的,谢谢。:time::time:
- cxk2015 汽车电子
- 泣血求助:我的VxWorks怎么shell特别的慢呢?愿送全部分数给帮我的人!
- 泣血求助:我的VxWorks怎么shell特别的慢呢?不知怎么回事,我的VxWorks目标机shell特别的慢!我加载了一个CF卡,然后用ll看CF卡的文件,需要10分钟左右,才会一行一行的显示出列表来!而且,在shell下创建或打开CF卡上的文件也是半天才有反应!到底是怎么回事呢?请大侠们帮帮忙啊!我用的是Tornado2.2版本的,主机环境win2000和xp都试过了!都不行啊!用我的BSP在别人的Tornado2.2.1下创建的VxWorks镜像,然后在在我的开发板上
- yejin 实时操作系统RTOS
- 6410的CAMERA问题
- 我用6410裸奔LCD启用了WIN0并且可以正常输出800*600的彩条信号,我的FRAMEBUFFER的地址是0X51000000后来我把摄像头信号采集过来用PREVIEWPATH模式DMA地址到0X51000000,也就是LCD的FRAMMEBUFFER地址,但是显示效果没东西,希望有哥们整过的,提点建议,我的QQ:634623163可以交流6410的CAMERA问题裸奔,很牛裸奔。猛男。老兄,过几天我跟着搞搞。嘿嘿。兄弟们你们说我这思路是不是对的啊还有要
- baobeidudu 嵌入式系统
- 小信号放大电路设计_TLC2652应用案例.pdf
- 讲得挺通俗易懂的。给大家推荐一下!小信号放大电路设计_TLC2652应用案例.pdfkankanxian!是什么方面的知识呀。有没人知道。是不是新手没钱啊?:(谢谢了,不错的新手下载不到东西啊:\'(新手会赠送20芯币的新手下载不到东西啊新手下载不到东西啊原帖由clgzfq于2008-11-1919:16发表新手下载不到东西啊 为了维护我们大家的环境,请不要重复发帖在置顶帖有方便大家使用的报到送芯币活动帖子下还有积分规则可以参考如果有困难,请随
- 07haoyangde 模拟电子
- WINCE ACCESS cdb 转换问题
- 我有一个access的a.mdb文件,通过activesync下载到wince开发板转换成a.cdb转换成功,再转换回.mdb也没错误,没乱码,但就是执行sql查询select*from时出现问题调用查询createtableabc(idint);也没问题//里面原来没有表abc再执行select*fromabc也没问题怀疑是转换过程因为字符集问题使表名发生了变化想查看a.cdb里面究竟有什么表,access
- shortt WindowsCE
- 寻找一款嵌入式开发板,能流畅播放高清晰的MP4文件.量大,敬请关注
- 寻找一款开发板,要求:1、支持800*480及以上像素TFT屏,能够在这之上流畅播放MP4等格式的视频文件。2、WINCE5。0系统,并能免费提供BSP包。3、至少支持一路视频输入。4、SD卡,USB储存器,串口等驱动的支持。5、最好能提供核心板。如果能达到以上要求的公司或机购请与我联系,公司采购,量比较可观。QQ:371383396EMAIN:hwr2008@163.com寻找一款嵌入式开发板,能流畅播放高清晰的MP4文件.量大,敬请关注我有支持7寸模拟屏的方案
- m200200 嵌入式系统
设计资源 培训 开发板 精华推荐
- NCV8752 200 mA、超低静态电流、IQ 12 A、超低噪声、低压差稳压器的典型应用
- 使用 Infineon Technologies AG 的 OM8508SF 的参考设计
- 四路推杆电机驱动板
- DC1959B-C,用于 LTC6948IUFD-3 超低噪声和杂散 N 小数合成器的演示板,具有集成 VCO
- 磁保持继电器模块
- 使用 ROHM Semiconductor 的 BU4226 的参考设计
- DC2123B,基于 LT3790 的演示板,8V = VIN = 56V,VOUT = 24V,电流高达 5A 同步降压-升压转换器
- KITFS4508CAEEVM: FS4508, 系统基础芯片, ASIL B, 线性0.5 A Vcore, FS1b, LDT, CAN
- LT8330IDDB 8V 至 30V 输入、-24V 反相转换器的典型应用电路
- EVAL-AD7986EBZ,使用 AD7986 的评估板,18 位 ADC