
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.*include <reg52.h>/52系列单片机头文件*include <intrins.h> *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; /红绿灯N
2、B口定义sbit NB_Yellow=P11; sbit NB_Green=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_
3、DX_Num;int NB_Num_GREEN,DX_Num_GREEN;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
4、num1dis,uchar num2dis);void keyscan();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 m
5、ain() /主函数 init();while(1) keyscan(); 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;delay
6、ms(3);P0=tableDX_Shi; /送十位段选数据P2=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) Bee
7、r=1; BJ=0; NB_Red=1;NB_Green=0;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_
8、GREEN;while(!key2);else if(XZ=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
9、=0) if(XZ=1)DX_Num+;DX_RED+;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(key
10、5=0) if(JS=0) JS=1;Temp1=2; 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_Num>5) if(DX_Num>5)N
11、B_Num_GREEN=NB_GREEN;DX_Num_GREEN=DX_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
12、_RED-10;NB_Num=NB_GREEN;NB_Flag=1;DX_Flag=0; Temp1=1;temp=1; while(!key5); void delayms(uint xms) /延时函数uint i,j;for(i=xms;i>0;i-) /i=xms即延时约xms毫秒for(j=110;j>0;j-);void T0_time()interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;numt0+;if(BJ=1) P2=0xff; if(numt0>4) numt0=0; Beer=Beer; if
13、(Temp1=1) if(numt0>20) numt0=0; NB_Num-; DX_Num-; if(NB_Num<1) 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_Num<1) if(DX_Flag=0) DX_Flag=1; DX_Num=DX_GREEN;DX_Red=1;DX_Green=0;NB_Blue=1; else if(DX_Flag=1)DX_Flag=2; DX_Num=DX_YELLOW;DX_Green=1;DX_Yellow=0; else if(DX_Flag=2) DX_Flag=0; DX_Num=DX_RED; DX_Yellow=1; DX_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工伤伤残赔偿协议2篇
- 2025新员工入职安全培训考试试题及答案各地真题
- 2025年一般生产经营单位安全培训考试试题有解析答案可打印
- 跨领域数据分析方法-全面剖析
- 绿色包装材料与技术在供应链中的创新应用-全面剖析
- 运动习惯形成的心理和社会因素分析-全面剖析
- 虚拟现实地产交易体验-全面剖析
- 糖料种植机械化发展-全面剖析
- 中国珠宝市场发展趋势-全面剖析
- 量子纠缠与量子传感器的融合应用-全面剖析
- 内部控制建设课件
- 水塘排水、清淤质量检验记录表
- 上海龙之梦丽晶大酒店客房预订单
- 加强施工管理、严格保护环境
- 水污染控制工程课程设计说明书
- 抗拔桩裂缝计算表格(自动版)
- 血透室传染病登记本
- 妇产科学孕期B族链球菌感染课件
- 《药疹(Drug Eruption)》PPT课件
- 评茶员(高级)鉴定理论试题
- 第十套广播体操详解
评论
0/150
提交评论