红绿灯课程设计报告

上传人:迷**** 文档编号:143489659 上传时间:2020-08-30 格式:PDF 页数:18 大小:368.01KB
返回 下载 相关 举报
红绿灯课程设计报告_第1页
第1页 / 共18页
红绿灯课程设计报告_第2页
第2页 / 共18页
红绿灯课程设计报告_第3页
第3页 / 共18页
红绿灯课程设计报告_第4页
第4页 / 共18页
红绿灯课程设计报告_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《红绿灯课程设计报告》由会员分享,可在线阅读,更多相关《红绿灯课程设计报告(18页珍藏版)》请在金锄头文库上搜索。

1、北 华 航 天 工 业 学 院 单片机课程设计报告 设计课题:十字路口交通灯控制 专业班级:B11203 学生姓名:赵雪志 指导教师:王晓 设计时间:2013-6-11 1 设计任务 利用单片机设计一个十字路口交通灯控制器 设计要求:设计要求: 利用单片机的定时器产生秒信号,控制十字路口的红、绿、黄灯 交替点亮和熄灭, 并且用 6 只 LED 数码管显示十字路口两个方向的剩 余时间。要求能用按键设置两个方向的通行时间(绿、红灯点亮的时 间 )和暂缓通行时间(黄灯点亮的时间 )。系统的工作应符合一般 交通灯控制的要求。 2 硬件设计与系统总体方案图 2.1 AT89C52 单片机简介 AT89C

2、52 是一种低功耗、高性能CMOS8 位微控制器。 片上Flash 允许程序存储器在系统可编程,亦适于常规编程器。 在单芯片上,拥 有灵巧的8 位CPU 和在系统可编程Flash,使得 AT89C52 为众多嵌入 式控制应用系统提供高灵活、超有效的解决方案。 AT89C52 具有以下 标准功能: 8K 字节Flash, 256 字节RAM, 32 位I/O 口 线,看门狗 定时器,2 个数据指针,三个16 位定时器/计数器, 一个6 位向量2 级中断结构,全双工串行口,片内晶振及时钟电路。 空闲模式下, CPU 停止工作,允许RAM、定时器计数器、串口、中断 继续工作。 鉴于以上的优点本系统采

3、用AT89C52 作为主控芯片, 实现对整个系 统的控制。 2.2 系统硬件电路设计 (1)显示灯开关 显示灯开关 (2) 按键电路 (3)显示电路 (4)总电路图 3 源程序 #include#include #define#define unitunit unsignedunsigned intint /宏定义宏定义 #define#define ucharuchar unsignedunsigned charchar sbitsbit red=P10;red=P10;/设置设置P1,P1,控制三个发光二控制三个发光二 极管极管 sbitsbit yellow=P12;yellow=P12

4、; sbitsbit green=P14;green=P14; sbitsbit beep=P23;beep=P23; sbitsbit dula=P26;dula=P26;/设置位选接口设置位选接口 sbitsbit wela=P27;wela=P27;/设置段选接口设置段选接口 sbitsbit K1=P34;K1=P34;/设置独立键盘接口设置独立键盘接口 sbitsbit K2=P35;K2=P35; sbitsbit K3=P36;K3=P36; sbitsbit K4=P37;K4=P37; ucharuchar codecode table=table=/定义数码表定义数码表 0

5、 x3f,0 x06,0 x5b,0 x4f,0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d,0 x7d,0 x07,0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x77,0 x7c,0 x7f,0 x6f,0 x77,0 x7c, 0 x39,0 x5e,0 x79,0 x71;0 x39,0 x5e,0 x79,0 x71; ucharuchar R=10,Y=5,G=10,numl,nums,temp,flag,flag1,r1,r2,y1,y2,R=10,Y=5,G=10,numl,nums,temp,flag,flag1,r1

6、,r2,y1,y2, g1,g2;g1,g2;/定义变量定义变量 voidvoid init();init();/声明初始化程声明初始化程 序序 voidvoid display(uchardisplay(uchar r1,ucharr1,uchar r2,ucharr2,uchar y1,uchary1,uchar y2,uchary2,uchar g1,ucharg1,uchar g2);g2);/声明显示程序声明显示程序 voidvoid delay_1ms(unitdelay_1ms(unit z)z)/1ms/1ms延时程序延时程序 unitunit x,y;x,y; for(x=z

7、;x0;x-)for(x=z;x0;x-) for(y=110;y0;y-);for(y=110;y0;y-); voidvoid delay(void);delay(void); voidvoid main()main()/主函数主函数 init();init(); while(1)while(1) if(K1=0)if(K1=0) R-;R-; delay_1ms(5);delay_1ms(5); display(r1,r2,y1,y2,g1,g2);display(r1,r2,y1,y2,g1,g2); while(!K1);while(!K1); display(r1,r2,y1,y2

8、,g1,g2);display(r1,r2,y1,y2,g1,g2); voidvoid init()init()/初始化函数初始化函数 P1=0 xff;P1=0 xff;/初始化初始化P1P1 dula=1;dula=1;/初始化数码管初始化数码管 P0=0 x3f;P0=0 x3f; dula=0;dula=0; wela=1;wela=1; P0=0 xc0;P0=0 xc0; wela=0;wela=0; TMOD=0 x11;TMOD=0 x11; /设置定时计数方式设置定时计数方式 TH0=(65536-50000)/256;TH0=(65536-50000)/256;/设置初值

9、设置初值 TL0=(65536-50000)%256;TL0=(65536-50000)%256; TH1=(65536-50000)/256;TH1=(65536-50000)/256; TL1=(65536-50000)%256;TL1=(65536-50000)%256; EA=1;EA=1;/开总中断开总中断 ET0=1;ET0=1;/开定时器开定时器T0T0中断中断 ET1=1;ET1=1;/开定时器开定时器T1T1中断中断 TR0=1;TR0=1;/打开定时器打开定时器T0T0 TR1=1;TR1=1;/打开定时器打开定时器T1T1 voidvoid timer0()timer0(

10、) interruptinterrupt 1 1/发光二极管中断服务发光二极管中断服务 子程序子程序 TH0=(65536-50000)/256;TH0=(65536-50000)/256;/装入初值装入初值 TL0=(65536-50000)%256;TL0=(65536-50000)%256; switch(temp)switch(temp) casecase 0:0: numl+;numl+;/红灯红灯 red=0;red=0;/打开红灯打开红灯 yellow=1;yellow=1; flag=0;flag=0;/生成标志位生成标志位 if(numl=200)if(numl=200) n

11、uml=0;numl=0; temp=1;temp=1; break;break; casecase 1:1: numl+;numl+;/黄灯黄灯 yellow=0;yellow=0; red=1;red=1; beep=1;beep=1; flag=1;flag=1; if(numl=100)if(numl=100) numl=0;numl=0; temp=2;temp=2; break;break; casecase 2:2: numl+;numl+;/绿灯绿灯 green=0;green=0; yellow=1;yellow=1; flag=2;flag=2; if(numl=200)i

12、f(numl=200) numl=0;numl=0; temp=3;temp=3; break;break; casecase 3:3: numl+;numl+;/黄灯黄灯 yellow=0;yellow=0; green=1;green=1; flag=3;flag=3; if(numl=100)if(numl=100) numl=0;numl=0; temp=0;temp=0; break;break; voidvoid timer1()timer1() interruptinterrupt 3 3/数码管显示服务子程序数码管显示服务子程序 TH1=(65536-50000)/256;TH

13、1=(65536-50000)/256; TL1=(65536-50000)%256;TL1=(65536-50000)%256; r1=R/10;r1=R/10;/分别将分别将R R、Y Y、G G个位和十位的个位和十位的 值赋给数码管的六位显示值赋给数码管的六位显示 r2=R%10;r2=R%10; y1=Y/10;y1=Y/10; y2=Y%10;y2=Y%10; g1=G/10;g1=G/10; g2=G%10;g2=G%10; switch(flag)switch(flag) casecase 0:0: nums+;nums+; Y=5;Y=5; beep=!beep;beep=!b

14、eep;/红灯开始计时红灯开始计时 if(nums=20)if(nums=20)/每一秒减一每一秒减一 R-;R-; nums=0;nums=0; break;break; casecase 1:1: nums+;nums+;/黄灯开始计时黄灯开始计时 R=10;R=10; if(nums=20)if(nums=20) Y-;Y-; nums=0;nums=0; break;break; casecase 2:2: nums+;nums+;/绿灯开始计时绿灯开始计时 Y=5;Y=5; if(nums=20)if(nums=20) G-;G-; nums=0;nums=0; break;brea

15、k; casecase 3:3: nums+;nums+;/黄灯开始计时黄灯开始计时 G=10;G=10; if(nums=20)if(nums=20) Y-;Y-; nums=0;nums=0; break;break; voidvoid display(uchardisplay(uchar r1,ucharr1,uchar r2,ucharr2,uchar y1,uchary1,uchar y2,uchary2,uchar g1,ucharg1,uchar g2)g2)/数码管显示程序数码管显示程序 dula=1;dula=1; P0=tabler1;P0=tabler1; dula=0;dula=0; P0=0 xff;P0=0 xff; wela=1;wela=1; P0=0 xfe;P0=0 xfe; wela=0;wela=0; delay_1ms(1);delay_1ms(1); dula=1;dula=1; P0=tabler2;P0=tabler2; dula=0;dula=0; P0=0 xff;P0=0 xff; wela=1;wela=1; P0=0 xfd;P0=0 xfd; wela=0;wela=0; delay_1ms(1);delay_1ms(1); dula

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 幼儿教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号