51单片机模拟交通信号灯

合集下载

51单片机交通灯(加急救车)

51单片机交通灯(加急救车)

51单片机控制交通灯一、实现功能:1、先南北红灯亮,东西绿灯亮。

南北红灯亮维持25秒,在南北红灯亮的同时东西绿灯也亮,并维持20秒;到20秒时,东西绿灯闪亮,闪亮3秒后熄灭。

在东西绿灯熄灭时,东西黄灯亮,并维持2秒。

到2秒时,东西黄灯熄灭,东西红灯亮,同时,南北红灯熄灭,绿灯亮,东西红灯亮维持30秒。

南北绿灯亮维持25秒,然后闪亮3秒后熄灭。

同时南北黄灯亮,维持2秒后熄灭,这时南北红灯亮,东西绿灯亮。

周而复始。

2、用一个按键模拟急救车到达。

急救车到达路口时,四个方向的红灯全亮,10秒钟后恢复正常显示。

3、一辆急救车正在过路口时(即四个方向全红灯10秒倒计时未结束),又来了一辆急救车,重新从10秒开始倒计时。

4、急救车过去之后(即10秒倒计时结束),路灯状态要继续急救车到达之前的状态往下运行。

5、数码管显示绿灯变红灯、红灯变绿灯以及急救车10秒钟的倒计时。

6、急救车从路口过的时候,蜂鸣器响1s停1s的循环报警。

二、proteus仿真电路图注:此图仅作为仿真使用。

实际焊接电路时,由于单片机的驱动能力较弱,所以数码管的位选、LED的控制最好加上三极管进行电流放大,否则即使能实现功能,但是LED和数码管的发光的亮度也不强。

三、C语言程序程序#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define duan P0#define wei P2code uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; uchar buff[8] = {10,10,10,10,10,10,10,10};uchar weizhi = 0;uchar alarm = 0;uchar bk_TH1 = 0;uchar bk_TL1 = 0;uchar bk_cnt = 0;uchar bk_cnt_time = 0;uchar cnt_time = 0;uchar cnt = 0;uchar cnt_flash = 0;bit cnt_finish = 0;bit LED = 0;bit beef_flag = 1;sbit Er = P1^0; //东西—红灯sbit Eg = P1^1; //东西—绿灯sbit Ey = P1^2; //东西—黄灯sbit Sr = P1^3; //南北—红灯sbit Sg = P1^4; //南北—绿灯sbit Sy = P1^5; //南北—黄灯sbit beef = P1^6; //蜂鸣器void display(void);void main(void){uchar time = 0;TMOD |= 0x11;TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;ET1 = 1;ET0 = 1;INT0 = 1;EX0 = 1;IP |= 0x02;EA = 1;TR0 = 1;TR1 = 1;Sr = 0;Sg = 0;Sy = 0;Er = 0;Eg = 0;Ey = 0;beef = 0;buff[0] = 11;buff[1] = 11;buff[2] = 11;buff[3] = 11;buff[4] = 11;buff[5] = 11;buff[6] = 10;buff[7] = 10;while(1){while((cnt<20)&&(alarm == 0)){Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = 1;Ey = 0;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<23)&&(alarm == 0)){Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = LED;Ey = 0;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<25)&&(alarm == 0)) {Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = 0;Ey = 1;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<50)&&(alarm == 0)) {Sr = 0;Sg = 1;Sy = 0;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<53)&&(alarm == 0)) {Sr = 0;Sg = LED;Sy = 0;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt_finish != 1)&&(alarm == 0)){Sr = 0;Sg = 0;Sy = 1;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}cnt_finish = 0;while(alarm == 1){Er = 1;Eg = 0;Ey = 0;Sr = 1;Sg = 0;Sy = 0;time = (10-cnt);buff[7] = time%10;buff[6] = time/10;if(cnt == 10){TR1 = 0;TH1 = bk_TH1;TL1 = bk_TL1;cnt = bk_cnt;cnt_time = bk_cnt_time;TR1 = 1;alarm = 0;}beef = beef_flag;}beef = 0;}}void int0(void) interrupt 0{TR1 = 0;if(alarm == 0){bk_TH1 = TH1;bk_TL1 = TL1;bk_cnt = cnt;bk_cnt_time = cnt_time;}TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;cnt = 0;cnt_time = 0;alarm = 1;TR1 = 1;}void timer0(void) interrupt 1 {TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;display();}void timer1(void) interrupt 3 {TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;if(++cnt_time == 20){cnt_time = 0;cnt++;beef_flag = ~beef_flag;}if(++cnt_flash == 4){cnt_flash = 0;LED = ~LED;}if(cnt == 55){cnt = 0;cnt_finish = 1;}}void display(void){duan = 0xff;wei = (1<<weizhi);duan = tab[buff[weizhi]];if(++weizhi == 8){weizhi = 0;}}。

51单片机交通灯仿真原理

51单片机交通灯仿真原理

51单片机交通灯仿真原理引言:交通灯作为城市交通管理的重要组成部分,起到了引导车辆和行人通行的作用。

在现代社会中,交通灯的灯光变化是由电路控制实现的。

本文将以51单片机为基础,介绍交通灯仿真的原理和实现过程。

一、51单片机简介51单片机是一种常见的微控制器,具有高性能、低功耗、易编程等特点。

它广泛应用于各种电子设备中,包括交通灯控制。

二、交通灯的基本原理交通灯一般由红、黄、绿三个灯组成。

红灯表示停车,黄灯表示准备行驶,绿灯表示可以通行。

交通灯的变化是按照一定的时间间隔来进行的,通常为红灯亮一段时间,然后黄灯亮一段时间,最后绿灯亮一段时间。

这种变化方式可以通过51单片机的定时器和IO口控制来实现。

三、交通灯仿真的实现步骤1. 硬件连接需要准备一块51单片机开发板,以及红、黄、绿三个LED灯。

将LED灯连接到51单片机的IO口上,通过电阻限流,确保电流合适。

2. 程序编写使用C语言编写程序,实现交通灯的仿真。

首先,需要定义红、黄、绿三个灯对应的IO口。

然后,设置定时器,按照一定的时间间隔来改变灯的状态。

例如,红灯亮5秒,黄灯亮2秒,绿灯亮8秒。

通过循环控制,可以实现交通灯的循环变化。

3. 烧录程序将编写好的程序通过烧录器下载到51单片机中。

确保烧录成功后,即可进行交通灯仿真。

4. 仿真测试将51单片机开发板连接到电源,打开电源开关。

此时,红灯应亮起,表示停车;随后黄灯亮起,表示准备行驶;最后绿灯亮起,表示可以通行。

通过不断循环,交通灯的状态会一直变化,实现仿真效果。

四、交通灯仿真的应用价值交通灯仿真是对交通灯控制的一种模拟,可以用于交通管理系统的设计和优化。

通过仿真实验,可以模拟不同情况下交通灯的变化,优化交通流量,提高交通效率。

此外,交通灯仿真还可以用于交通安全教育,让行人和驾驶员更好地理解交通灯的意义和规则。

五、总结本文以51单片机为基础,介绍了交通灯仿真的原理和实现过程。

通过硬件连接、程序编写、烧录和测试等步骤,可以实现交通灯的仿真效果。

基于51单片机的交通信号灯系统工作过程

基于51单片机的交通信号灯系统工作过程

基于51单片机的交通信号灯系统工作过程下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!交通信号灯系统在城市交通中起着至关重要的作用,它能够有效地指挥车辆和行人的通行,保障交通的顺畅和安全。

基于51单片机的交通信号灯模拟控制系统设计整理资料

基于51单片机的交通信号灯模拟控制系统设计整理资料
关键词:AT89C51 单片机 Keil 单片机编译软件 仿真软件 Proteus 6 C
语言 交通灯
XXXXX 学院毕业设计
XXXXX 学院毕业设计(论文)指导记录表
学生姓 名 系 别
指导教 师
课题名 称
XXX
学号
XXXXXXXXXXX
自动化工程工程系
专业班级 xxx 级机电一体化 X 班
XXX
技术职务
基于 51 单片机设计交通信号灯模拟控制系统
第一次 指导情

XXXXX 学院毕业设计
指导教师签字:



第二次 指导情


指导教师签字:


XXXXX 学院毕业设计
注:指导情况须填明学生在毕业设计(论文)撰写过程中存在的问题,指导 教师要求修改的内容或改进措施。指导情况填写不包括下达任务书和开题报 告意见。
XXXXX 学院毕业设计
XXXX 学院 毕业设计(论文)
课题名称 交通信号灯模拟控制系统
学生姓名
XXX
学号
XXXXXXXXXXXXX
系别
自动化工程系
专业班级
机电一体化 X 班
指导教师
XX
技术职务
讲师
XXXXXX 学院教务处制
XXXXX 学院毕业设计
XXXXX 学院毕业设计(论文)任务书
学生姓名
XXX
关 2)有必要的程序流程图与单片机系统设计
要 3)上位机程序的编写或规划 求 4)要求格式正确,模块完整
第五学期 第2周
学生完成设计开题报告
第五学期 学生完成毕业设计初稿,指导教师给予修改
进 第 3-5 周 建议。

基于51单片机的模拟交通灯课程设计报告

基于51单片机的模拟交通灯课程设计报告

模拟交通灯控制系统的设计一、功能要求利用红、绿、黄三种不同颜色的LED显示不同的通行情况,利用2个数码管进行1秒倒计时显示,最大定时时间为90秒;要求LED点亮时间和倒计时时间准确;完成单片机最小系统及其扩展设计,焊接电路板,组成功能完整的样机。

模拟实际交通灯控制系统功能,完成控制软件的编写与调试。

二、方案论证采用标准AT89C51单片机作为控制器;东、西、南、北各方向通行倒计时显示采用2位LED数码管,LED显示采用直接驱动方式;模拟交通信号灯采用直径为ψ5mm的圆形发光二极管;紧急车辆通行采用实时中断完成;通过蜂鸣器实现盲人提示功能。

按以上系统构架设计,单片机端口资源刚好满足要求,该系统设计方便,电路简单。

三、系统硬件电路的设计整套电路系统由控制系统模块、通行灯控制显示模块、时间显示模块、特种车辆通行控制模块和盲人提示电路模块等组成。

1、主控制系统主控制器采用AT89C51单片机的P1.0~P1.5脚用于控制东西及南北方向的通行灯,P1.6脚用于控制盲人提示电路;P0口及P2 口用于4组2位LED计时器的控制;特种车辆通过时使用外部中断0口(P3.2).5、盲人提示电路模块道口控制系统设计中也考虑到了方便盲人过人行道的声音提示电路,采用蜂鸣器作为声括信号灯提示、数码管倒计时显示、盲人提示功能和紧急车辆通行功能等)。

1、初始化程序初始化程序主要包括声明IO口的连接对象、声明7段LED数码管驱动信号数组、声明基本变量、定义无返回函数(延时函数)。

2、主程序主程序主要负责总体程序管理功能,实现信号灯显示与数码管倒计时显示,以及蜂鸣器提示和特种车通行提示。

主程序流程图如下子程序流程图如下状态1状态2状态4 状态5五、调试及性能分析1、硬件部分首先应用Proteus软件对电路原理图进行检查,检查无误后进行焊接,焊接结束后利用万用表检查线路是否为通路。

2、软件部分首先应用keil u4软件对程序进行编译和调试,调试成功后,利用Proteus 软件进行在线仿真,经过对程序多次地修改后,仿真效果达到了预期的要求。

基于51单片机的交通信号灯模拟控制系统

基于51单片机的交通信号灯模拟控制系统

基于51单片机的交通信号灯模拟控制系统一、实验目的和要求1.掌握单片机基本资源使用。

2.掌握单片机电路原理图绘制和仿真。

3.掌握单片机C语言软件开发以及联合仿真。

二、实验内容和原理实验内容:1.根据题目绘制单片机电路原理图。

2.绘制程序流程图并编写C语言程序3.在仿真程序中进行联合仿真,最后提交实验报告三、主要仪器设备keilC,proteus。

四、操作方法与实验步骤4.1 题目要求用单片机设计一个十字路口交通灯模拟控制系统,要求东西、南北两个方向都通行20秒,警告3秒,禁止20秒,同时要考虑到东西、南北两个方向出现异常情况,出现异常情况器该方向通行60秒。

4.2 系统设计思路南北的绿红黄发光二极管与单片机AT89C51单片机的P1.0,P1.1,P1.2相连。

东西的绿红黄发光二极管与单片机AT89C51单片机的P1.4,P1.5,P1.6相连。

改变单片机P1口编码控制交通灯。

控制过程中会出现两种异常情况用外中断0和外中断1处理。

时间单位采用500ms信号,由定时/计数器0定时50ms,循环10次产生,定时/计数器0采用查询方式,主程序中设定定时/计数器0的工作方式:方式1。

4.2 电路图绘制(包含详细的参数选定文字和图像叙述)C1=1nF,C2=1nF,C3=1nF,R1=300,R2=300,R3=300,R4=300,R5=300,R6=300,R7=300,R8=300,R9=300,R10=300,R11=300,R12=300,R13=3004.3 C程序编制(包含详细的文字和程序流程图)4.3 仿真分析(包含文字和图像叙述)东西绿灯,南北红灯东西黄灯,南北红灯南北绿灯,东西红灯南北黄灯,东西红灯东西发生异常时,东西通行,南北禁止,东西方向绿灯闪,南北方向红灯闪南北发生异常时,南北通行,东西禁止,南北方向绿灯闪,东西方向红灯闪五、讨论和心得(不少于100字)通过这次对交通灯信号的模拟,了解了交通灯4种正常状态,2种异常状态,它们分别是:状态1,东西方向绿灯,南北方向红灯20秒。

基于51单片机的交通灯设计

基于51单片机的交通灯设计

基于51单片机的交通灯设计交通信号灯是指示人和交通工具在道路交通中行进方向或行为的一种交通设施。

在设计交通信号灯时,应考虑交通流量、车辆速度、交叉口结构等因素,以确保交通的顺畅和安全。

本文将基于51单片机设计一种交通信号灯系统,并详细介绍其原理和实现方法。

交通信号灯系统的设计目的是通过控制红、黄、绿三种不同颜色的灯,指示车辆和行人在交通路口安全行驶。

在单片机设计中,我们将使用三个LED灯分别代表红、黄、绿三种状态。

通过控制LED的亮灭,来实现交通信号灯的变换。

首先,我们需要选择适当的硬件设备进行交通信号灯的设计。

在51单片机设计中,可以选择STC89C51或者AT89C51等型号的单片机。

此外,还需要准备三个LED灯、电阻、电容、按键等器件。

接下来,我们将进行电路设计。

在设计电路时,首先将三个LED灯连接到单片机的三个IO口上,每个IO口通过一个电阻与正极连接,负极与GND连接。

此外,在单片机的一个IO口上连接一个按键,通过按下按键触发程序的执行。

在编写程序之前,首先需要确立交通信号灯的运行逻辑。

一般而言,交通信号灯的运行逻辑如下:1.全红状态:所有车辆和行人均停止,任何方向都不可行驶。

2.绿灯状态:一些方向的车辆和行人可以行驶,其他方向均不可行驶。

3.黄灯状态:信号灯将要变成红灯或绿灯,此时车辆和行人应注意刹车或等待。

接下来,我们将编写程序并烧录到单片机中。

在程序中,需要使用到定时器和中断来进行交通信号灯的控制。

具体步骤如下:1.在程序中定义三个LED灯所对应的IO口。

2.初始化定时器,并设置定时时间,用于控制信号灯的变化。

3.设置中断,用于按键的检测和处理。

4.在主循环中,不断检测按键状态,当按键按下时,切换信号灯的状态。

5.根据信号灯的状态,控制LED灯的亮灭。

在程序设计中,应充分考虑各种异常情况和执行顺序,以保证交通信号灯的正常运行。

此外,还可以增加一些辅助功能,如倒计时显示等,以提高交通信号灯的可视性和安全性。

《单片机原理及应用》基于51单片机的交通信号灯模拟控制系统实验

《单片机原理及应用》基于51单片机的交通信号灯模拟控制系统实验

《单片机原理及应用》基于51单片机的交通信号灯模拟控制系统实验交通信号灯是城市交通管理中常见的一种交通管理设施。

它通过控制不同方向的红绿黄灯亮灭时间来指示不同方向的车辆和行人通行状态,有效地维护交通秩序和保障交通安全。

本实验基于51单片机,通过模拟控制系统实现交通信号灯的控制,以深入理解单片机原理及应用。

首先,我们需要明确实验的目标和要求。

通过本实验,我们可以掌握以下内容:1.掌握51单片机的基本工作原理和硬件结构;2.熟悉51单片机的编程语言和编程环境;3.理解交通信号灯的工作原理和设计要求;4.掌握基于51单片机的交通信号灯控制系统的设计和实现。

本实验的主要设备和材料包括:51单片机开发板、交通信号灯模拟电路、继电器、电压稳压模块、LED等。

实验步骤如下:1.搭建交通信号灯的模拟电路。

根据交通信号灯的工作原理,将LED 灯分别连接到单片机的不同IO口上,并通过继电器和电压稳压模块控制电路的通断,以实现红、黄、绿三个灯的交替亮灭。

2.编写单片机的控制程序。

根据交通信号灯的工作模式,编写单片机的控制程序,通过控制不同IO口的电平状态,实现红、黄、绿三个灯的控制。

程序中需要设置不同灯的时间参数和控制逻辑,确保交通信号灯能够按照预定的时间间隔进行工作。

3.上传程序到单片机。

将编写好的单片机控制程序通过编程器上传到单片机上,使得单片机能够执行相应的控制逻辑。

4.调试和测试。

将交通信号灯模拟电路的电源插入电源插座,观察LED灯的亮灭情况,并根据设定的时间参数检查交通信号灯是否按照预期工作。

如有需要,可以通过修改程序中的参数,调整交通信号灯的控制逻辑。

5.实验总结。

在实验完成后,我们应该对实验结果进行总结和分析,检查实验是否达到预期的目标和要求。

同时,我们还可以对实验中遇到的问题和解决方法进行总结,为今后的实验和应用提供借鉴。

通过这个实验,我们可以深入了解51单片机的原理和应用,并在实践中掌握交通信号灯的控制方法。

基于51单片机的交通灯设计

基于51单片机的交通灯设计

基于51单片机的交通灯设计交通信号灯是现代城市交通管理的重要组成部分,也是保障道路交通安全的关键设施之一、为了更好地了解交通信号灯的设计原理和实现方法,本文将以基于51单片机的交通灯设计为例,详细介绍相关知识。

首先,我们需要了解51单片机的基本知识。

51单片机是一种常见的8位单片机,广泛应用于各类嵌入式系统中。

其开发工具多样,编程语言灵活,易于上手。

交通信号灯通常由红、黄、绿三种颜色的灯组成。

在运行过程中,红灯、黄灯和绿灯依次亮起,来实现交通的有序流动。

这背后的原理是通过控制每个灯的亮灭状态和持续时间,来控制车辆和行人的行动。

1.硬件设计:首先,需要设计交通信号灯的电路,并将其连接到51单片机上。

电路中需要包括三个LED灯(红、黄、绿),以及相应的电阻和连接线路。

2.程序编写:使用51单片机开发环境,编写程序来控制交通信号灯的闪烁状态和时间。

程序中需要定义每个灯的亮灭状态和持续时间,并按照预定的顺序进行切换。

可能遇到的问题和解决方法:1.灯的亮灭状态和时间不符合预期:检查程序中对每个灯的控制语句,确保逻辑正确。

也可以通过使用调试器来单步执行代码,以查看每个步骤的执行情况。

2.电路连接错误:检查电路连接是否正确,确保每个灯的电源和地线正确连接,并没有短路或断路的情况。

3.程序逻辑错误:检查程序中的条件判断和循环语句,确保程序按照预期的顺序和时间来切换灯的状态。

在交通信号灯设计中,还可以考虑以下几个方面的优化:1.增加传感器:可以通过添加传感器模块,来根据实时的交通流量和行人情况,动态调整交通信号灯的切换时间。

这样可以更好地适应实际交通状况。

2.增加无线通信功能:可以通过添加无线通信模块,与其他信号灯或交通管理中心进行通信,实现更高级的交通控制和协调。

这样可以提高交通效率和安全性。

3.引入自学习算法:可以通过引入机器学习算法,对交通信号灯进行优化和调整。

根据交通流量、行人情况等实时数据,自动调整交通信号灯的切换策略,进一步提升交通效率。

利用51单片机实现交通红绿灯讲解

利用51单片机实现交通红绿灯讲解


END
谢谢大家!
MOV A,#0B6H
MOVX @DPTR,A ;从A口输出数据0B6H,来控制相应二极管发光
INC DPTR
MOV A,#0DH
MOVX @DPTR,A ;从B口输出数据0DH,来控制相应二极管发光

西


黄绿红 110
黄绿红 110
黄绿红 黄绿红 110 11 0
B口低4位(ODH)
;允许定时器1中断

SEYB TR1
;打开定时器1

SJMP $
SER: MOV TH1,#3CH

MOV TL1,#0B0H ;定时器重装初值

DJNZ R1,NO ;循环定时(20H)次

MOV R1,20H

DJNZ R2,NO ;循环定时(21H)次

MOV R2,21H

RET
NO: RETI
MOV 20H,#0AH

MOV 21H,#01H
LCALL DELY
;延时0.5s
MOV DPTR,#0FF7CH
MOV A,#0BEH
MOVX @DPTR,A
INC DPTR
MOV A,#0FH
MOVX @DPTR,A
;东西红灯亮
MOV 20H,#0AH

MOV 21H,#01H

LCALL DELY

MOVX @DPTR,A
;南北红灯亮
MOV 20H,#0AH

MOV 21H,01H

LCALL DELY
;延时0.5s
DJNZ R7,JOD1
;闪烁次数未到继续

51单片机实验:交通信号灯控制

51单片机实验:交通信号灯控制

实验二:交通信号灯控制
地时,转弯灯均不闪亮。

三、实验程序框图
见图1。

四、实验接线图
见图2。

图2
五、实验要求
进入实验室前,先将设计好的程序填入表5-1中,其中机器码部分可参照教科书附录中的指令表人工汇编完成,也可用相应汇编软件机器汇编得到。

进入实验室后,按照实验步骤规定完成实验。

六、实验步骤
P1.0接K1,P1.1接K2,P1.4~P1.7接L1、L5、L9、L13,输入并运行自己设计的程序,应看到交通灯正确闪亮。

七、程序清单
设计程序时,将图5-2中LED1、LED5作为右转弯灯,LED9、LED13为左转弯灯。

所写程序应进行合理的注释。

【实验过程记录(源程序、测试结果及心得体会等)】
源代码:
ORG 0000H。

基于51单片机的交通信号灯系统_毕业设计

基于51单片机的交通信号灯系统_毕业设计

毕业设计基于单片机的交通信号的灯控制系统一. 综合实训的主要内容 1.设计任务设计一单片机控制的交通信号灯系统,模拟城市十字路口交通信号灯功能。

2.基本功能要求2.1 交通信号控制直行车道红黄绿灯控制、左行车道绿灯控制、人行横道红绿灯控制。

2.2 通行时间显示数码管倒计时显示通行时间。

2.3 时间参数设置存储按键实现通行时间的设置,并存储到EEPROM (24C02)芯片中。

二. 硬件方案设计与论证 1. 显示模块设计1.1倒计时时间显示设计思想:由于该系统要求完成倒计时显示通行时间的功能,且考虑到实际的交通系统中车辆及行人通行时间不会超过一分钟,基于以上原因,我们考虑完全采用数码管显示,四个路口分别采用一个二位共阴极数码管进行显示。

(其实物图见附录1图5.3)图2.1 数码管原理图原理图分析:为了显示数字或字符,必须对数字或字符进行编码。

七段数码管GND abcde fg dp gf ed c ba(a)(a,b,c,d,e,f,g)加上一个小数点(dp),共计8段,构成一个字节,通过对这八段给予高低平使二极管导通或截止,从而显示不同的数字或字符。

系统中所使用的是2位共阴数码管(实物图见附录),其管脚从左上方起顺时针依次为1,a,b,e,d,2,g,f,dp,c。

1.2 状态灯显示设计思想:由于该系统要求完成状态灯显示的功能,我们把各个路口的红灯和黄灯设成直行和左拐两个通行方式所共有,也就是说,一个路口只需四个状态灯,一个直行通行的绿灯,一个左拐通行的绿灯,一个共有的红灯,一个共有的黄灯,人行横道采用红绿灯控制,综上所述,我们共使用16个LED绿灯,12个LED 红灯,4个LED黄灯来完成状态灯显示功能。

2.控制模块设计2.1 设计思想由于本系统结构简单,实现较容易,不需要大量的外围扩展,所以我们采用STC89C51单片机作为主控制器,STC89C51单片机具有体积小,功耗低,控制能力强,价格低、扩展灵活,使用方便等特点,其最小系统由振荡电路、复位电路构成。

基于51单片机交通信号灯控制毕业设计

基于51单片机交通信号灯控制毕业设计

第一章绪论近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。

交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。

随着中国加入WTO,我们不但要在经济、文化等各方面与国际接轨,在交通控制方面也应与国际接轨。

如果交通控不好道路还是无法保障畅通安全。

作为交通控制的重要组成部份单片机。

因此,本人选择制作交通灯作为课题加以研究。

我国大中城市交通系统压力沉重。

交通管制当以人性化、智能化为目的,做出相应的改善。

以此为出发点,本系统采用的单片机控制的交通信号灯。

该系统分为单片机主控电路、键盘控制电路和显示电路三部分组成。

并在软硬件方面采取一些改进措施,实现了根据十字路口车流量、进行对交通信号灯的智能控制,使交通信号灯现场控制灵活、有效从一定程度上解决了交通路口堵塞车辆停车等待时间不合理等问题。

系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广阔的应用前景。

1.1 课题背景随着我国国民经济的迅速发展,城市街道车辆大幅度增长,给城市交通带来巨大压力,交通拥堵已成为影响城市可持续发展的一个全局性问题。

而街道各十字路口,又是车辆通行的瓶颈所在。

已有的许多建立在精确模型基础上的交通系统控制方案都存在着一定的局限性。

研究车辆通行规律,找出提高十字路口车辆通行效率的有效方法,对缓解交通堵塞,提高畅通率具有十分现实的意义。

地面道路是一个庞大的网络,交通状况十分复杂,使目前交通控制器的单一时段控制已不能满足现代交通流量的多边性,特别是在交通流量高峰期时,往往会造成交通路口的通过率下降,甚至出现交通混乱现象,城市的交通拥挤问题正逐渐引起人们的注意。

道路平面交叉口(简称交叉口)是交通网中通行能力的“隘口”和交通事故的“多发源”,国内外城市的交通事故约有一半发生在交叉口。

用51单片机模拟交通灯

用51单片机模拟交通灯
对交叉口实行科学的管理与控制是交通控制工程的重要研究课题,是保障交叉 口的交通安全和充分发挥交叉口的通行能力的重要措施,是解决城市交通问题的有 效途径。所以,改变和完善我国现有的交通系统已成为当务之急。
交通灯信号灯的出现是人类历史上的一次重大改革,使人类的聚居生活,产生 了深远的影响。使交通得以有效管制,对于疏导交通流量,提高道路通行能力,减 少交通事故有明显效果。如何采用合适的控制方法,最大限度利用好耗费巨资修建 的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成 为交通运输管理和城市规划部门亟待解决的主要问题。随着电子技术的发展,利用 单片机技术对交通灯进行智能化管理,已成为目前广泛采用的方法。
还有交通灯是我们生活中非常常见的一种东西,对于我们学以致用的这种能 力得到了很好锻炼,能够为我们以后的工作于学习打下基础。
三. 总体设计
本系统硬件部分由单片机最小系统,LED灯,74HC574锁存器和 8段共阴极 数码组成:





4


LED 灯
本系统软件部分比较简单,主要有数锁 码管显示模块和 LED显示模块。


四. 硬件设计
数码管
下图使用 Protel99SE绘制的电路图
5
单片机的最小系统由时钟电路和复位电路组成,时钟电路由一个频率为 11.0952MHz的晶振和两个 30pF的瓷片电容组成;复位电路由一个 10uF的电解电容和一个 10k的电阻组成。红灯,黄灯,绿灯分别由单片机的 P1.0,P1.1,P1.2控制,数码管的段选 通过 74HC574接单片机的 P0口,位选通过另一个 74HC574接单片机的 P2.0,2.1口。
五,软件设计

51单片机模拟交通灯

51单片机模拟交通灯

51单片机模拟交通灯利用51 单片机的控制二极管及数码管的显示来模拟交通灯,系统晶振为11.0592MHZ,东西方向红灯设置为30 秒,南北方向红灯设置为20 秒,P1.3接一个应急按钮,按下第一次放开,南北方向绿灯一直亮,东西方向红灯一直亮(目的是为了方便大领导通行),按下放开第二次,南北绿灯闪3 秒黄灯亮2 秒后变红灯,东西方向变为绿灯,之后沿着之前的设置一直循环,下面是仿真图、程序源代码仿真图程序源代码如下:作者:胡琴联系qq:1257394091 网站:51hei 本程序已经通过软件仿真以及在自己搭建的硬件上测试通过0000hajmp mainorg 000bhajmpinti0org 0030hmain:mov tmod,#01h mov ie,#82h mov th0,#4ch mov tl0,#00h mov sp,#60h mov 31h,#30 ;东西绿灯初值30 秒mov 32h,#30 ;南北红灯初值30 秒clr4fh ;清标志位clr p1.1 ;开东西绿灯clr p1.5 ;开南北红灯setb tr0 ;启动T0loop:lcall display ;调用显示子程序lcall key ;调用应急按键判断ajmp loopinti0:push psw clr ea mov th0,#4ch mov tl0,#00h inc 35h mov a,35h cjne a,#20,out ;判1 秒是否到时mov 35h,#00 jb 4fh,yi ;判别标志位dec 31h ;东西时间每秒减1 dec 32h ;南北时间每秒减1 mov a,31h cjne a,#05,out ;判是否到25 秒setb p2.0 ;到25 秒关时间显示setb p2.1 setb p1.1 ;东西绿灯闪灭3 秒lcall del500ms clr p1.1 lcall del500ms setb p1.1 lcall del500ms clr p1.1 lcall del500ms setb p1.1 lcall del500ms clr p1.1 lcall del500ms setb p1.1 ;灭东西绿灯sjmp erout:setb ea pop pswreti er:clr p1.2 ;东西黄灯亮2 秒mov 33h,#4 ;延时2 秒loop1:lcall del500ms djnz 33h,loop1 setb p1.2 ;2 秒后灭东西黄灯clr p2.0 ;5 秒后开时间显示clr p2.1 mov 31h,#20 ;东西时间赋20 秒初值mov 32h,#20 ;南北时间赋20 秒初值setb 4fh setb p1.5 ;关南北红灯clr p1.0 ;点亮东西红灯clr p1.6 ;点。

基于51单片机的模拟交通灯

基于51单片机的模拟交通灯

基于51单片机的模拟交通灯/*----------------------------------------------- 注:P1 口连接至LED 用于显示红绿灯,P0 口接数码管段码,用于显示时间;两个74HC573 控制段码和位码。

段码接P20,位码接P21------------------------------------------------*/#include#define uchar unsigned char#define uint unsigned intsbit DUAN=P2;sbit WEI=P2;/*-------- ---------------------------------------- 全局变量------------------------------------------------*/bit red,green,yellow,turnred;//定义红绿黄灯标志位code unsigned char tab[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79, 0x71,0x00} ; //共阴数码管0-9uchar shi,ge;/*------------------------------------------------------------------------------------------------*/void delay(uint t){while(t--);}/*------------------------------------------------ 主程序------------------------------------------------*/main() {TMOD |=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;//开中断ET0=1;TR0=1;//开定时器P1=0xfc;//红灯亮red =1;while(1) {WEI=1;P0=0xfe;WEI=0;DUAN=1;P0=shi;//显示十位DUAN=0;delay(300);WEI=1;P0=0xfd;WEI=0;DUAN=1;P0=ge;//显示十位DUAN=0;delay(300); }}/*------------------------------------------------ 定时器0 中断函数------------------------------------------------*/void tim(void) interrupt 1{static uchar second=60,count;TH0=(65535- 50000)/256;TL0=(65535-50000)%256;count++;if (count==20) { count=0; second--;// 秒减1if(second==0) { if(red) { red=0;yellow=1; second=5; P1=0xF3;//黄灯亮5 秒} else if(yellow && !turnred) { yellow=0;green=1; second=50; P1=0xCF;//绿灯亮50 秒} else if(green) { yellow=1;green=0; second=5; P1=0xF3;//黄灯亮5 秒turnred=1; } else if(yellow && turnred) { red=1;yellow=0; P1=0xFC;//红灯亮60 秒second=60; turnred=0; } }shi=tab[second/10]; ge=tab[second%10]; }}tips:感谢大家。

51单片机交通灯仿真原理

51单片机交通灯仿真原理

51单片机交通灯仿真原理交通灯是城市道路交通指示设施中最重要的一种,它可以用来引导车辆和行人在道路上安全通行。

在交通繁忙的路口,交通灯起到了非常关键的作用。

本文将介绍使用51单片机对交通灯进行仿真的原理。

交通灯通常包括红灯、黄灯和绿灯这三种状态。

红灯表示停止,黄灯表示警告,绿灯表示行驶。

在信号灯中,红灯和绿灯的时间比较长,黄灯的时间比较短。

下面是使用51单片机进行交通灯模拟的步骤:1.硬件连接:首先,我们需要将51单片机与LED灯连接起来。

假设使用3个LED灯分别模拟红灯、黄灯和绿灯,将它们分别连接到单片机的3个IO口上。

2.程序编写:使用汇编或C语言编写程序,实现交通灯的工作逻辑。

以下是一个简单的示例代码:```#include <reg51.h>#define LED_RED P0 // 定义红灯连接的IO口#define LED_YELLOW P1 // 定义黄灯连接的IO口#define LED_GREEN P2 // 定义绿灯连接的IO口void delay(unsigned int t)while(t--);void mainwhile(1)//红灯亮,其他灯灭LED_RED=0x01;LED_YELLOW=0x00;LED_GREEN=0x00;delay(5000); //等待5秒//绿灯亮,其他灯灭LED_RED=0x00;LED_YELLOW=0x00;LED_GREEN=0x01;delay(5000); //等待5秒//黄灯亮,其他灯灭LED_RED=0x00;LED_YELLOW=0x01;LED_GREEN=0x00;delay(2000); //等待2秒}```4.运行仿真:将单片机连接到电源后,程序开始执行。

红灯亮起5秒后,绿灯亮起5秒,然后黄灯亮起2秒,然后循环往复。

通过以上步骤,我们成功完成了51单片机交通灯仿真。

在实际应用中,可以通过增加传感器等组件实现更多的功能,如人行道上的行人信号灯、车辆流量检测等,进一步提高交通灯的智能化和人性化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《单片机实验》设计报告交通信号灯模拟系统设计交通信号灯模拟系统设计摘要:本系统以单片机为核心,主要应用单片机中定时器计数器,IO接口,中断系统等,结合8279键盘控制电路,数码管显示以及LED灯实现对十字路口交通信号灯的智能控制。

成功实现了利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,通过按键对红绿灯点亮和熄灭时间进行调整及设置以及对红绿灯点亮和熄灭时间进行倒计时时间显示等基本功能。

并在此基础上进一步扩展,实现了对某些特殊功能的操作,如:突发紧急情况,所有路线全部红灯,或南北向(主干道)强制绿灯通行,以及东西向(次干道)强制绿灯等,并且可在交通高峰期(系统默认上午7:00-8:00,下午17:00-18:00)自动修改绿灯时间。

系统功能完善,可操控性好,代码通俗易懂。

关键字:51单片机交通信号灯智能控制 8279主要功能:分析题目可知,有两种方案设计的方法,也即两条不同的主干分别对应不同的方案,方案一以键盘控制为主干,穿插对系统时钟的检测,倒计时的检测等,系统主干为循环检测键盘是否被按下并作出相应操作。

方案二以交通信号灯不同的点亮与熄灭状态为主干,即系统的主干是交通灯状态的循环,在循环中检测按键并作出相应调整。

此次试验选择的是方案二,因为对方案一的代码实现比较复杂。

信号灯的状态依次为:南北绿灯,东西红灯->南北黄灯,东西红灯->南北红灯,东西绿灯->南北红灯,东西黄灯。

解决这部分问题的关键在于8279键盘扫描和相应的数码管显示,在实验帮助里有详细代码,另一个难点在于内置时钟和倒计时显示,这一部分内容通过使用单片机内的定时器能很好的解决,实验帮助五有详细的代码,通过定时器T1产生中断来定时,从而完成一秒的时间。

具体详见附录代码。

设计的主要内容:第一部分,系统开机界面,设置及人机互动的按键控制,流程图如下:(相应的功能流程图中已给出)第二部分,系统主干部分,即交通信号灯4个大循环以及循环内部检测按键完成拓展功能的实现,在循环内检测按键,实现相应功能,流程如下:具体细节,例如定时器的设计等在纸质档报告中有详细分析,在这里就不赘述总结:总的来说这次试验比较成功,题目要求的功能基本都实现了,对于单片机汇编程序语言的理解也更深刻了,课本上的知识比较分散,每部分之间都没有什么联系,通过实验很好的把各部分之间联系起来,加深记忆,更便于理解。

唯一不足的是对于题目的考虑不周,特殊功能采用键盘扫描子程序解决了,而没有采用终端,使得程序应激性不好,没有很好的应变性。

在以后的编程中会注意这方面的内容。

附录:(详细代码);-------------------------------------------------------Z8279 EQU 0FF82H ;8279 状态/命令口地址D8279 EQU 0FF80H ;8279 数据口地址LEDMOD EQU 00H ;左边输入八位字符显示;外部译码键扫描方式,双键互锁LEDFEQ EQU 2FH ;扫描速率LEDCLS EQU 0C1H ;清除显示 RAMLEDWR0 EQU 80H ;设定的将要写入的显示RAM地址READKB EQU 40H ;读 FIFO RAM 地址 0 的命令字;-------------------------------------------------------ORG 0000HAJMP STARTORG 001BH ;INT T1 入口地址AJMP INT_T1ORG 0040HSTART:MOV SP,#60HLCALL INIT8279 ;初始化8279MOV R3,#0H ;时MOV R2,#0H ;分MOV R1,#0H ;秒MOV R7,#0H ;倒计时时间MOV R0,#20 ;50毫秒MOV 40H,#0 ;用于改变主次干道时长比MOV R6,#0FFH ;标志MOV TMOD,#10HMOV TL1,#00H ;50毫秒的时间常数MOV TH1,#4CHSETB EX0SETB ET1SETB EA ;允许中断; 初始状态,全红灯MOV DPTR,#8300HMOV A,#0FHMOVX @DPTR,A; 键盘操作WAIT:LCALL GETKEY ;读键盘CJNE A,#0FFH,CONT ;判断是否有键输入MOV A,BCJNE A,#3CH,KEY_C ;输入键是'C',转CLEAR_T LCALL CLEAR_TKEY_C:CJNE A,#3AH,KEY_A ;输入键是'A',转START_T LCALL START_TKEY_A:CJNE A,#3DH,KEY_D ;输入键是'D',转STOP_T LCALL STOP_TKEY_D:CJNE A,#3BH,KEY_E ;输入键是'B',转SET_T LCALL SET_T ;设置系统时间KEY_E:CJNE A,#3FH,KEY_B ;输入键是'F',转SET_COUTLCALL SET_COUT ;设置倒计时间KEY_B:CJNE A,#3EH,CONT ;输入键是'E',转MONITOR AJMP MONITORCONT:CJNE R6,#0FFH,WAIT;若无秒标志则循环LCALL DISPLAY ;显示时间MOV R6,#0 ;清标志SJMP WAIT ;循环MONITOR:NOPSJMP $ ;等待回到监控;按键对应的功能CLEAR_T: ;时间清零子程序CLR TR1 ;关计数器MOV R3,#0H ;小时清零MOV R2,#0H ;分钟清零MOV R1,#0H ;秒清零MOV R0,#20 ;10毫秒清零MOV R7,#0H ;倒计时时间清零MOV R6,#0FFH ;置秒标志RETSTART_T: ;电子钟计时子程序;程序主要部分;程序开始执行后将循环在这部分CIRCLE:LCALL STATION1 ;南北绿灯,东西红灯LCALL STATION2 ;南北绿灯闪转黄灯,东西红灯 LCALL STATION3 ;南北红灯,东西绿灯LCALL STATION4 ;南北红灯,东西绿灯闪转黄灯 LJMP CIRCLERET;STATION1STATION1: ;南北绿灯,东西红灯MOV R7,30HMOV A,R7ADD A,40HMOV R7,AMOV DPTR,#8300HMOV A,#96H ;南北绿灯,东西红灯SETB TR1; 扫描键盘WO1: LCALL GETKEY ;读键盘CJNE A,#0FFH,JB1 ;判断是否有键输入MOV A,BCJNE A,#3FH,PUSHB1 ;若是按下F,则清零并且返回MOV R4,#1LCALL GETWORD ;读倒计时时间数MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R7,A ;保存输入的值INC AMOV 30H,ALCALL DISPLAY ;显示时间PUSHB1:CJNE A,#3BH,PUSHC1 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器MOV R3,#0H ;小时清零MOV R2,#0H ;分钟清零MOV R1,#0H ;秒清零MOV R0,#20 ;10毫秒清零MOV R7,#0H ;倒计时时间清零MOV R6,#0FFH ;置秒标志AJMP WAITPUSHC1:CJNE A,#3CH,PUSHD1MOV R7,#3 ;若按下C,输出3秒红灯MOV DPTR,#8300HMOV A,#0FHMOVX @DPTR,APUSHD1:CJNE A,#3DH,PUSHE1 ;若按下D,南北绿灯5秒MOV R7,#5MOV A,#96HMOVX @DPTR,APUSHE1:CJNE A,#3EH,JB1MOV R7,#5MOVX @DPTR,AJB1: CJNE R7,#0H,WO1RET;STATION2STATION2:MOV R7,#3MOV DPTR,#8300HMOV A,#06HMOVX @DPTR,ASETB TR1WO2: LCALL GETKEY ;读键盘CJNE A,#0FFH,JB2 ;判断是否有键输入MOV A,BCJNE A,#3FH,PUSHB2 ;若是按下F,则清零并且返回MOV R4,#1LCALL GETWORD ;读倒计时时间数MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R7,A ;保存输入的值INC AMOV 30H,ALCALL DISPLAY ;显示时间PUSHB2:CJNE A,#3BH,PUSHC2 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器MOV R3,#0H ;小时清零MOV R2,#0H ;分钟清零MOV R1,#0H ;秒清零MOV R0,#20 ;10毫秒清零MOV R7,#0H ;倒计时时间清零MOV R6,#0FFH ;置秒标志AJMP WAITPUSHC2:CJNE A,#3CH,PUSHD2MOV R7,#3 ;若按下C,输出3秒红灯MOV DPTR,#8300HMOV A,#0FHMOVX @DPTR,APUSHD2: CJNE A,#3DH,PUSHE2 ;若按下D,南北绿灯5秒MOV R7,#5MOV A,#96HMOVX @DPTR,APUSHE2: CJNE A,#3EH,JB2MOV R7,#5MOV A,#69HMOVX @DPTR,AJB2: CJNE R7,#0H,WO2RET;STATION3STATION3: ;南北红灯,东西绿灯MOV R7,30HMOV DPTR,#8300HMOV A,#69HMOVX @DPTR,ASETB TR1WO3: LCALL GETKEY ;读键盘CJNE A,#0FFH,JB3 ;判断是否有键输入MOV A,BCJNE A,#3FH,PUSHB3 ;若是按下F,则清零并且返回MOV R4,#1LCALL GETWORD ;读倒计时时间数MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R7,A ;保存输入的值INC AMOV 30H,ALCALL DISPLAY ;显示时间PUSHB3:CJNE A,#3BH,PUSHC3 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器MOV R3,#0H ;小时清零MOV R2,#0H ;分钟清零MOV R1,#0H ;秒清零MOV R0,#20 ;10毫秒清零MOV R7,#0H ;倒计时时间清零MOV R6,#0FFH ;置秒标志AJMP WAITPUSHC3:CJNE A,#3CH,PUSHD3MOV R7,#3 ;若按下C,输出3秒红灯MOV DPTR,#8300HMOV A,#0FHMOVX @DPTR,APUSHD3: CJNE A,#3DH,PUSHE3 ;若按下D,南北绿灯5秒MOV R7,#5MOV A,#96HMOVX @DPTR,APUSHE3: CJNE A,#3EH,JB3MOV R7,#5MOV A,#69HMOVX @DPTR,AJB3: CJNE R7,#0H,WO3RET;STATION4STATION4:MOV R7,#3MOV DPTR,#8300HMOV A,#09HMOVX @DPTR,ASETB TR1WO4: LCALL GETKEY ;读键盘CJNE A,#0FFH,JB4 ;判断是否有键输入MOV A,BCJNE A,#3FH,PUSHB4 ;若是按下F,则清零并且返回MOV R4,#1LCALL GETWORD ;读倒计时时间数MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R7,A ;保存输入的值INC AMOV 30H,ALCALL DISPLAY ;显示时间PUSHB4:CJNE A,#3BH,PUSHC4 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器MOV R3,#0H ;小时清零MOV R2,#0H ;分钟清零MOV R1,#0H ;秒清零MOV R0,#20 ;10毫秒清零MOV R7,#0H ;倒计时时间清零MOV R6,#0FFH ;置秒标志AJMP WAITPUSHC4:CJNE A,#3CH,PUSHD4MOV R7,#3 ;若按下C,输出3秒红灯MOV DPTR,#8300HMOV A,#0FHMOVX @DPTR,APUSHD4: CJNE A,#3DH,PUSHE4 ;若按下D,南北绿灯5秒 MOV R7,#5MOV A,#96HMOVX @DPTR,APUSHE4: CJNE A,#3EH,JB4MOV R7,#5MOV A,#69HMOVX @DPTR,AJB4: CJNE R7,#0H,WO4RET;电子钟停止的部分STOP_T: ;电子钟停止计时子程序CLR TR1RET;时钟设置部分SET_T: ;设置初值子程序CLR TR1 ;关计数器MOV R4,#7LCALL GETWORD ;读小时数CJNE A,#0FFH,INVALID ;判断输入合法性MOV A,BADD A,#232JC INVALID ;判断输入小时值 < 24MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R3,A ;保存输入的值MOV R4,#5LCALL GETWORD ;读分钟数CJNE A,#0FFH,INVALID ;判断输入合法性MOV A,BADD A,#196JC INVALID ;判断输入分钟数 < 60 MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R2,A ;保存输入的值MOV R4,#3LCALL GETWORD ;读秒钟数CJNE A,#0FFH,INVALID ;判断输入合法性MOV A,BADD A,#196JC INVALID ;判断输入分钟值 < 60 MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R1,A ;保存输入的值AJMP SET_TOKSET_COUT:MOV R4,#1LCALL GETWORD ;读倒计时时间数CJNE A,#0FFH,INVALID ;判断输入合法性MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R7,A ;保存输入的值INC AMOV 30H,AAJMP SET_TOKINVALID:LCALL CLEAR_T ;时间清零SET_TOK:LCALL DISPLAY ;显示时间RET;读取输入按键的部分GETWORD: ;读数子程序WKEY1:LCALL GETKEY ;读键盘CJNE A,#0FFH,WKEY1;无键输入,则再读MOV A,BADD A,#0C6HJC ERROR1 ;判断输入是否大于9 MOV A,BSUBB A,#30HJC ERROR1 ;判断输入是否小于0MOV R5,ALCALL DISLED ;显示输入的字符MOV B,#10MUL ABPUSH ACC ;保存输入的值WKEY2:LCALL GETKEY ;读键盘CJNE A,#0FFH,WKEY2;无键输入则再读MOV A,BADD A,#0C6H ;判断输入是否大于9 JC ERROR2MOV A,BSUBB A,#30H ;判断输入是否小于0 JC ERROR2DEC R4MOV R5,ALCALL DISLED ;显示输入的字符MOV B,APOP ACCADD A,BMOV B,A ;把得到的值存在B MOV A,#0FFH ;置合法输入标志AJMP KEYOKERROR2: POP ACCERROR1: MOV A,#0 ;置非法输入标志KEYOK: RET;8279初始化INIT8279: ;8279初始化子程序PUSH DPH ;保存现场PUSH DPLPUSH ACCLCALL DELAY ;延时MOV DPTR ,#Z8279MOV A,#LEDMOD ;置8279工作方式MOVX @DPTR,AMOV A,#LEDFEQ ;置键盘扫描速率MOVX @DPTR,AMOV A,#LEDCLS ;清除 LED 显示MOVX @DPTR,APOP ACC ;恢复现场POP DPLPOP DPHRET;读取键盘子程序GETKEY:;输入: 无 ; 输出: B: 读到的键码 A: 按键的标志 PUSH DPH ;保存现场PUSH DPLPUSH PSWMOV DPTR,#Z8279MOVX A,@DPTR ;读8279状态ANL A,#07H ;屏蔽D7-D3JNZ GETVAL ;判断是否有键输入MOV A,#0H ;置标志(无键输入)SJMP NKBHITGETVAL:MOV A,#READKB ;读 FIFO RAM 命令MOVX @DPTR,AMOV DPTR,#D8279MOVX A,@DPTR ;读键ANL A,#3FH ;屏蔽 SHIFT 和 CTRL 键MOV DPTR,#KEYCODE;键码表起始地址MOVC A,@A+DPTR ;查表MOV B,A ;置返回键值MOV A,#0FFH ;置标志(有键输入)NKBHIT:POP PSW ;恢复现场POP DPLPOP DPHRET;T1定时器中断控制部分,INT_T1: ;INT_T1中断服务子程序 PUSH DPH ;保护现场PUSH DPLPUSH ACCPUSH PSWMOV TL1,#00H ;50毫秒定时常数MOV TH1,#4CHDJNZ R0,EXIT ;判断毫秒=0MOV R0,#20 ;DELAY 1 SECONDMOV R6,#0FFH ;置秒标志COUNT1: MOV A,R7ADD A,#99HDA AMOV R7,A ;减1CJNE R1,#59H,SECOND;判断秒=59MOV R1,#99HCJNE R2,#59H,MINUTE;判断分=59MOV R2,#99HCJNE R3,#23H,HOUR ;判断时=23MOV R3,#99HHOUR:MOV A,R3ADD A,#1 ;时加1DA AMOV R3,AMINUTE:MOV A,R2ADD A,#1 ;分加1DA AMOV R2,ASECOND:MOV A,R1ADD A,#1 ;秒加1DA AMOV R1,A;判断是否到了特定时间7~8,17~18点CJNE R3,#7,EXIT1MOV 40H,#5CJNE R3,#00010111B,EXIT1MOV 40H,#5SJMP SHOWTEXIT1: MOV 40H,#0SHOWT: CJNE R6,#0FFH,EXIT;若无秒标志则循环LCALL DISPLAY ;显示时间MOV R6,#0 ;清标志EXIT:POP PSW ;恢复现场POP ACCPOP DPLPOP DPHRETI ;中断返回;实验帮助11延时部分,不太清楚具体功能是什么,可能是键盘消抖DELAY: ;延时子程序PUSH 0 ;保存现场PUSH 1MOV 0,#0HDELAY1:MOV 1,#0HDJNZ 1,$DJNZ 0,DELAY1POP 1 ;恢复现场POP 0RET;显示控制部分,但不是具体显示部分DISPLAY:MOV A,R3ANL A,#0FHADD A,#10HMOV R5,AMOV R4,#6LCALL DISLED ;显示小时低位MOV A,R3SWAP AANL A,#0FHMOV R5,AMOV R4,#7LCALL DISLED ;显示小时高位MOV A,R2ADD A,#10HMOV R5,AMOV R4,#4LCALL DISLED ;显示分钟低位MOV A,R2SWAP AANL A,#0FHMOV R5,AMOV R4,#5LCALL DISLED ;显示分钟高位MOV A,R1ANL A,#0FHADD A,#10HMOV R5,AMOV R4,#2LCALL DISLED ;显示秒低位MOV A,R1SWAP AANL A,#0FHMOV R5,AMOV R4,#3LCALL DISLED ;显示倒计时高位MOV A,R7ANL A,#0FHADD A,#10HMOV R5,AMOV R4,#0LCALL DISLED ;显示倒计时低位MOV A,R7SWAP AANL A,#0FHMOV R5,AMOV R4,#1LCALL DISLEDRET;显示部分DISLED: ;显示字符子程序;输入: R4,位置 R5,值 PUSH DPH ;保存现场PUSH DPLMOV A,#LEDWR0 ;置显示起始地址ADD A,R4 ;加位置偏移量MOV DPTR,#Z8279MOVX @DPTR,A ;设定显示位置MOV DPTR,#LEDSEG ;置显示常数表起始位置MOV A,R5MOVC A,@A+DPTR ;查表MOV DPTR,#D8279MOVX @DPTR,A ;显示数据POP ACC ;恢复现场POP DPLPOP DPHRET;LED显示常数表LEDSEG:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,087H ;'0.,1.,2.,3.,4.,5.,6.,7.' DB 0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H ;'8.,9.,A.,B.,C.,D.,E.,F.' DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, ';键盘键码表KEYCODE:DB 30H,31H,32H,33H,34H,35H,36H,37H ;'0,1,2,3,4,5,6,7'DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ;'8,9,A,B,C,D,E,F'END【返回】。

相关文档
最新文档