当前位置:文档之家› 太阳能红绿灯课程设计

太阳能红绿灯课程设计

太阳能红绿灯课程设计 一、任务 设计一个使用太阳能供电的红绿交通灯。 二、要求 1. 基本要求 1) 点亮交通灯。使用太阳能电板供电驱动红绿交通灯(led),点亮即可; 2) 手动运行。使用按键控制模拟,符合实际交通灯闪烁变化,即四个方向的交通灯的红绿灯变换; 3) 自动运行。使用MCU等嵌入式控制芯片自动控制led模拟交通灯的闪烁,允许此芯片使用外部供电; 4) 显示倒计时。使用MCU等嵌入式控制芯片显示红灯倒计时,黄灯倒计时,绿灯倒计时(四个方向其中一个方向即可)。 2. 发挥部分 1) 当基本要求2实现的情况下,手动运行,实现基本要求4的显示倒计时。 2) 在不使用MCU等嵌入式控制芯片的情况下,实现基本要求3(交通灯闪烁)的自动运行。 3) 在不使用MCU等嵌入式控制芯片的情况下,实现基本要求4的显示倒计时。 4) 设计使用太阳能供电的红绿交通灯,即不能使用任何外部供电。仅需实现基本要求3(交通灯闪烁)的自动运行。 5) 设计使用太阳能供电的红绿交通灯,即不能使用任何外部供电,仅需实现基本要求4的显示倒计时。 6) 其它功能。 1

目录 1 设计目的……………………………………………………… 2 设计思路……………………………………………………… 3 设计过程……………………………………………………… 3.1方案比较与论证…………………………………………… 3.2电路设计和设计说明……………………………………… 3.2.1 89C52单片机…………………………………………………… 3.2.2 红绿灯……………………………………………… 3.2.3(显示部分)数码管与按键………………………… 3.2.4 太阳能电池板供电电路……………………………… 3.2.4 原理图…………………………………………… 4测试数据与分析……………………………………………… 5结论与体会…………………………………………… 6附件………………………………………………… 6.1实物电路图…………………………………………………… 6.2源程序……………………………………………… 2

交通灯控制电路 摘要:交通信号灯常用于城市、街道主、支路口,用来控制车辆的流量,提高交叉路口车辆的通行能力,缓冲交通压力。本交通灯设计主要由51单片机,太阳能电池板供电电路和模拟交通灯,数码管和键盘等组成。51单片机由ATC89c52芯片控制模拟交通灯电路、数码管电路实现,供电主要采用采用太阳能电池板电路和储能电路,从而显示红黄绿灯的转换。 关键字:交通灯 数码管倒计时 太阳能电池板供电 1 、设计目的 (1)熟悉MCU等集成电路的引脚安排。 (2)了解太阳能电池板结构及其使用。 (3)了解交通灯控制电路的组成及工作原理。 (4)学会用仿真软件对设计的原理图进行仿真。 3

(5)熟悉数字交通灯控制电路的设计与制作。 2、设计思路 (1)利用MCU芯片控制模拟交通灯的转换 (2)利用数码管电路充当交通灯定时电路(显示倒计时) (3)设计交通灯控制电路 (4)利用太阳能电池板为MCU电路供电 (5)其他功能的实现 3 设计过程 3.1方案论证与比较 方案一 用单片机技术来实现交通灯控制 用单片机技术来来实现交通灯控制,容易实现,而且该电路可靠性也很高。由于本组队员单片机刚刚进入学习,一方面更快地学习单片机,另一方面也更快地进入设计,所以选用了MCU来实现交通灯控制。交通灯控制系统的原理框图如下图所示。 4

交通灯控制状态分析: Stste1 东西亮红灯,南北亮绿灯; Stste2 东西亮红灯,南北亮黄灯; Stste3 东西亮绿灯,南北亮红灯; Stste1 东西亮黄灯,南北亮红灯; 在紧急状况下,实现四个方向的亮红灯; 方案二 用数电电子技术来实现交通灯控制 它主要由控制器、定时器、译码器和秒脉冲信号发生器等部分组成。秒脉冲发生器是该系统中定时器和控制器的标准时钟信号源,译码器输出两组信号灯的控制信号,经驱动电路后驱动信号灯工作,控制器是系统的主要部分,由它控制

51单按键 模数码紧急

太阳能供 5 定时器和译码器的工作。电路设计相对复杂,所

以我们并没有采取这个方案。 3.2.单元电路的设计 (1)太阳能供电电路 6 (2)红绿灯电路设计

4系统调试与结果 (1)程序的编写及调试,均有结果和现象。 (2)交通灯、太阳能电池板电路设计部分等 (3)调试交通灯按键控制以及数码管倒计时显示部分。 5结论 1、能实现的功能 交通灯的状态转换和计时时间的显示,基本能实现甲、乙道路直行和转弯灯的显示功能,太阳能可以为交通模拟灯充分供电。并且在紧急 7

状况下实现四个方向全亮红灯,数码管倒计时停止。 2、不足之处 交通灯设计中没有形成模块化。 6、设计心得体会 通过这次的参与,发现了许多欠缺的知识,在答辩时,也认识到了差距。不过在不断的学习和设计中,还是有些意外的收获的,团队的合作,也让我们充分体会到了过程的艰辛和愉快的。希望通过不断地学习,不断地努力,做到更好!

附件 总电路图 1.太阳能电板或蓄电池 8

2.电脑pc供电 9

源代码 //自动控制交通灯的闪烁 #include #define uchar unsigned char #define uint unsigned int uchar t0,s1,g1,temp,state=1;int t=-1; uchar code table[]= {0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //----依次为南北 红 黄 绿 灯亮 sbit d1=P1^0; sbit d2=P1^1; sbit d3=P1^2; //----依次为东西 黄 绿 红 灯亮 sbit d6=P1^5; sbit d7=P1^6; sbit d8=P1^7; void display(uchar s1,uchar g1); void init(); void judg(); void state_led(); void keyscan(); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=115;y>0;y--); } //------------主函数------ void main() { init(); keyscan(); } void timer() interrupt 1 //一个定时器中断 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++; } 10

void judg() //计时函数 { if(t!=-1) { s1=t/10; g1=t%10; } display(s1,g1); // 数码管上显示倒计时 if(t0 == 20) // 1s 20*50000=1s { t0=0; //清零 if(t==-1) { state_led();//进入状态选择 if(state==4)//状态循环 { state=0; } state++; //状态切换 } t--;//一秒减一次,倒计时实现 } } //-----------状态函数-------- void state_led() { if(state==1) { d3=1; d8=1; d1=0; d7=0; //----南北红灯亮 东西绿灯亮 t=15; } else if(state==2) {d1=1; d7=1; d1=0; d6=0; //----南北红灯亮 东西黄灯亮 t=3; } else if(state==3) { d1=1; d6=1; d2=0; d8=0; //----南北绿灯亮 东西红灯亮 t=15; } else if(state==4) { 11

d2=1; d8=1; d3=0; d8=0; //----南北黄灯亮 东西红灯亮 t=3; }

} void init()//初始化子程序 { //*******定时器****** TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void display(uchar s1,uchar g1) //显示子函数 { P0=table[s1]; //倒计时的显示位 P2=0xfb; delay(1); P0=table[g1]; P2=0xf7; delay(1); } void keyscan() { while(1) { judg(); P3=0xfe;//*************赋初值*************** temp=P3; temp=temp&0xf0;//**************检测*************** if(temp!=0xf0)//*********用while语句要小心,产生死锁************ { delay(100);//********延迟一会********* temp=P3; temp=temp&0xf0;//**************再检测,键盘是否真的按下************** if(temp!=0xf0) { temp=P3; if(temp==0xde) { d1=0; d8=0;d2=1;d3=1;d6=1;d7=1;

相关主题