51单片机信号交通灯系统源代码

发布者:快乐阳光最新更新时间:2015-04-29 来源: 51hei关键字:51单片机  信号交通灯  系统源代码 手机看文章 扫描二维码
随时随地手机看文章
本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52

/*项目:交通灯控制系统
*项目设计 交通灯用于控制行人和车辆依 次通过十字路口。
*其设计要求 如 下: 1)、首先车行道亮绿灯 45s,同时人行道亮红 45s;
*45s 后,2)、车行道黄灯闪烁 3 次,亮、灭各 1s,
*此时人行道 仍维持红灯;
*3)、6s 后,转为 人行道亮绿灯 20s,车行道亮 红灯 20s;
*4)、20s 后,再转到 第 1步,如此循环往复; 5)
*51 系列单片机控制整个系统工 作; 6) 交通信号灯用 LED 代 替;
*/
/**
*项目名称:信号交通灯控制系统;
*作者:徐冉;
*日期:2013-06-01-10:00-13:45;
*说明:开源项目,基于AT89C52-RC单片机,51hei开发板;
*备注:系统已经顺利通过调试,完美通过测试并成功实现系统功能,耗时3小时45分钟;
**/
/*******************AT89C52-RC单片机****************************/
/*************************HL-1开发板***************************/
#include
typedef unsigned int uint;
typedef unsigned char uchar;
sbit wela = P2^7;
sbit dula = P2^6;
//车行道:信号交通灯
sbit cled_hong = P1^0;    // 红灯
sbit cled_lv = P1^2;     //绿灯
sbit cled_huang = P1^4; //黄灯
//人行道:信号交通灯
sbit rled_hong = P1^1; //红灯
sbit rled_lv = P1^3;  //绿灯
//table:code
uchar code table[] = {   
     0x3F,  //"0"
                 0x06,  //"1"
                 0x5B,  //"2"
                 0x4F,  //"3"
                 0x66,  //"4"
                 0x6D,  //"5"
                 0x7D,  //"6"
                 0x07,  //"7"
                 0x7F,  //"8"
                 0x6F  //"9"
         };
uchar sec, counter, counter1, flag, flag1;
//timer1&timer0:init
 void init()
 {
  P1 = 0xff;
  TMOD = 0x11;//T0,T1 工作方式1
 TH0 = 0xB8; //定时20ms
 TL0 = 0x00;
 TH1 = 0xB8;
 TL1 = 0x00;
 TR0 = 1;
 EA = 1;
 ET0 = 1;
 ET1 = 1;
 }
//delay:xms
void delay(uint xms)
{
 uchar i, j;
 for(i = 0; i < xms; i++)
   for(j = 0; j < 110; j++);
}
//display:
void display(uchar sec)
{
 uchar cshi, cge;
 cshi = sec / 10 % 10;
 cge = sec % 10;
 dula = 1;
 P0 = table[cshi];
 dula = 0;
 P0 = 0xff;
 wela = 1;
 P0 = 0xfe;
 wela = 0;
 P0 = 0x00;
 delay(1);
 dula = 1;
 P0 = table[cge];
 dula = 0;
 P0 = 0xff;
 wela = 1;
 P0 = 0xfd;
 wela = 0;
 P0 = 0x00;
 delay(1);
}
//main:
void main(void)
{
  init();
 while(1)
 {
     display(sec);
  rled_lv = 1;
  cled_hong = 1;
     rled_hong = 0;
  cled_lv = 0;
  if(flag == 1)
  {
   TR1 = 1;
   rled_hong = 0;
   cled_lv = 1;
  }
  if(flag1 == 1)
  {
   TR1 = 0;
   cled_huang = 1;
   rled_hong = 1;
   cled_lv = 1;
   rled_lv = 0;
   cled_hong = 0;
  }
 }
}
//timer0:int
void timer0_int() interrupt 1
{
 TH0 = 0xB8;
 TL0 = 0x00;
 counter++;
 if(counter == 50)
 {
  counter = 0;
  sec++;
  if(sec >= 45)
  {
   flag = 1;
     }
  if(sec >= 51)
  {
   flag1 = 1;
   flag = 0;
  }
  if(sec == 71)
  {
   sec = 0;
   flag1 = 0;
   P1 = 0xff;
   rled_hong = 0;
   cled_lv = 0;
   rled_lv = 1;
   cled_hong = 1;
   cled_huang = 1;
  }
 }
}
//timer1:int
void timer1_int() interrupt 3
{
 TH1 = 0XB8;
 TL1 = 0X00;
 counter1++;
 if(counter1 == 50)
 {
  counter1 = 0;
  cled_huang = ~cled_huang;
 }
}

关键字:51单片机  信号交通灯  系统源代码 引用地址:51单片机信号交通灯系统源代码

上一篇:单片机LCD1602底层驱动子程序
下一篇:STC89C52单片机定时器2的使用

推荐阅读最新更新时间:2024-03-16 14:00

51单片机基础之LCD1602
外观: 原理: LCD1602是一种工业字符型液晶,能够同时显示16x2即32个字符。 LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。 基本接线: 读状态:输入:RS=L,RW=H,E=H ----输出:D0~D7=状态字 写指令:输入:RS=L,RW=L,D0~D7=指令码 ----输出:无 读数据:输入:RS=H,RW=H,E=H ----输出:D0~D7=数据 写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲
[单片机]
<font color='red'>51单片机</font>基础之LCD1602
51单片机复位后的状态
单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值,见下表。 值得指出的是,记住一些特殊功能寄存器复位后的主要状态,对于了解单片机的初态,减少应用程序中的韧始化部分是十分必要的。 说明:表中符号*为随机状态; A=00H,表明累加器已被清零; PSW=00H,表明选寄存器0组为工作寄存器组; SP=07H,表明堆栈指针指向片内RAM 07H字节单元,根据堆栈操作的先加后压法则,第一个被压入的内容写入到08H单元中; Po-P3=F
[单片机]
<font color='red'>51单片机</font>复位后的状态
51单片机学习:LED点阵实验(点亮一个点)
实验名称:LED点阵实验(点亮一个点) 接线说明: 实验现象:下载程序后,8*8LED点阵点亮左上角第一个点 注意事项:LED点阵旁的J24黄色跳线帽短接到GND一端 ***************************************************************************************/ #include reg51.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; //定义74HC595控制管脚 sbit SRCLK=P3^6; //移位寄存器时钟输入 sbit RCLK=P3^5
[单片机]
51单片机液晶显示计时器
要想实现人机交互,显示装置是不可缺少的。前面讲到了如何利用单片机控制数码管的显示,这篇文章主要关于如何控制液晶显示,并在此基础上加上定时器的功能,把原来已用数码管显示的定时器搬到液晶屏上来。 这里用到的液晶为LCD1602,能够同时显示16x02即32个字符(16列2行)。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,直接向其写入ASCII码即可显示相应字符。1602共16个 管脚,管脚功能如下: 实际应用时,所用液晶模块与单片机的连接图如下: 其中7~14管脚为IO,与单片机的P0口相接,单片机可通过向P0口发送数据被液
[单片机]
<font color='red'>51单片机</font>液晶显示计时器
C-51单片机最简单静态数码管显示数字
单片机系统中常用的显示器有:发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等,其中七段数码管显示器是常用的显示器,常用来显示设备的运行状态, 可以显示各种数字和字符,分共阴极和共阳极两种,内部电路如图1所示。 让某一数码管显示某一数字只需要 P1=0X**; // ** 表示点亮的位置 P2=0X**; // ** 表示点亮的数字 直接上代码 #include reg51.h void main() { while(1) { P1=0Xfb; P2=0X5b; //共阴极 }
[单片机]
C-<font color='red'>51单片机</font>最简单静态数码管显示数字
AT89S51与AT89C2051单片机介绍
AT89C2051是精简版的51单片机,精简掉了P0口和P2口,只有20只引脚,但其内部集成了一个很实用的模拟比较器,特别适合开发精简的51应用系统,毕竟很多时候我们用不了全部32个I/O端口,使用AT89C2051更合适,芯片体积更小,而且AT89C2051的工作电压最低为2.7V,因此可以用来开发两节5号电池供电的便携式产品。 下面对ATMEL公司生产的51系列家族的AT89S51和AT89C2051两种单片机进行一下比较,两种单片机都是目前除了宏晶STC系列单片机之外最常用的单片机,其中AT89S51为标准51单片机,当然其功能要比早期的51单片机更加强大,支持ISP在系统编程技术,内置硬件看门狗。。。 一、AT89S51单
[单片机]
51单片机CO2检测显示程序解析
这是一款51单片机CO2检测显示程序资料,二氧化碳传感器MH-Z19模块的T(TXD)接单片机的RXD, R(RXD)接单片机的TXD,V+连接单片机5v正极,V-连接单片机的地(串口TTL通信就需要连接这四根线);测量电压选用5V;单片机型号STC89C52,液晶显示屏型号LCD1602,电路连接按照那个测试图的;串口通信波特率9600,注意晶振要是11.0592M,否则会引起通信失败;传感器上电需要预热3分钟。 #include“reg52.h” #include“stdio.h” #include“intrins.h” #include“lcd1602.H” #define uchar unsigned char #d
[单片机]
<font color='red'>51单片机</font>CO2检测显示程序解析
从零开始51单片机教程 —— 17 单片机定时器与计数器
一、单片机计数概念的引入 从选票的统计谈起:画“正”。这就是计数,生活中计数的例程处处可见。例:录音机上的计数器、家里面用的电度表、汽车上的里程表等等,再举一个工业生产中的例程,线缆行业在电线生产出来之后要计米,也就是测量长度,怎么测法呢?用尺量?不现实,太长不说,要一边做一边量呢,怎么办呢?行业中有很巧妙的办法,用一个周长是1米的轮子,将电缆绕在上面一周,由线带轮转,这样轮转一周不就是线长1米嘛,所以只要记下轮转了多少圈,就能知道走过的线有多长了。 二、单片机计数器的容量 从一个生活中的例程看起:一个水盆在水龙头下,水龙没关紧,水一滴滴地滴入盆中。水滴持续落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满。录
[单片机]
从零开始<font color='red'>51单片机</font>教程 —— 17 单片机定时器与计数器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved