模拟交通路灯的控制-LZ.docVIP

  • 2
  • 0
  • 约2.5千字
  • 约 5页
  • 2018-11-25 发布于河南
  • 举报
模拟交通路灯的控制-LZ

模拟交通路灯的控制 一.分析 因为本课程设计是交通灯的单片机控制设计,所以要了解实际交通灯的变化情况和规律。假设一个十字路口为东西南北走向。然后转状态1(南北红灯,东西绿灯通车)。过一段时间转状态2(东西绿灯灭,黄灯闪烁几次,南北仍然红灯)。再转状态3,(南北绿灯通车,东西红灯)。过一段时间转状态4,(南北绿灯灭,闪几次黄灯,东西仍然红灯)。最后循环至状态1。 二.设计思路 因东西同属一个车道,南北属一条车道,因此控制一边的灯就可以了,现象一样 1.东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车; 2.延时一段时间后,东西路口的绿灯熄灭,黄灯开始延时并且开始闪烁,闪烁5次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车; 3.延时一段时间之后,南北路口的绿灯熄灭,黄灯开始延时并且开始闪烁,闪烁5次之后,再切换到东西路口方向; 之后重复1到3过程。 三.交通信号灯模拟控制系统设计程序流程图: . 四. 程序代码: 用ATmega16控制发光二极管,PA0 PD2对应东西和南北的绿灯,PA1 PD0对应东西和南北的红灯,PA2 PD1对应东西和南北的黄灯。 设置好ATmega16的工作方式: //ICC-AVR application builder : 2015/5/25 22:06:16 // Target : M16 // Crystal: 1.0000Mhz #include iom16v.h #include macros.h unsigned int j; void port_init(void) { PORTA = 0x00; DDRA = 0xff; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0xff; } void delay(unsigned int t) { unsigned int i; unsigned int k; for(i=0;it;i++) for(k=0;kt;k++); } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void main(void) { init_devices(); while(1) //周期循环 { PORTA = 0x01; PORTD = 0x01; delay(1500); //东西绿灯亮,南北红灯亮,延时 for(j=0;j5;j++) { PORTA = 0x04; //东西黄灯闪烁5次,南北红灯亮,延时 delay(300); PORTA = 0x00; delay(300); } PORTD = 0x04; PORTA = 0x02; delay(1500); //东西红灯亮,南北绿灯亮,延时 for(j=0;j5;j++) //东西红灯亮,南北黄灯闪烁5次,延时 { PORTD = 0x02; delay(300); PORTD = 0x00; delay(300); } } //insert your functional code here... } 五.程序运行后状态表: 其中0代表灯灭,1代表灯亮。 状态 东 南 西 北 黄 绿 红 黄 绿 红 黄 绿 红 黄 绿 红 P1.0 P1.1 P1.2 P1.4 P1.5 PA6 P1.0 P1.1 P1.2 P1.4 P1.5 P1.5 该四 个工 作状 态按 此次 序将 重复 出现 南北红灯亮,东西绿灯亮 0 1 0 0 0 1 0 1 0 0 0 1 南北

文档评论(0)

1亿VIP精品文档

相关文档