历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2020年08月26日 | 超详细的单片机交通信号灯控制程序

发布者:bullfish 来源: 51hei关键字:单片机  交通信号灯控制  定时器 手机看文章 扫描二维码
随时随地手机看文章

利用定时器计时,注释非常详细,可自己改变定时时间。


单片机源程序如下:

#include "reg52.h"

#define GPIO_TRAFFIC P2

#define GPIO_DIG P0

typedef unsigned char u8;

typedef unsigned int u16;


//3-8译码器引脚位定义

sbit LSA = P1^0;

sbit LSB = P1^1;

sbit LSC = P1^2;

//交通信号灯南北方向控制引脚位定义

sbit GREEN10 = P2^0;

sbit RED10 = P2^1;

sbit GREEN11 = P2^2;

sbit YELLOW11 = P2^3;

sbit RED11 = P2^4;

//交通信号灯东西方向控制引脚位定义

sbit GREEN00 = P1^6;

sbit RED00 = P1^7;

sbit GREEN01 = P2^5;

sbit YELLOW01 = P2^6;

sbit RED01 = P2^7;



u8 code smgduan[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,

                                                0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴

u8 displaydata[8]; //储存信号灯倒计时


//定义一个全局变量

u8 second;



//各种函数的声明

void Timer0Init();

void delay(u16 i);

void Digdisplay();

void trafficpros();

/*******************************

                主函数:main

*******************************/

void main(void)

{

        second = 1;

        Timer0Init();  //初始化定时器T0;

        while(1)

        {

                 trafficpros();       

        }

}

/*******************************

定时器T0配置函数,只选择TCON中TR

0触发,定时10ms。

*******************************/

void Timer0Init()

{

        TMOD |= 0x01;

        TH0 = 0xd8;

        TL0 = 0xf0;     //设定初值55536,定时10ms

        IE = 0x82;      //开启T0中断和总中断

        TR0 = 1;        //开启定时器T0

}

/*******************************

中断处理函数

*******************************/

void Time0() interrupt 1

{

        static u16 i;

        TH0 = 0xd8;

        TL0 = 0xf0;    //重装初值

        i++;         //记下中断的次数,100次为一秒

        if(100 == i)

        {

                 i = 0;

                second++;

        }       

}

/*******************************

延时函数,延时约10μs

*******************************/

void delay(u16 i)

{

        while(i--);

}

/*******************************

8位数码管位选函数

*******************************/

void Digdisplay()

{

        u8 i;

        for(i = 0; i < 8; i++)

        {

                   switch(i)

                {

                        case 0:

                                LSA = 0; LSB = 0; LSC = 0; break;

                         case 1:

                                LSA = 1; LSB = 0; LSC = 0; break;

                        case 2:

                                LSA = 0; LSB = 1; LSC = 0; break;

                        case 3:

                                LSA = 1; LSB = 1; LSC = 0; break;

                        case 4:

                                LSA = 0; LSB = 0; LSC = 1; break;

                        case 5:

                                LSA = 1; LSB = 0; LSC = 1; break;

                        case 6:

                                LSA = 0; LSB = 1; LSC = 1; break;

                        case 7:

                                LSA = 1; LSB = 1; LSC = 1; break;

                }

                GPIO_DIG = displaydata[i];

                delay(100);

                GPIO_DIG = 0x00;  //消影

        }

}

/*******************************

交通信号灯控制函数

*******************************/

void trafficpros()

{

        if(second > 74)

        {

                 second = 1;

        }

        //南北方向通车和人行道

        if(second < 32)

        {

                displaydata[0] = 0x00; //第一位数码管不显示

                displaydata[1] = 0x00; //第二位数码管不显示       

                displaydata[2] = smgduan[(31 - second)/10];

                displaydata[3] = smgduan[(31 - second)%10];

                displaydata[4] = 0x00; //第五位数码管不显示

                displaydata[5] = 0x00; //第六位数码管不显示

                displaydata[6] = displaydata[2];

                displaydata[7] = displaydata[3];

                Digdisplay();

                //每次先所有的灯进行熄灭

                GPIO_TRAFFIC = 0xff;

                GREEN00 = 1;

                RED00 = 1;


                GREEN10 = 0;   //人行道绿灯亮

                GREEN11 = 0;   //车道绿灯亮


                RED00 = 0;     //东西方向人行道红灯亮

                RED01 = 0;     //东西方向车道红灯亮

        }

        //中间黄灯阶段

        else if(second < 38)

        {

                 displaydata[0] = 0x00; //第一位数码管不显示

                displaydata[1] = 0x00; //第二位数码管不显示       

                displaydata[2] = smgduan[(37 - second)/10];

                displaydata[3] = smgduan[(37 - second)%10];

                displaydata[4] = 0x00; //第五位数码管不显示

                displaydata[5] = 0x00; //第六位数码管不显示

                displaydata[6] = displaydata[2];

                displaydata[7] = displaydata[3];

                Digdisplay();

                //每次先所有的灯进行熄灭

                GPIO_TRAFFIC = 0xff;

                GREEN00 = 1;

                RED00 = 1;


                RED10 = 0;           //南北方向人行道红灯亮

                YELLOW11 = 0;  //南北方向车道黄灯亮


                RED00 = 0;     //东西方向人行道红灯亮

                RED01 = 0;     //东西方向车道红灯亮               

        }

        //东西方向通车和人行道

        else if(second < 69)

        {

                 displaydata[0] = 0x00; //第一位数码管不显示

                displaydata[1] = 0x00; //第二位数码管不显示       

                displaydata[2] = smgduan[(68 - second)/10];

                displaydata[3] = smgduan[(68 - second)%10];

                displaydata[4] = 0x00; //第五位数码管不显示

                displaydata[5] = 0x00; //第六位数码管不显示

                displaydata[6] = displaydata[2];

                displaydata[7] = displaydata[3];

                Digdisplay();

                //每次先所有的灯进行熄灭

                GPIO_TRAFFIC = 0xff;

                GREEN00 = 1;

                RED00 = 1;

               

                GREEN00 = 0;           //东西方向人行道绿灯亮

                GREEN01 = 0;                   //东西方向车道绿灯亮

[1] [2]
关键字:单片机  交通信号灯控制  定时器 引用地址:超详细的单片机交通信号灯控制程序

上一篇:基于51单片机+bmp180的数字海拔计程序
下一篇:51单片机霍尔传感器电机测速设计

推荐阅读

机器视觉技术是计算机学科的一个重要分支,自起步发展至今,机器视觉已经有30多年的历史。其功能以及应用范围随着工业自动化的发展逐渐完善和推广。随着应用需求空间扩大以及技术进步,受众多行业需求促进,“中国制造2025”国家政策推动,机器视觉在我国进入了一个快速发展时期。2017年机器视觉市场规模将近70亿元,同比增长了13.4%,约占全球市场15%的份...
队列的概念在此之前,我们来回顾一下队列的基本概念:队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。队列的特点类似售票排队窗口,先到的人看到能先买到票,然后先走,后来的人只能后买到票队列的常见两种形式普通队列在计算机中,每个信息都是存储在存储单元中的,...
  随着人工智能(AI)技术对各行各业有越来越深入的影响,我们也更多地在新闻或报告中听到“机器学习”、“深度学习”、“增强学习”、“神经网络”等词汇,对于非专业人士来说略为玄幻。这篇文章为读者梳理了包括这些在内的12个关键词,希望帮助读者更清晰地理解,这项人工智能技术的内涵和潜能。  1、机器学习  汤姆·米歇尔教授任职于卡内基梅陇...
  工业和信息化部近期在对《关于在我国大力发展钠离子电池的提案》的答复函中表示,锂离子电池、钠离子电池等新型电池是推动新能源产业发展的“压舱石”,工业和信息化部将加强布局,推动钠离子电池发展。   以下为原文 关于政协第十三届全国委员会第四次会议第4815号(工交邮电类523号)提案答复的函   高亚光委员:   您提出的《关于在我国...

史海拾趣

问答坊 | AI 解惑

PHILIPS STARplug TEA152X系列高效、低功耗电源管理器件

概述    TEA152x系列是开关电源的控制器IC,它直接对通用的主电路进行整流。它采用了高电压EZ-HV SOI工艺和低电压BICMOS工艺制造。器件包含高电压电源开关和并直接在经过整流的主电压下启动电路。    内置 ...…

查看全部问答∨

英飞凌面向汽车应用32位超标量微控制器

英飞凌(Infineon)日前宣布推出一款32位超标量微控制器TC1166,嵌入了实时性能和DSP功能,有极快的中断响应时间和最高级故障容差,适用于汽车电子和通用市场的AC和DC马达控制。    该控制器采用高性能有四级流水线的32位超标量TriCore?、V1.3 ...…

查看全部问答∨

青越锋·PCBDOC模块

特点:完善的设计规则设置,确保PCB设计符合要求 更加方便、快捷的层堆栈管理 超强的元器件布局功能 更加快捷的网络编辑功能 绝对畅快的焊盘处理功能 多重选择功能 可靠的设计规则检查 面向用户的PCB工作区 丰富的输出功能 完全可控的PCB打印…

查看全部问答∨

<ARM嵌入式linux系统开发技术详解>的光盘内容

今天收到论坛赠送的<ARM嵌入式linux系统开发技术详解>这本书,书中光盘内容上传给大家,个人感觉这本书讲的挺好,涉及内容很多,共620页! 下面的文件中有一个2440开发板的PCB和 linux的电子书     [ 本帖最后由 daicheng 于 2009 ...…

查看全部问答∨

嵌入式

求直流电机应用程序源码和vcw文件…

查看全部问答∨

WinCe FindWindow函数无法打开窗口

我的程序是: void CBrowserDlgDlg::OnButton1() {         // TODO: Add your control notification handler code here          // TODO: Add your control notification handler code h ...…

查看全部问答∨

服务器的scsi/raid驱动不安装,影响性能吗?就一个硬盘

现在我有一台服务器,之前安装的linux,没有管驱动的事情,现在改给windows,提示scsi/raid控制器的驱动没有安装, 我从网上查了一下说是支持磁盘阵列的问题,想问一下大家,我现在就一个硬盘,不安装可以吗?影响服务器的运行速度吗?…

查看全部问答∨

单片机读写sd卡

最近想试试用单片机读写sd卡,所以想问一下谁有sd卡的模块的电路图,想diy一个。。…

查看全部问答∨

LCM-LCD

本产品为4行16列字符形显示模块,可以显示中文、英文、俄文、日文、韩文等,工作电压有3V和5V两种。 蓝色LCD,白色侧背光。12点视角。 视窗25mmX62mm   QQ:625866132 欢迎交流!合作! 字符形模块 [ 本帖最后由 tonnyy 于 2010-12- ...…

查看全部问答∨

【TI原创】基于LM3S8962的网络收音机(六) --- 网络存储播放MP3

上一篇已经做好了PC端的测试程序,用来读写音频文件,并通过网路传输,这篇主要完成: 1.      LM3S8962通过网络接收PC端的数据; 2.      存储数据到SD卡中 3.    &nbs ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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