交通灯设计.docx
- 文档编号:24212672
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:35
- 大小:16.68KB
交通灯设计.docx
《交通灯设计.docx》由会员分享,可在线阅读,更多相关《交通灯设计.docx(35页珍藏版)》请在冰豆网上搜索。
交通灯设计
控制交通灯的程序设计
#include
unsigned char code
dis_7[21]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,
0x86,0x8e,0xbf,0x89,0x8c,0x00,0xff};//
共阳数码管
段码
unsigned char data disbuf[6]={0x00,0x00,0x00,0x00,0x00,0x00};//
显示缓冲区
:
时分秒使用
unsigned char data count_timedx[]={2,10,5,10,25}; //
东西方向倒计时时间
unsigned char data count_timenb[]={2,25,10,5,10}; //
南北方向倒计时时间
unsigned char data Hour=14,Minite=06,Second=0,Halfsec=0;
//
定义时钟位
unsigned char xdata *ledaddr=0x2000; //
锁存器选通地址
unsigned char data
Ms=0,Lightcode=0,Light_step,Led_step,Light_num;
unsigned int
data
Fault_dx=0,Fault_nb=0,Fault_total=0,Countdx=0,Countnb=0;
sbit p10=P1^0; //
第
0
位数码管位控制端
sbit p11=P1^1; //
第
1
位数码管位控制端
sbit p12=P1^2; //
第
2
位数码管位控制端
sbit p13=P1^3; //
第
3
位数码管位控制端
sbit p14=P1^4; //
第
4
位数码管位控制端
sbit p15=P1^5; //
第
5
位数码管位控制端
sbit p16=P1^6; //
发光二极管选通
sbit p17=P1^7; //
按键选通
sbit p33=P3^3; //k1
键
用于切换四种功能
/*****************************************************************************/
/****************************1
毫秒延时函数
*******************************/
void delay1ms(int t)
{
unsigned int i,j;
for(i=0;i for(j=0;j<120;j++) ; } /***************************************************************************/ /************************* 键盘扫描函数 ****************************************/ unsigned char getkey(void) { unsigned char Y iwei; unsigned char test=0x00,tim; *ledaddr=test; if(p17==0 && tim==0) // 判断是否有按键按下 { p17=1; tim=1; test=0xfe; delay1ms(5); for(Y iwei=0;Yiwei<8;Yiwei++) // 处理按键 { *ledaddr=test; if(p17==0)break; else test=(test<<1)+1; } return Yiwei; } else if(p17==0){} else {tim=0;} } /*****************************************************************************/ /************************ 六位 LED 数码管显示 ***********************************/ void displed(unsigned int hour_shi,unsigned int hour_ge,unsigned int min_shi,unsigned int min_ge,unsigned int sec_shi,unsigned int sec_ge) { *ledaddr=dis_7[hour_shi]; // 时的十位显示 p10=0; delay1ms (1); p10=1; *ledaddr=dis_7[hour_ge]; // 时的个位显示 p11=0; delay1ms (1); p11=1; *ledaddr=dis_7[min_shi]; // 分的十位显示 p12=0; delay1ms (1); p12=1; *ledaddr=dis_7[min_ge]; // 分的个位显示 p13=0; delay1ms (1); p13=1; *ledaddr=dis_7[sec_shi]; // 秒的十位显示 p14=0; delay1ms (1); p14=1; *ledaddr=dis_7[sec_ge]; // 秒的个位显示 p15=0; delay1ms (1); p15=1; } /*****************************************************************************/ /****************************** 发光二极管显示函数 *****************************/ void displight(unsigned int state) { if(state==0) // 状态 0 : 各方向红灯全亮 { Lightcode=0xbb; } else if(state==1) // 状态 1 : 东西绿灯亮,南北红灯亮 { Lightcode=0xbe; } else if(state==2) // 状态 2 : 东西黄灯闪烁,南北红灯亮 { Lightcode=0xbd; } else if(state==3) // 状态 3 : 东西红灯亮,左行亮,南北红灯亮 { Lightcode=0xb3; } else if(state==4) // 状态 4 : 东西红灯亮,南北直行绿灯亮 { Lightcode=0xeb; } else if(state==5) // 状态 5 : 东西红灯亮,南北黄灯闪烁 { Lightcode=0xdb; } else if(state==6) // 状态 6 : 东西红灯亮,南北红灯亮,左行亮 { Lightcode=0x3b; } // 黄灯闪烁 if((Halfsec%2)==0) { if(state==2) Lightcode=0xbf; // 东西闪烁 if(state==5) Lightcode=0xfb; // 南北闪烁 } *ledaddr=Lightcode; // 送交通灯显示状态 p16=0; delay1ms (1); p16=1; } /****************************************************************************/ /**************************** 违章车辆统计函数 ********************************/ void weizhang(void) // 红灯亮的时候是否有车通过, KL1 键显示东西, KL2 键显示南北 { unsigned char key1; key1=getkey(); // 获得键值 if((key1==0)&&(Light_step>=4)&&(Light_step<=6)) //KL1 键显示南北方向违章车辆,且 只在南北方向为红灯时加 1 { Fault_dx++; if(Fault_dx==99) // 最大计数 99 辆 { Fault_dx=0; } } else if((key1==2)&&(Light_step>=1)&&(Light_step<=3)) //KL3 键显示东西方向违章车辆, 且只在东西方向为红灯时加 1 { Fault_nb++; if(Fault_nb==99) // 最大计数 99 辆 { Fault_nb=0; } } } /***************************************************************************/ /**************************** 数字钟函数 ***********************************/ void shuzizhong(void) // 数字钟: KL3 键调节秒, KL4 键调节分, KL5 键调节时 { unsigned char data key2; key2=getkey(); // 获得键值 if(key2==2) // 调节秒,按一次 KL3 ,则加一秒 { Second++; if(Second==60) Second=0; } if(key2==3) // 调节分,按一次 KL4 ,则加一分 { Minite++; if(Minite==60) Minite=0; } if(key2==4) // 调节时,按一次 KL5 ,则加一时 { Hour++; if(Hour==24) Hour=0; } disbuf[0]=Second%10; //时钟显示,送缓冲区 disbuf[1]=Second/10; disbuf[2]=Minite%10; disbuf[3]=Minite/10; disbuf[4]=Hour%10; disbuf[5]=Hour/10; } /*****************************************************************************/ /************** 修改倒计时间函数 *********************************************/ void change_time(void) // 注意: 只修改绿灯、黄灯或左行灯时间,红灯时间自动求出 { unsigned int data key3=0; key3=getkey(); if(key3==4) //KL5 键选择要修改东西向倒计时 { Light_num++; if(Light_num>4) Light_num=0; } if(key3==5) //KL2 键用于修改东西方向倒计时,加 1 { count_timedx[Light_num]++; if(count_timedx[Light_num]>=99) count_timedx[Light_num]=99; } if(key3==1)//KL6 键用于修改东西方向倒计时,减 1 { count_timedx[Light_num]--; if(count_timedx[Light_num]<1) count_timedx[Light_num]=1; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)