好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

单片机交通灯实验报告37634.pdf

10页
  • 卖家[上传人]:夏**
  • 文档编号:575703752
  • 上传时间:2024-08-18
  • 文档格式:PDF
  • 文档大小:202.21KB
  • / 10 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 一、实验目的 通过仿真和实物搭建相结合,完成交叉口交通灯的设计,并掌握C51编程的操作 二、实验内容及要求 模拟控制就是以红、绿、黄色 4 组 6 个发光二极管表示交通信号灯每组有两位数码倒计时显示 (1) 正常情况下 A、B 道轮流放行,A 道放行 15 秒钟,B 道放行 20 秒 (2) 一道有车而另一道无车时,使有车车道放行 (3) 有紧急车辆通过时,A、B 道均为红灯,每个口都有 2 组 2 位数码管,共 6 个灯 三、实验原理 本实验主要用到 51 单片机定时中断控制LED的跳转和数码管的倒计时,同时用查询法来检测按键,并做出相应的状态切换 四、实验仪器、材料 LED,7段数码管,AT89C52 单片机,导线 五、实验过程及原始记录 (1)通过 Proteus 做仿真图; 仿真图如下: (2)用 Keil 软件编写程序调试; 交通灯程序: /*******************代码说明************ 程序实现简单的十字交通路口指示灯功能。

      按键 act 是功能选择键,按第一下后,再按 add 键实现倒计时增加,最后一次增加的值作为倒计时数的值, act 按第二下后,再按 add 键实现交通灯方向变换,act 按第三下倒计时继续 */ #include "reg51.h" #define uchar unsigned char #define uint unsigned int - #define AA 15 #define BB 20 //设初值 uchar code table[]={ 0*3f,0*06,0*5b,0*4f, 0*66,0*6d,0*7d,0*07, 0*7f,0*6f}; sbit add=P1^1; //aad 键 sbit act=P1^0; //act 键 sbit nred=P1^2; //南北方向的红灯 sbit nyellow=P1^3; sbit ngreen=P1^4; sbit ered=P1^5; //东西方向的红灯 sbit eyellow=P1^6; sbit egreen=P1^7; sbit jian=P3^2; uchar time,num=0,nn=0,aa=1,flag2=0; bit flag=0,flag1=0; uint number,temp1,temp2,sum2=BB,sum1=AA; void delay(uint z) //延时函数 { uint *,y; for(*=z;*>0;*--) for(y=110;y>0;y--); } void init() //初始化函数 { temp1=AA; temp2=BB; TMOD|=0*21;//设置定时器 1 为工作方式 2 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; EA=1; ET0=1; - SCON = 0*50; TH1 = 0*FD; TL1 = TH1; PCON = 0*00; // ES = 1; TR1 = 1; } void display(uchar num) //数码管现实函数 { uchar shi,ge; ge=num%10; shi=num/10; P0=table[shi]; P2=table[ge]; } void main() { while(act&&(aa==1)) //开始键 { P0=0; P2=0; if(act==0) { delay(10); if(act==0) aa=0; } while(!act); } init(); if(flag1==0) display(temp1); else display(temp2); - while(1) { /*功能键*/ if(act==0) //判断 act 键是否按下 { delay(10); if(act==0) { TR0=0; num++; if(num==4) //重新启动定时器 { TR0=1; num=0; nn=0; } } while(!act); delay(5); while(!act); } /*增加键或选择南北方向的键*/ if(add==0) //判断 add 是否按下 { delay(10); if(add==0) { if(num==1) //增加数值 { nn=1; temp1++; sum1=temp1; if(temp1==100) { - temp1=0; } display(temp1); } if(num==2) //增加数值 { nn=1; temp2++; sum2=temp2; if(temp2==100) { temp2=0; } display(temp2); } if(num==3) //改变交通灯方向 { flag1=0; flag=0; display(temp1); } } while(!add); delay(5); while(!add); } /*减少键或选择东西方向键*/ if(jian==0) //判断 add 是否按下 { delay(10); if(jian==0) { if(num==1) //增加数值 { - nn=1; temp1--; sum1=temp1; if(temp1==-1) { temp1=100; } display(temp1); } if(num==2) //增加数值 { nn=1; temp2--; sum2=temp2; if(temp2==-1) { temp2=100; } display(temp2); } if(num==3) //改变交通灯方向 { flag=1; flag1=1; display(temp2); } } while(!jian); delay(5); while(!jian); } if(flag==0) //交通灯 { ered=1; - ngreen=1; nred=0; egreen=0; while((temp1>=0&&temp1<5&&nn==0)||(temp2>=0&&temp2<5&&nn==0)) { // egreen=1; eyellow=0; delay(500); eyellow=1; delay(500); } } if(flag==1) { nred=1; egreen=1; ered=0; ngreen=0; while((temp1>=0&&temp1<5&&nn==0)||(temp2>=0&&temp2<5&&nn==0)) { // ngreen=1; nyellow=0; delay(500); nyellow=1; delay(500); } } } } void timer0() interrupt 1 //定时器 0 - { TH0=(65536-50000)/256; TL0=(65536-50000)%256; time++; if(time==10) { time=0; if(flag1==0) { temp1--; if(temp1==-1) { temp1=sum1; flag=~flag; flag1=~flag1; } if(flag!=1) display(temp1); else display(temp2); } else { temp2--; if(temp2==-1) { temp2=sum2; flag=~flag; flag1=~flag1; } if(flag!=0) display(temp2); else display(temp1); - } if(flag2==1) { // temp1=number; // sum1=temp1; // flag1=0; } else if(flag2==2) { // temp2=number; // sum2=temp2; // flag1=1; } } } void UARTInterrupt(void) interrupt 4 { if(RI) { RI = 0; flag2++; if(flag2==3) flag2=0; number=SBUF; } else TI = 0; } /*void SendOneByte(unsigned char c) { SBUF = c; while(!TI); TI = 0; - } */ (3)调试成功后结合实物调试。

      六、实验结果及分析 按下第一个键,数码管和交通等开始亮,数码管开始倒计时显示,按下第一个键第一次调整第一个数,按下第二次调整第二个数,按下第三次,调整交通灯的显示状态,按下第四次重新开始倒计时 七、实验体会 这次实验主要用了定时器 0 中断来控制倒计时的时间,运用查询法控制三个按键,P0 口控制十位,P2 口控制个位这次的实验是很难忘的经历,本次实验对单片机编程能力要求比较高,而且我们编的程序太麻烦了,太长了,没有注意编程的技巧,在以后的学习中要注意编程能力的训练通过此次实验,锻炼了我们的动手能力,理论联系实际,对于提高水平很有帮助。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.