51单片机-----------四向交通灯

发布者:数据舞者最新更新时间:2021-08-02 来源: eefocus关键字:51单片机  AT89C51 手机看文章 扫描二维码
随时随地手机看文章

一 实验目的:

实验4:运用AT89C51芯片实现四向交通灯:

(1) 掌握C语言编程单片机控制程序的方法。

(2) 掌握使用Keil4软件编写、编译、调试程序的方法。

(3) 掌握使用Proteus软件绘制电路原理图、硬件仿真和程序调试。

(4) 理解和掌握共阴极数码管的显示原理和编码(记忆)。

(5) 熟悉使用51单片机I/O端口实现对外部用电器和电路的控制。


二、实验硬件和软件:

计算机1台、并安装Proteus8.6软件和Keil4软件。


Proteus8.6中会运用的部件:7SEG-MPX2-CC、AT89C51、BUTTON、LED-GREENREDYELLOW、RESPACK-8d


三、试验任务:

1.使用Proteus排线连接的方式,在单片机I/O口上外接LED灯和数码管(用网络标识符),最终实现数码管从20-0的倒计时显示效果,为最终的实训项目一做准备。(要求:显示效果数码管显示间隔时间为1S,可以在完成该实验的基础上增加实验内容:两位数从20到1的交通灯计时显示。)


2.并且使用中断口P3^4使当操作者按下独立键盘使南北方向的交通灯变为绿色可通行,而西北方向的交通灯变为红色禁止通行,让救护车、消防车等紧急车辆通过。


以下内容为这次实验的主要内容(实验报告其余内容可参照本人的其余实验报告)

四向交通灯相关代码:


void  jinji()    //紧急函数(为了完成老师要求:按下独立键盘使南北方向的交通灯变为绿色可通行,而西北方向的交通灯变为红色禁止通行,让救护车、消防车等紧急车辆通过)

{

SN_green=0;

SN_red=1;

SN_yellow=1;

WE_green=1;

WE_red=0;

WE_yellow=1;    

while(1)

{

if(k2==0)          

         {

        delayxms(3);

        if(k2==0)

         {

while(!k2);

TR0=1;   

if(flgaa==0) jtda();  

if(flgaa==1) jtdb();   

if(flgaa==2) jtday();  

if(flgaa==3) jtdby(); 

         }

}

}


代码中一些位的申明以及自己所写代码的调用:


#include

#include

#include   //自己所调用的一些函数【中断程序】


sbit smg1=P3^0;    //数码管的高低位定义

sbit smg2=P3^1;    

sbit smg3=P3^2;   

sbit smg4=P3^3;    


sbit SN_green=P2^7;    

sbit SN_red=P2^6;    

sbit SN_yellow=P2^5;    


sbit WE_green=P1^0;    

sbit WE_red=P1^1;    

sbit WE_yellow=P1^2;      


sbit k2=P3^4;    


/*记住缩写函数要在前面申明调用*/


int kkk=0,fk=0;

int djs22,js1=0,djs21,flgaa,nbdjs=20,dxdjs=20;

int js=0,djs=20,djs1=20;                        

int table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x00};


数码管的显示:


void  djsxs22()

{ int b1,b2;

  b1=djs1/10;    //赋值给数码管高位

b2=djs1%10;    //余数给数码管低位

P0=table[b1];

    smg1=0;

    delayxms(3);

    smg1=1;   


P0=table[b2];

smg2=0;

delayxms(3);

smg2=1;   

P0=table[b1];

    smg3=0;

    delayxms(3);

    smg3=1;    


P0=table[b2];

smg4=0;

delayxms(3);

smg4=1;   


四向交通灯的三个LED灯的显示:


void jtdb()

{

qm();  

flgaa=1;

WE_green=0;  

SN_red=0;  

while(1)

{

if(djs1>5)  

{

if(k2==0)  

         {

        delayxms(3);

        if(k2==0)           

         {

while(!k2);  

TR0=0;  

jinji();

}

djsxs22();  

}

   if(djs1<=5)   

{

jtdby();  

}

}

}


void jtdby()

{

qm();  

flgaa=3;  

WE_green=1;  

WE_yellow=0;  

SN_red=0;   

while(1)

{

if(k2==0)    

         {

        delayxms(3);

        if(k2==0)

         {

while(!k2);    

TR0=0;    

jinji();    

}

}  

djsxs22();   

if(djs1<0)   

  {

    djs=dxdjs;  

djs1=nbdjs;  

jtda();

  }

}

}

void jtda()

{

qm();  

flgaa=0;

SN_green=0;   

WE_red=0;   

while(1)

{

if(djs>5)  

{

if(k2==0)   

         {

        delayxms(3);

        if(k2==0)

         {

while(!k2);   

TR0=0;   

jinji();   

}

}

djsxs22();

}

if(djs<=5)   

{

jtday();   

}

}

}

void jtday()

{

qm();   

SN_green=1;  

SN_yellow=0;  

WE_red=0;  


flgaa=2;  

while(1)

{

if(k2==0)   

         {

        delayxms(3);

        if(k2==0)

         {

while(!k2);  

TR0=0;  

jinji();   

}

djsxs22();   

if(djs<0)   

{

  djs=dxdjs;   

  djs1=nbdjs;   

  jtdb();  

}

}

}


这上面是keil的部分。


在Proteus8.6软件进行仿真;

1、所使用的部件:

7SEG-MPX2-CC

AT89C51

BUTTON

LED-GREENREDYELLOW【LED灯三个(黄 绿 红)】

RESPACK-8d


连线方式:

连线方式

实验展示

在这里插入图片描述

关键字:51单片机  AT89C51 引用地址:51单片机-----------四向交通灯

上一篇:学习笔记 从零开始学单片机(9) 串口通信
下一篇:51单片机------数码管【有74HC753】

推荐阅读最新更新时间:2024-11-18 23:43

51单片机让发光二极管闪烁
简介:学过汇编的同学都清楚,单片机机在执行指令时,是一条一条指令顺序执行的,对于C语言也一样,也是一条一条语句执行,而每执行一条指令或一条语句,都要占用一定的时间,利用单片机执行程序的这个特点就可能用来实现发光二极管闪烁。 大家经常可以看到外面大街小巷各种各样漂亮的闪烁的流水或者说广告灯,如图1,这是怎么实现的呢,这节课我们就来讲下如让发光二极管闪烁和流水灯程序的设计。 图1漂亮的广告灯 1如何实现发光二极管闪烁和简单延时 学过汇编的同学都清楚,单片机机在执行指令时,是一条一条指令顺序执行的,对于C语言也一样,也是一条一条语句执行,而每执行一条指令或一条语句,都要占用一定的时间,利用单片机执行程序的这个特点就
[单片机]
<font color='red'>51</font><font color='red'>单片机</font>让发光二极管闪烁
基于51单片机的计算器 汇编语言
之前讲的计算器都是基于C语言的,接下来讲一下基于汇编语言的简易计算器。 硬件设计 显示器仍然是数码管,MCU是C51,支持整数部分的计算 仿真图: 程序设计 YJ EQU 50H ;结果存放 YJ1 EQU 51H ;中间结果存放 GONG EQU 52H ;功能键存放 ORG 0000H START: MOV R3,#0 ;初始化显示为空 MOV GONG,#0 MOV 32H,#00H MOV 33H,#00H MOV 34H,#00H MLOO
[单片机]
基于<font color='red'>51</font><font color='red'>单片机</font>的计算器 汇编语言
51单片机串口通信数码管显示
/********************************************************************************* * 【外部晶振】: 11.0592MHZ * 【主控芯片】: STC89C52 * 【程序功能】: 串口工作方式1,8位UART,比特率9600,接收串口数据,数码管以十 进制格式显示,并且把接收到的数据加1后通过串口发出 **********************************************************************************/ #include reg
[单片机]
51单片机-输入捕获
1.捕获高电平时间 我们利用定时器0的计数功能实现捕获外部引脚的高电平时间。定时器在不同用法里有不同称呼,比如我们这次是想得知某段过程持续了多长时间,用定时器的计数方式的话就叫做计数器。 我们这次选用的外部引脚还是P1.6,初始时先让该引脚输出低电平。 我们之前没有说过当TMOD低四位里的第三位GATE为1时是什么作用,这里说明一下,当这个位被置1的话,如果此时有“TR0=1;”,且P3.2必须为高电平的时候,才会触发定时器0的计数(P3.2为低电平时不会触发),也就是TL0每隔(12/11059200)秒就会加1,加到256变为0之后TH0就加1。一直加到65535就会有“TL0=255;”和“TH0=255;”,再加
[单片机]
<font color='red'>51</font><font color='red'>单片机</font>-输入捕获
51单片机控制的充电器电路
用单片机AT89C2051控制的充电器电路
[单片机]
用<font color='red'>51</font><font color='red'>单片机</font>控制的充电器电路
如何在Linux下进行stc51单片机的开发
第一次接触 单片机 ,自然选择了简单的51单片机。然而我的操作系统是 Linux 。在 Windows 下上手51似乎很容易。但是 Linux 上搭建 51 开发环境不是很顺。 那么谈谈 Linux 我如何搭建 STC89C52RC 的开发环境吧。 (一) 选择自己喜好的 代码编辑器 即可。vim , emacs , gedit 等都可以。 (二) 安装编译器。一般选择 sdcc 。一般可从发行版的包管理器中直接安装。 如Arch中:   $ sudo pacman -S sdcc 如果不行,需要自行下载编译。 简单介绍使用sdcc: 假如当前目录有一个写好的源文件 main.c 。 使用如下简单方式即可编译。 $ s
[单片机]
51单片机 矩阵按键控制数码管显示0~F
通过按下4*4矩阵按键让数码管显示对应的数值 #include reg52.h typedef unsigned char u8; typedef unsigned int u16; u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0 1 2 3 4 5 6 7 8 9 A b C d E F u16 key_value; void delay(u16 i) { while(i--); } void keyscan() { P1=
[单片机]
基于MCS-51单片机的IEEE-488接口设计
1 概 述 智能仪器程控接口电路的设计,首先是根据仪器的功能确定该仪器的接口功能。文中所涉及的仪器是以MCS-51系列单片机作为内部控制器的高速数据采集装置,由于A/D转换器既要向计算机输送采集结果,又要接受计算机对其工作条件的控制,因此,在程控接口电路设计时,设置了六种接口功能:源挂钩功能(选用SH1功能子集)、受者挂钩功能(选用AH1功能子集)、讲功能(选用T5功能子集)、听功能(选用L4功能子集)、远地/本地功能(选用RL功能子集)和器件触发功能(选用DT1功能子集)。 2 接 口 功 能 (IF) 设 计 如图1所示是该仪器的原理框图,其中接口功能电路由时序转换与信号控制电路、MC68488和四片M
[应用]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved