资源描述:
《单片机课程设计--红绿灯》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、单片机课程设计目录第一节系统总体方案21.1设计要求21.2设计任务21.3总体设计2第二节硬件设计32.1单片机选型3引脚结构图32.2硬件电路图4第三节软件设计53.1设计流程图53.2紧急中断流程图63.3设计程序及说明63.4主要函数说明11第四节Proteus软件仿真114.1正常运行114.2黄灯闪烁124.3通行转换124.4设置信号灯时间13绿灯时间13黄灯时间134.5设置后启动运行14第五节课程设计体会14第六节参考文献14附录151、同组人姓名152、实验分工151)程序设计:152)
2、电路设计:1516单片机课程设计第一节系统总体方案1.1设计要求1)南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为80秒、支干道每次通行间为60秒。2)在绿灯转为红灯时,要求黄灯先亮3秒钟,才能变换运行车道;3)黄灯亮时,要求每秒闪亮一次。4)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。1.2设计任务1)东西、南北车辆交替运行2)绿灯转为红灯时,黄灯闪亮(间隔3秒)。3)能显示剩余时间。4)能对交
3、通运行进行控制。5)能够对时间进行修改并正常运行。1.3总体设计单片机按键电路复位电路晶振电路数码显示LED显示16单片机课程设计第二节硬件设计2.1单片机选型AT89C51引脚结构图16单片机课程设计2.2硬件电路图16单片机课程设计第三节软件设计3.1设计流程图调支路通行子程开始中断初始化调主干道黄灯闪烁子程调主干道通行子程序调支路黄灯闪烁子程判断是否有开关中断?中断处理中断返回(到子程序处)NOYES16单片机课程设计3.2紧急中断流程图断点入栈保护状态参数设置送状态字至端口状态响应断点返回开始开始3
4、.3设计程序及说明16单片机课程设计#include#defineucharunsignedchar#defineuintunsignedintucharcodetable[]={//共阴极数码管码表1-F0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xC9,0xFF,0x40};//设置码,测试码,不计时码voiddelay(uintx);//延时函数voiddisplay
5、(uchar,uchar,uchar,uchar);//数码管显示函数voidmkeys();//键盘函数voidtraffic();//交通灯函数ucharnum,num1,num2,//1南北2东西shi1,ge1,shi2,ge2,value1,value2,//南北绿灯时间黄灯时间value3,value4,//东西绿灯时间黄灯时间count1,count2,flag1,flag2;//南北标记东西标记voidmain(){TMOD=0x01;TH0=(65536-45872)/256;TL0=(6
6、5536-45872)%256;EA=1;ET0=1;TR0=1;/*初状态*/value1=60;//南北黄绿灯默认值value2=3;value3=80;//东西黄绿灯默认值value4=3;num1=value1;//南北数码管先绿灯时间num2=value2+value1;//东西红灯时间shi1=num1/10;ge1=num1%10;shi2=num2/10;ge2=num2%10;P1=0x41;//初始状态:东西红灯南北绿灯16单片机课程设计while(1){if(num==20)//定时器
7、1s{num=0;num1--;num2--;traffic();shi1=num1/10;ge1=num1%10;shi2=num2/10;ge2=num2%10;}mkeys();//扫描按键display(shi1,ge1,shi2,ge2);//调用数码管显示函数}}voidtraffic()//红绿灯主控制程序{if(num1==0){count1++;if(count1==1){P1=0x42;//东西红灯南北黄灯num1=value2;}if(count1==2){num1=value3+va
8、lue4;//东西绿灯南北红灯P1=0x14;}if(count1==3){P1=0x41;//东西黄灯南北红灯num1=value4;count1=0;}}if(num2==0){count2++;if(count2==1){//P1=0x14;//东西绿灯南北红灯num2=value3;}if(count2==2){P1=0x24;//东西黄灯南北红灯num2=value4;}if(count2==3){nu