51单片机交通灯系统设计(流程框图+硬件+源码)

发布者:幸福时光最新更新时间:2020-01-20 来源: 51hei关键字:51单片机  交通灯系统  流程框图 手机看文章 扫描二维码
随时随地手机看文章

这是老师要求做的项目,现在已经做好了,没有什么大问题。

一, 设计要求与方案论证

1.1设计要求:

1.1.1基本要求:

1、东西方向、南北方向均有红、黄、绿三种信号灯,初始红灯30秒,黄灯闪烁3秒,绿灯30秒,东西方向红灯时刻,南北方向绿灯,南北方向绿灯,东西方向红灯;

2、按键调节与控制功能,通过按键,可以控制某一个方向长时间绿灯,另一个方向长时间红灯;通过按键可以控制某一个方向的红灯时长,比如调整东西方向红灯40秒,绿灯20秒,于此同时,南北方向红灯20秒,绿灯40秒。

3、夜间模式按钮按下,所有方向显示黄灯闪烁

4、实时提醒灯亮的剩余时间


1.1.2拓展部分:

目前还没拓展

1.2系统基本方案选择和论证:

1.2.1单片机芯片的选择方案和论证:

STC公司生产的8051内核,CMOS工艺;


1.2.2数码管显示模块的选择方案和论证:

选择的是共阳的数码管,单片机的驱动能力不是很强,故此选择共阳数码管;。



1.2.3Led灯的选择方案与论证:

通过一个Led灯的电流大约是10ms。








1.3 电路设计最终方案

2.1  表数的产生由定时器T0产生

TH0=0xFC;TL0=0x67; 每1ms中断一下,对整个项目的标志量改变一下它的值。


2.2  略;







3.1 电路设计框图

3.2系统硬件描述

主要的硬件是89C51这个芯片进行输入输出控制。


3.3主要单元电路的设计

3.3.1单片机主控模块的设计


3.3.2数码管模块的设计


3.3.3Led灯模块的设计

3.3.4电源稳压模块


4.1程序流程框图

4.2 数码管模块流程图

4.3 按键调整模块设计框图


5.1 测试仪器

万能表对是否导通,是否短路进行检测。


5.2软件测试平台 Keil C51


5.3 硬件测试

5.3.1 显示模块测试

  

5.4 测试结果分析与结论

5.4.1测试结果分析

已经可以实现上述功能。

5.4.2测试结论

测试已经完成,已经可以实现了要求的功能。


作品总结

在这一次的作品制作过程中对万用表,c语言,Proteus的使用更加的得心应手,更加的熟练。


附录一:系统电路图



附录二:系统C程序

#include

#define              uint unsigned int;

#define  uchar unsigned char;


void  DigitalTube();   //数码管显示函数

void  InterruptT0();              //内部中断0


sbit  P10 = P1^0;                            //红绿灯引脚的初始化

sbit  P11 = P1^1;

sbit  P12 = P1^2;

sbit  P13 = P1^3;

sbit  P14 = P1^4;

sbit  P15 = P1^5;


sbit  P16 = P1^6;                            //数码管使能控制

sbit  P17 = P1^7;

sbit  P20 = P2^0;

sbit  P21 = P2^1;


sbit  K22 = P2^2;                 //按键22

sbit  K23 = P2^3;

sbit  K24 = P2^4;

sbit dula = P2^5;


uint LedBuf[10] = {

                              0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

                            0x80,0x90

};                            //0~9的数字显示共阳


uint Kflag = 1;                              //按键24的标志

uint LedNumNS = 27;                 //南北的数字显示

uint LedNumEW = 30;                 //东西的数字显示

uint i = 0;

uint j = 0;

uint j1 = 0;

uint k = 0;

uint g = 0;

uint z = 0;                                          //计数及状态的变量


uint LedTime1 = 30;

uint LedTime2 = 27;

uint LedTime3 = 30;

uint LedTime4 = 27;


uint Kf22 = 1;              //按键前一个状态的值

uint Kf23 = 1;

uint Kf24 = 1;

uint KSta24 = 1;              //按键的当前值

uint KSta23 = 1;

uint KSta22 = 1;  

uchar Kflag22 = 0;              //按键22的switch函数参数


void main()

{

              EA = 1;                                          //开总中断

              ET0 = 1;                            //开内部中断0

              TR0 = 1;

              TMOD = 0x01;                 //方式1

              TH0 = 0xFC;

              TL0= 0x67; //1ms中断

              P1 = 0xEE;                            //


              while(1)

              {

                            DigitalTube();              //数码管显示

              }


}



void InterruptT0() interrupt 1

{

                                                        TH0 = 0xFC;

                                                        TL0 = 0x67; //1ms中断             

                                                        i++;             

                                                        k++;

                                         

                                                        KSta24 = K24;                                //按键K24  夜间模式

                                                        if(Kf24 != KSta24)                            //按键有动作

                                                        {

                                                                      if(Kf24 == 1)                            //按键按下

                                                                      {

                                                                                    Kflag = !Kflag;                           

                                                                      }

                                                                      Kf24 = KSta24;

                                                        }

                                         



                                          KSta23 = K23;                                //按键K23  增减时长

                                          if(Kf23 != KSta23)                            //按键有动作

                                          {

                                                        if(Kf23 == 1)                            //按键按下

                                                        {

                                                        //              LedTime = LedTime +2;

                                                                      LedTime1 = LedTime1 +5;              //32  34 36 38 30

                                                                      LedTime2 = LedTime2 +5;              //25  23 21  19 17

[1] [2] [3] [4] [5] [6]
关键字:51单片机  交通灯系统  流程框图 引用地址:51单片机交通灯系统设计(流程框图+硬件+源码)

上一篇:基于单片机的天然气泄漏报警系统设计论文
下一篇:STC89C52RC单片机+串口+红外控制16路舵机程序

推荐阅读最新更新时间:2024-11-15 02:15

智能窗帘设计:51单片机+A/D转换+光敏电阻+LCD1602+步进电机
单片机源程序如下: #include reg52.h #define uchar unsigned char #define uint unsigned int #define yi 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80) #define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40) uchar display_digit ={0,0,0}; uchar yuzhi ={0,0,0}; uchar phasecw ={0x08,0x04,0x02,0x01};//正转 电机导通相序 D
[单片机]
智能窗帘设计:<font color='red'>51单片机</font>+A/D转换+光敏电阻+LCD1602+步进电机
51单片机“呼吸灯”程序
刚看了一份关于光立方的视频里片面提到“呼吸灯”一词,忙草草写了一个带数码管显示亮度变化的呼吸灯程序,其中整型frequency为调节呼吸频率的参数,附图为临时做的gif文件,需等会儿才见效果/*12Mhz??§????*/ #include reg51.h #define uchar unsigned char #define uint unsigned int uint f=100; /*????????f????????????1~10khz*/ uint H=6;/*????????·§????????0~10000/f????H L*/ uint L=0;/*????????·§????????0~10000/f??
[单片机]
<font color='red'>51单片机</font>“呼吸灯”程序
51单片机AD转换的程序
void Read_init (unsigned char CHA){ unsigned char AD_FIN=0; //存储A/D转换标志 CHA = 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位) ADC_CONTR = 0x40; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置) _nop_(); ADC_CONTR |= CHA; //选择A/D当前通道 _nop_(); ADC_CONTR |= 0x80; //启动A/D电源 DELAY_MS(1)
[单片机]
<font color='red'>51单片机</font>AD转换的程序
51单片机程序烧写说明
程序烧写说明 USBASP下载器使用方法 启动下载软件PROGISP1.6.7 烧录步骤: 设置编程器及接口,编程器选择USBASP,接口为USB(如图) 选择芯片,在选择芯片下拉列表可以选择正在使用的单片机型号51或者avr均可(常用的51型号为AT89S52,常用的AVR型号为ATMEGA16) 设置熔丝位(若使用51单片机不需要设置熔丝,直接进入下一步),注意SPIEN要始终保持红色,否则容易造成芯片死锁。如图显示的是熔丝的位配置方式,如果不熟悉熔丝功能,可以点击位配置方式旁边的向导方式。设置好熔丝后点击写入。 加载所要烧录的程序文件:点击调入Flash,选择所要烧录的编译好的程序
[单片机]
<font color='red'>51单片机</font>程序烧写说明
C51单片机中断函数的定义及应用
C51函数声明对ANSI C作了扩展,具体包括: 1.中断函数声明: 中断声明方法如下: void serial_ISR () interrupt 4 [using 1] { /* ISR */ } 为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。 /* define not used interrupt, so generate “IRET” in their entrance */ void extern0_ISR() interrupt 0{}/* not used */ void timer0_ISR () interrupt 1{}/* not used */ void extern1_IS
[单片机]
8051单片机的指令系统有什么特点?
8051的指令系统由111条指令组成。如果按字节数分类,有49条单字节指令46条双字节指令和16条三字节指令,以单字节指令为主;如果按照指令执行时间分类,有64条单周期指令、45条双周期指令和2条四周期指令,以单周期指令为主。 8051的指令系统具有以下特点: (1)存储效率高、执行速度快,可以进行直接地址到直接地址的数据传送,能把一个并行I/O口中的内容传送到内部RAM单元中而不必经过累加器A或工作寄存器Rn。这样可以大大提高传送速度和缓解累加器A的瓶颈效应。 (2)用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格字节内容传送到累加器A中。这为编成翻译算法提供了方便。 (3)在算术运算指令中设有乘法和除法
[单片机]
51单片机定时器/计数器的结构及方式控制寄存器TMOD
1、定时器/ 计数器 的结构如图1所示。 图片1 2 、定时器/计数器方式控制寄存器TMOD TMOD用于控制定时器/汁数器的工作模式及工作方式,其字节地址为80H,格式如下。其中,低4位用于决定T0的工作方式,高4位用于决定T1的工作方式。 图片1 1)、M1和M0工作方式控制位 M0和M1为工作方式控制位,确定4种工作方式,如表1所示。 图片1 2)、C/T定时器/计数器方式选择位 C/T=0,设置为定时方式,对机器周期进行计数; C/T=1,设定为计数方式,对外部信号进行计数,外部信号接至T0(P3.4)或T1(P3.5)引脚。 3)、GATE门控位 GATE=0时,只要用软件使TR0(或TR1)置
[单片机]
<font color='red'>51单片机</font>定时器/计数器的结构及方式控制寄存器TMOD
聊聊你知道的串口
串口是最简单的串行接口和调试工具 上点年纪的朋友都知道,最早期的51单片机可没有现在的这么多外设,什么内置ADC,SPI,CAN,I2C,DMA等等,唯一有的就只有四种类型的外设:GPIO,定时器,外部中断还有就是我们今天要说的串口。从那时候就出道的工程师一直工作到现在,接触了形形色色的MCU或者MPU,最早期的很多外设到如今已经面目全非了,或许在51单片机盛行的年代,你能很清楚地画出其IO口的内部结构,但是现在单片机的IO口显然要强大且复杂得多。真可谓沧海变桑田。不过,这些外设中唯一有一个到目前为止还是觉得那么亲切,那就是串口。尽管配置方式和之前的51单片机有着很大的不同,但是其最基本的参数如波特率,起始位,数据长度,停止位依旧
[单片机]
聊聊你知道的串口
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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