交通信号灯的51单片机仿真

  • 一、实验目的
  • 二、实验仪器
  • 三、实验内容
  • 四、实验过程及原始记录
  • 五、实验结果及分析
  • 六、源代码
  • 七、总结

一、实验目的

安装并熟悉Proteus 电路仿真软件

二、实验仪器

PC机、keil软件、proteus软件

三、实验内容

十字路口的交通灯控制系统,四组灯(红黄绿)对应十字路口的四个方向,用两位的数码管显示剩余的时间。其它功能自行完善,根据设计方案的完善程度给定成绩。

四、实验过程及原始记录

五、实验结果及分析

六、源代码

#include<reg51.h>
#define unit unsigned int
#define uchar unsigned charsbit p10=P1^0;     //东西红灯
sbit p11=P1^1;    //东西绿灯
sbit dh=P1^2;     //东西黄灯
sbit p13=P1^3;    //南北红灯
sbit p14=P1^4;    //南北绿灯
sbit nh=P1^5;     //南北黄灯
sbit p16=P1^6;    //始终置位1
sbit p17=P1^7;    //始终置位1uchar num1,num2,num3d;num3n;tt,zc;gf;key;a;b;c;    //东西时间num1;南北时间num2;时间中断次数tt;
uchar led0,led1,led2,led3;   //数码管显示缓冲区域
unsigned char code led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};void delay(int z);
void display(uchar led0,led1,led2,led3);
uchar keyscan(void);void main()
{num1=30;num2=25;tt=0;TMOD=0x11;      //设置定时器0为工作方式1TH0=(65536-50000)/256;   //定时器0设50毫秒TL0=(65536-50000)%256;EA=1;   //开总中断ET0=1;   //定时器0中断TR0=1;   //启动定时器0zc=1;   //正常情况初始化key=0x7e;P1=0xf5;num1=25;num2=30;gf=1;   //高峰期初始化c=1;num3d=35;num3n=40;display(led0,led1,led2,led3);while(1){display(led0,led1,led2,led3);key=keyscan();   //调用键盘扫描switch(key){/*正常情况通行*/case 0x7e:switch(zc)   //用于对灯的初始状态复原,因为紧急状况改变灯的状态{case 1:p10=1;   //东西红灯p11=1;   //东西绿灯p13=0;   //南北红灯p14=1;   //南北绿灯nh=1;   //南北黄灯p16=1;   //始终置为1p17=1;   //始终置为1break;case 2:P1=0xee;break;case 3:p10=0;   //东西红灯p11=1;   //东西绿灯dh=1;   //东西黄灯p13=1;   //南北红灯p14=1;   //南北绿灯p16=1;   //始终置为1p17=1;   //始终置为1break;case 4:P1=0xf5;break;};display(led0,led1,led2,led3);if(num1==0||num2==0){zc++;   //时间到0后switch(zc){case 1:num1=5;P1=0xf3;break;case 2:num1=30,num2=25;P1=0xee;break;case 3:num2=5;P1=0xde;break;case 4:zc=1;num1=25;num2=30;P1=0xf5;break;}}else if(a==1){a=0;num1--;num2--;led0=num1/10;led1=num1%10;led2=num2/10;led3=num2%10;if(zc==2)dh=~dh;if(zc==4)nh=~nh;};b=0;c=1;break;case 0x7d:if(a==1){b++;if(b<6){p10=1;     //东西红灯p11=1;   //东西绿灯dh=~dh;   //东西黄灯p13=1;   //南北红灯p14=1;   //南北绿灯nh=~nh;   //南北黄灯p16=1;   //始终置为1p17=1;   //始终置为1}else{p10=1;     //东西红灯p11=1;   //东西绿灯dh=1;   //东西黄灯p13=0;   //南北红灯p14=1;   //南北绿灯nh=1;   //南北黄灯p16=1;   //始终置为1p17=1;   //始终置为1}a=0;};break;case 0x7b:if(c==1){c=0;num3d=35;num3n=40;}display(led0,led1,led2,led3);if(num3d==0||num3n==0){gf++;switch(gf){case 1:num3d=5;P1=0xf3;break;case 2:num3d=20,num3n=15;P1=0xee;break;case 3:num3n=5;P1=0xde;break;case 4:gf=1;num3d=35;num3n=40;P1=0xf5;break;}}else if(a==1){a=0;num3d--;num3n--;led0=num3d/10;led1=num3d%10;led2=num3n/10;led3=num3n%10;if(gf==2)dh=~dh;if(gf==4)nh=~nh;}b=0;break;}display(led0,led1,led2,led3);}
}void delay(int z)
{int x;int y;for(x=z;x>0;x--)for(y=110;y>0;y--);
}void time0() interrupt 1   ///定时器中断为1,0是外部中断
{EA=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt++;if(tt==20){a=1;tt=0;}EA=1;
}void display(uchar led0,led1,led2,led3)
{P3=0xfe;P0=led_code[led0];delay(5);P3=0xfd;P0=led_code[led1];delay(5);P3=0xfb;P0=led_code[led2];delay(5);P3=0xf7;P0=led_code[led3];delay(5);
}uchar keyscan(void)   //键盘扫描函数
{P2=0xff;   //行数输出全为0if(P2!=0xff){if(P2^7==0)return(0x7d);if(P2^6==0)return(0x7b);display(led0,led1,led2,led3);   /*调显示*/}return(0x7e);   //无键按下返回值
}

七、总结

本次实验是对单片机学习的一个综合考量,主要任务便是设计一个交通灯控制系统。在查阅大量文献之后终于将程序代码完成。但在最后做proteus仿真图的时候遇到了困难,画图画到一半我的proteus直接闪退关闭了,里面的东西全没了,导致做了很多次,浪费了很多时间。但最后把仿真图画出来以后,仿真的时候我的红绿灯倒计时无法正常显示,但红绿灯能够正常跳动,到最后也没能找到原因和解决办法。所以这是一次失败的仿真实验。

交通信号灯的51仿真相关推荐

  1. 51单片机实现交通信号灯

    51单片机实现交通信号灯 文章目录 51单片机实现交通信号灯 实验环境 仿真图 实验原理 代码实现 成果图 资源下载 实验环境 软件: Keil5+Proteus7 元件(主要): AT89C51 * ...

  2. 基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警)

    基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J013 目录标题 基于51单片机十字路口 ...

  3. 【交通灯】51单片机的交通灯Proteus仿真_带紧急开关+黄灯倒计时+可调时间

    功能说明: 设计下载链接 1.四路交通灯,带有红绿灯倒计时,绿灯倒计时结束后转黄灯5秒,再转红灯. 2.紧急情况下按键紧急按钮,四路黄灯快闪. 3.可以动态设置红绿灯时间. 涉及知识点:按键扫描,定时 ...

  4. 【Proteus】51单片机交通灯信号模拟仿真示例二

    [Proteus]51单片机交通灯信号模拟仿真示例二 Proteus仿真效果 相关篇<[Proteus]51单片机交通灯信号模拟仿真示例一> 程序代码 /*---------------- ...

  5. 51单片机模拟交通信号灯控制系统设计

    51单片机模拟交通信号灯控制系统设计 设计要求: 1.用LED灯模拟十字路口交通灯控制 2.正常情况下双方向轮流通行 3.特殊情况时,A方向通行 4.紧急情况时,A和B方向都不通行 本任务涉及定时控制 ...

  6. 简单的红绿灯c语言程序,基于Protues仿真的简单交通信号灯附C语言程序

    简单的交通信号灯实现 本文中主要利用89C52单片机实现一个简单的交通信号灯系统,代码编写借助keil软件编写,再结合protues软件进行仿真.基本实现简单的交通信号等功能. 一.代码如下 #inc ...

  7. 基于Proteus仿真的交通信号灯设计——利用汇编语言实现

    基于Proteus仿真的交通信号灯设计--利用汇编语言实现 文章目录 基于Proteus仿真的交通信号灯设计--利用汇编语言实现 设计要求 基本信息 交通状态 电路仿真原理图 电路总体布局 复位电路 ...

  8. 单片机c语言交通信号灯设计,基于51单片机的交通信号灯设计毕业设计.pdf

    摘 要 在现代城市中,随着人口和汽车的急剧增长,市区交通日益拥挤,要是没有红绿灯 作为指挥工具,恐怕川流不息的汽车就会由于混乱而造成严重阻塞.因此,交通灯是交 管部门管理城市交通的重要工具之一.随着电 ...

  9. 基于51单片机六车道智能交通灯设计(仿真+源程序+PCB+论文)

    资料编号:204 功能介绍:(全套毕设资料齐全) 本设计的交通灯以十字路口为模型,在实现基本的功能前提下增加了时间及温度的液晶显示.从而还增加了路口高峰期的智能化人工管理机制. 实际生活中交通信号灯的 ...

最新文章

  1. 基于JSP实现医院病历管理系统
  2. Java 单例模式探讨
  3. 语言与golang语言运行速度_Golang语言情怀第3期 Go 语言数据类型
  4. qa dataset
  5. cassandra使用心得_使用Cassandra和Nutch爬网
  6. ubuntu下用vagrant搭建集群环境
  7. c++ sleep函数_我们如何在C,C ++中控制/安排线程的执行?
  8. php 如果则,如果python脚本在phpfi中运行,则导入python模块时会出错
  9. HR:不录用她,是因为她“太傻白甜了……”
  10. 线程开启方法之一——异步委托
  11. Security+Oauth2权限认证(案例 源码)
  12. 提问的智慧 - How To Ask Questions The Smart Way
  13. 如何通过 Redis 实现分布式锁
  14. 一网打尽车载以太网之SOMEIP(上)
  15. java打印数组的连续非空子集_求一个字符串数组所有非空子集
  16. Android 实现仿微信朋友圈九宫格图片+NineGridView+ImageWatcher(图片查看:1.预览,2.拖动,3.放大,4.左右滑动,5.长按保存到手机)的功能
  17. xgboost.fit函数
  18. CKEditor5+vue3使用以及如何添加新工具栏
  19. 不定期福利第二期讲王争:羁绊前行的,不是肆虐的狂风,而是内心的迷茫
  20. 开心一刻 程序--内行话

热门文章

  1. Python 中删除文件的几种方法|好用
  2. 静态方法(static)和非静态方法
  3. 手电筒安卓_iPhone手电筒只能照明?这两个隐藏技巧一定要会,事半功倍!
  4. 如何设计人力资源管理体系?
  5. listen监听队列刨析
  6. Oracle Linux 迷途知返
  7. Centos下数据写入MySQL数据库汉字是????
  8. Linux将鼠标解放,懒人福音,黑科技鼠标将彻底解放你的双手
  9. 攻城狮的苦逼选车经历
  10. 基于 Word2Vec 和 SVM 的微博舆情情感演化分析 论文笔记