51单片机交通灯程序带车流量.doc

上传人:大张伟 文档编号:8845078 上传时间:2021-01-19 格式:DOC 页数:10 大小:30.50KB
返回 下载 相关 举报
51单片机交通灯程序带车流量.doc_第1页
第1页 / 共10页
51单片机交通灯程序带车流量.doc_第2页
第2页 / 共10页
51单片机交通灯程序带车流量.doc_第3页
第3页 / 共10页
51单片机交通灯程序带车流量.doc_第4页
第4页 / 共10页
51单片机交通灯程序带车流量.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《51单片机交通灯程序带车流量.doc》由会员分享,可在线阅读,更多相关《51单片机交通灯程序带车流量.doc(10页珍藏版)》请在三一文库上搜索。

1、#include /52系列单片机头文件#include #define uchar unsigned char#define uint unsigned int sbit key1=P30; /按键口定义sbit key2=P31;sbit key3=P34;/蜂鸣器口定义sbit key4=P35;sbit key5=P36;sbit Beer=P37;sbit DX_Red=P15; /红绿灯DX口定义sbit DX_Yellow=P14; sbit DX_Green=P13;sbit NB_Red=P12; /红绿灯NB口定义sbit NB_Yellow=P11; sbit NB_Gr

2、een=P10;sbit NB_Blue=P16;sbit DX_Blue=P17;/sbit NB_JS=P35;/sbit DX_JS=P36;uchar code table= /共阳极段码0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;void delayms(uint xms);int DX_Num=23,NB_Num=10;/数码管显示数字int numt0;/定时器计时int JS_NB_Num,JS_DX_Num;int NB_Num_GREEN,DX_Num_GRE

3、EN;int XZ=0;/按键2选择int BJ=0; /按键1选择int JS=0; /按键5选择int Temp1=1; /中断是否int temp=1 ; /数码管是否循环/int flag=0;int DX_Flag=0,NB_Flag=1; /红绿灯状态int DX_RED=33,DX_GREEN=15,DX_YELLOW=3; /红绿灯时间int NB_RED=38,NB_GREEN=10,NB_YELLOW=3;int NB_BLUE=10,DX_BLUE=10; /左转时间void display(uchar num1dis,uchar num2dis);void keysca

4、n();void init() /中断红绿灯初始化函数 Beer=1; /蜂鸣器关断 TMOD=0x01; /中断程序初始化TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;/ EX1=1;/开外部中断1/ IT1=1;/外部中断下降沿触发/EX0=1;/开外部中断0/ IT0=1;/外部中断下降沿触发 DX_Red=0; /红绿灯初始化DX_Yellow=1;DX_Green=1;NB_Red=1;NB_Yellow=1;NB_Green=0;void main() /主函数 init(); while(1) keysc

5、an(); if(temp=1) display(NB_Num,DX_Num);void display(uchar num1dis,uchar num2dis)/数码管显示函数int NB_Shi,NB_Ge,DX_Shi,DX_Ge;NB_Shi=num1dis/10;NB_Ge=num1dis%10;DX_Shi=num2dis/10;DX_Ge=num2dis%10;P0=tableNB_Shi; /送十位段选数据P2=0xfe;delayms(3);P0=tableNB_Ge; /送十位段选数据P2=0xfd;delayms(3);P0=tableDX_Shi; /送十位段选数据P2

6、=0xfb;delayms(3);P0=tableDX_Ge; /送十位段选数据P2=0xf7;delayms(3);void keyscan()/按键扫描函数 if(key1=0)delayms(10);if(key1=0) if(BJ=0) BJ=1; Beer=0;Temp1=2;temp=2; NB_Blue=1; DX_Blue=1;DX_Yellow=1; DX_Green=1;DX_Red=0;NB_Yellow=1; NB_Green=1;NB_Red=0;while(!key1); else if(BJ=1) Beer=1; BJ=0; NB_Red=1;NB_Green=0

7、;NB_Blue=1; DX_Blue=1; DX_Num=DX_RED-10;NB_Num=NB_GREEN;NB_Flag=1;DX_Flag=0;temp=1; Temp1=1;while(!key1); if(key2=0)delayms(10);if(key2=0) if(XZ=0) XZ=1;EA=0; DX_Yellow=1; DX_Green=1;DX_Red=0;NB_Yellow=1; NB_Green=0;NB_Red=1;NB_Blue=1; DX_Blue=1;DX_Num=DX_RED;NB_Num=NB_GREEN;while(!key2);else if(XZ=

8、1) DX_Green=0;DX_Red=1; NB_Green=1;NB_Red=0; XZ=2;DX_Num=DX_GREEN;NB_Num=NB_RED;while(!key2); else if(XZ=2) XZ=0;DX_Green=1;DX_Red=0; NB_Green=0;NB_Red=1; DX_Num=DX_RED-10;NB_Num=NB_GREEN;NB_Flag=1;DX_Flag=0; EA=1; ET0=1; TR0=1; while(!key2); if(key3=0) delayms(10);if(key3=0) if(XZ=1)DX_Num+;DX_RED+

9、;NB_Num+;NB_GREEN+;while(!key3);else if(XZ=2) DX_Num+;DX_GREEN+;NB_Num+;NB_RED+;while(!key3); if(key4=0) delayms(10);if(key4=0) if(XZ=1)DX_Num-;DX_RED-;NB_Num-;NB_GREEN-;while(!key4);else if(XZ=2) DX_Num-;DX_GREEN-;NB_Num-;NB_RED-;while(!key4); if(key5=0)delayms(10);if(key5=0) if(JS=0) JS=1;Temp1=2;

10、 DX_Yellow=1; DX_Green=1;DX_Red=0;NB_Yellow=1; NB_Green=1;NB_Blue=1; DX_Blue=1;NB_Red=0;DX_Num=0;NB_Num=0;EX1=1;/开外部中断1 IT1=1;/外部中断下降沿触发EX0=1;/开外部中断0 IT0=1;/外部中断下降沿触发while(!key5);else if(JS=1) JS=0;/DX_Green=1;/DX_Red=0; NB_Green=0;NB_Red=1;if(NB_Num5) if(DX_Num5)NB_Num_GREEN=NB_GREEN;DX_Num_GREEN=D

11、X_GREEN;JS_NB_Num=NB_Num;JS_DX_Num=DX_Num;NB_GREEN=JS_NB_Num*(NB_Num_GREEN+DX_Num_GREEN)/(JS_NB_Num+JS_DX_Num);DX_GREEN=NB_Num_GREEN+DX_Num_GREEN-NB_GREEN;NB_RED=NB_GREEN+23;DX_RED=DX_GREEN+23; EX1=0;/开外部中断1 IT1=0;/外部中断下降沿触发EX0=0;/关外部中断0 IT0=0;/关外部中断下降沿触发 DX_Num=DX_RED-10;NB_Num=NB_GREEN;NB_Flag=1;D

12、X_Flag=0; Temp1=1;temp=1; while(!key5); void delayms(uint xms) /延时函数uint i,j;for(i=xms;i0;i-) /i=xms即延时约xms毫秒for(j=110;j0;j-);void T0_time()interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;numt0+;if(BJ=1) P2=0xff; if(numt04) numt0=0; Beer=Beer; if(Temp1=1) if(numt020) numt0=0; NB_Num-; DX_Num-

13、; if(NB_Num1) if(NB_Flag=1) NB_Flag=2; NB_Num=NB_YELLOW; NB_Green=1; NB_Yellow=0; else if(NB_Flag=2) NB_Flag=0; NB_Num=NB_RED; NB_Yellow=1; NB_Red=0; NB_Blue=0;else if(NB_Flag=0) NB_Flag=1; NB_Num=NB_GREEN; NB_Red=1; NB_Green=0; DX_Blue=1; if(DX_Num4) numt0=0; NB_Num+; EX1 = 1; void T0EXT() interrupt 0 /使用了外部中断1的键盘扫描子函数EX0 = 0; if(JS=1) if(numt04) numt0=0; DX_Num+; EX0 = 1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1