基于AT89C51的交通灯电路图与程序设计.doc_第1页
基于AT89C51的交通灯电路图与程序设计.doc_第2页
基于AT89C51的交通灯电路图与程序设计.doc_第3页
基于AT89C51的交通灯电路图与程序设计.doc_第4页
基于AT89C51的交通灯电路图与程序设计.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计与编辑:湖南信息职院 信息工程 XXX编辑道路交通灯单片机程序设计思路:东西直行和左转同控制、南北直行和左转通控制。人行东西同控制、南北通控制,共4组LED灯组成整个交通灯仿真电路(真实的情况是8组)。仿真电路图没有最小系统,实际的电路请添加最小系统!人行则对面的车辆禁止直行和左转,车辆左转则禁止同组的直行和对面车辆的左转和直行,车辆直行则禁止同组的左转和对面车辆的左转和直行。使用74HC164控制12个LED交通指示灯用中断服务减少误差等。这里数码管区分了东西和南北方向的电路仿真图:C程序:#include #define uchar unsigned char#define uint unsigned intsbit DAT = P17;/模拟串口数据发送端 * 控制车辆交通灯sbit CLK = P16;/模拟时钟控制端sbit DAT1 = P15;/模拟串口数据发送端 * 控制人行交通灯sbit CLK1 = P14;/模拟时钟控制端sbit S1 = P30; /繁忙模式sbit S2 = P31;/特殊模式/*东西交通倒计时显示数码管选通位*/sbit K1 = P10;sbit K2 = P11;/*南北交通倒计时显示数码管选通位*/sbit K3 = P12;sbit K4 = P13;/* - * led_mode表示通行的方向, * time0_count表示定时器0的计数 * time_second表示中断的时间 * time1_count表示定时器1的计数 * left_mode表示左转的开关 * second表示通行的时间 * left_second表示左转通行时间 * -*/uint led_mode,time0_count,time_second,time1_count,left_mode,second = 60,left_second = 20;/*七段数码管显示0-9*/uchar code SEGNUM=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/*延时函数*/void delay(uint s)uint ms;for(;s0;s-)for(ms=0;ms256;ms+);/*车辆指示灯数据传输服务*/void SendByteCar(uchar byte)uchar i;for(i=0;i= 1;/*人行指示灯数据传输服务*/void SendBytePerson(uchar byte)uchar i;for(i=0;i= 1;/*东西数码管显示*/void DisplayEW_SEG(uint seg)K1 = 1;P0 = SEGNUMseg/10;delay(10);K1 = 0;P0 = 0xff;K2 = 1;P0 = SEGNUMseg%10;delay(10);K2 = 0;P0 = 0xff;/*南北数码管显示*/void DisplaySN_SEG(uint seg)K3 = 1;P2 = SEGNUMseg/10;delay(10);K3 = 0;P2 = 0xff;K4 = 1;P2 = SEGNUMseg%10;delay(10);K4 = 0;P2 = 0xff;/*LED交通指示灯显示*/void Mode_LED()if(led_mode = 1)/DisplayEW_SEG(9);if(left_mode = 1)/南北左拐,东西、南北人行红灯,SendByteCar(0xd3);SendBytePerson(0xaf);else/南北直行、南北左转红灯、东西左转直行红灯、东西人行绿灯SendByteCar(0xdb);SendBytePerson(0x6f);if(led_mode = 2)/南北黄灯、东西红灯,东西、南北人行红灯SendByteCar(0xd2);SendBytePerson(0xaf);if(led_mode = 3)if(left_mode = 1)/东西左拐,东西、南北人行红灯,SendByteCar(0x3d);SendBytePerson(0xaf);else/东西直行、东西左转红灯、南北左转直行红灯、南北人行绿灯SendByteCar(0xbd);SendBytePerson(0x9f);if(led_mode = 4) /东西黄灯、南北红灯SendByteCar(0x2d);SendBytePerson(0xaf);void main()EA = 1; /*总开关*/ET0 = 1;/*定时器开关*/ET1 = 1;TMOD = 0x11; /*工作方式*/TH0 = (65536 - 50000) / 256; /*高低8位寄存器初始化*/TL0 = (65536 - 50000) % 256;TH1 = (65536 - 50000) / 256;TL1 = (65536 - 50000) % 256;EX0 = 1; /*外部中断*/EX1 = 1;IT0 = 0; /*矩阵开关为下降沿触发*/IT1 = 1; /*还有这一个为上升沿触发,其实只用一个外部中断就够了*/led_mode = 1;/*初始化数据*/TR0 = 1;P3 = 0xfc;P1 = 0x00;TR0 = 1;TR1 = 1;Mode_LED();while(1)DisplayEW_SEG(second - time_second);DisplaySN_SEG(second - time_second);/*指示灯显示的模式切换*/void time0(void) interrupt 1 using 1time0_count+;if(time0_count = 20)time_second+;if(time_second = (second - left_second)left_mode = 1;/开启左转if(time_second = (second - 5)led_mode+; /亮黄灯if(time_second = second)led_mode+;if(led_mode = 5)led_mode = 1;left_mode = 0;/灭黄灯time_second = 0;time0_count = 0;TH0 = (65536 - 50000) / 256;TL0 = (65536 - 50000) % 256;/*交通指示灯*减少误差时间*/void time1(void) interrupt 3 using 3time1_count+;if(time1_count = 20)Mode_LED();time1_count = 0;TH1 = (65536 - 50000) / 256;TL1 = (65536 - 50000) % 256;void int0(void) interrupt 0 using 0P3 = 0xfb;if(S1 = 0)/繁忙模式se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论