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


设计一个基于单片机的交通灯信号控制器。已知东、西、南、北四个方向各有红黄绿色三个灯,在东西方向有两个数码管, 在南北方向也有两个数码管。 要求交通灯按照表 1进行显示和定时切换,并要求在数码管上分别倒计时显示东西、南北方向各状态的剩余时间。

表1 交通灯的状态切换表

文档下载:http://wenku.baidu.com/view/90f849876529647d26285204?fr=prin

警告:不同单片机的动态扫描显示不一样,即下面黄底红字是让数码管显示函数,如果单片机不一样,只需改显示      函数即可,其他的不要动。

2: 程序设计(仅供参考的 C语言源程序)

#include<reg52.h>     //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<math.h>
#define uchar unsigned char
#define uint  unsigned int
#define ulang unsigned lang
static unsigned char count;
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
         //共阴数码管 0-9
uchar smg[8];                 //定义缓冲区
uint  we,ns,h,j;   //ns代表南北,we代表东西

int aaa();   //东西红灯亮,南北绿灯,黄灯亮
int bbb();   //南北红灯亮,东西绿灯,黄灯亮
int eee();   //第一次完成显示,继续第二次初始化
void delay(unsigned int cnt)
{
 while(--cnt);
}

void display( )
{
                                 //取每一位的数字
            smg[0]=tab[we/10];
       smg[1]=tab[we%10];
  smg[2]=0x00;
            smg[3]=0x00;
              smg[4]=0x00;
       smg[5]=0x00;
                 smg[6]=tab[ns/10];
  smg[7]=tab[ns%10];
}
void main()
{
     uchar i;
     TMOD |=0x01;  //定时器0 10ms in 12M crystal 用于计时
TH0=0xd8;     //初值
TL0=0xf0;
ET0=1;
TR0=1;
     EA =1;
  display();
  while(1)
  {

for(i=0;i<8;i++)    //显示函数,因单片机而异
   {
      P0=smg[i];
 P2=i;
 delay(100);
   }
           ccc();     //进入交通灯控制程序
display( );    //扫描数码管
       }  

}
void timer() interrupt 1             //中断函数
{

   TH0=0xd8;                  //重新赋值
   TL0=0xf0;
   count++;
}
int aaa()
{
          if(j<25)                 //东西红灯计数30秒,南北25秒绿灯亮
      {
      if(j==1) { we=30,ns=25; }
 ns--;
      we--;
      P1=0xde;
 return 0; } 

    if(25<=j<30)          //南北黄灯5秒
  {
      if(j==26)  {  ns=5; }
     P1=0xee;
ns--;
we--;
return 0;    }
}
int bbb()
{
            if(h<25)
      {                    //南北红灯30秒,东西绿灯25秒
      if(h==1) { we=25,ns=30; }
 ns--;
      we--;
       P1=0xf3;
 return 0; } 

    if(25<=h<30)           //东西黄灯5秒
  {
      if(h==26)  {  we=5; }
     P1=0xf5;
ns--;
we--;
return 0;    }

 }
 int eee()      //一次周期交通灯显示完后,重新赋值,等待第二次
 {
  j=0;
 h=0;
 return 0;
 }
 int ccc()          //交通灯控制函数
 {

  if (count==100)       //定时一秒
    {
            count=0;
    j++;            //算法函数
 if ( (j>30)&&(j!=61))  { h++;      bbb();  return 0;   }
    if(j==61)   { eee(); return 0;}
               aaa();        return 0;
   }
 }
				
时间: 2024-12-13 05:57:38

基于MCS-51单片机的交通灯设计的相关文章

手机-基于51单片机的蓝牙开关的设计

问题描述 基于51单片机的蓝牙开关的设计 求助!继电器电路是这样的,由P2口控制,低电平继电器闭合,共有8路继电器,以第一路继电器为例,手机端发送1继电器闭合,再发送1继电器断开,但程序弄了半天也没弄明白,求大神给个程序,万分感谢!!! 解决方案 51单片机之电子钟设计

图片-小弟有一个51单片机的汇编课程设计求助

问题描述 小弟有一个51单片机的汇编课程设计求助 小弟经管专业的,,不知道学校怎么想的开了这门课,朋友们求助.在这个实验平台上作业个简易电子琴或者多种模式的跑马灯就行!求带上接线方法.图片说明 解决方案 http://wenku.baidu.com/link?url=Q20AsAfHOJbj0wiknsLSI6T4sb3bn7oomEtGGhR3NLDSz2QirIHSrZy1oiwDN0ncfgmowdD4uAfqzNOkq-hh1Nevk1X8vMp_xUup6hHyDzG

51单片机之爱心灯设计

这是我人生中的第一个代码,这也是我接触IT行业的第一个项目,现在看来这也不算什么了,但是毕竟还是曾经的回忆,想当初进入实验室学了几天单片机后就做了这个爱心灯. #include <REGX52.H> #define uint unsigned int #define uchar unsigned char uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED从低位往高位移 uchar code table1[]=

《51单片机应用开发从入门到精通》——2.9 交通灯实例

2.9 交通灯实例 51单片机应用开发从入门到精通 定时器/计数器是单片机中最常用.最重要的功能模块之一,本节通过交通灯控制器实例来演示定时器的使用方法,并复习如何使用上节学习的散转程序. 本节首先介绍交通灯的基础知识以及定时器/计数器的基础知识,接着介绍本实例的硬件电路构成,然后逐步分析定时器的编程以及程序的全貌,最后将总结一下本实例的技巧与注意点. 2.9.1 基础知识 交通灯控制器实例主要使用了8051单片机的定时器/计数器,本实例的基础知识主要包括:交通灯的变化规律.定时器/计数器的概念

51单片机交通灯的proteus仿真怎么弄

问题描述 51单片机交通灯的proteus仿真怎么弄 这是我的代码和原理图,目的要求是点亮发光二极管同时数码管计数一段时间,然后换别的二极管亮再计数,程序不知道哪里错了,一运行数码管和发光二极管就不能按要求工作 #include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit dx_hong=P0^0; sbit dx_huang=P0^1; sbit dx_lv

单片机课程设计-基于51单片机的分时分区照明控制器的汇编程序

问题描述 基于51单片机的分时分区照明控制器的汇编程序 (1)具有3种固定的模式,作息模式之间可以根据时间自动转换或手动转换.模式如下: 手动:可以任意管制各个分区的照明. 时间控制:按照学校日常运行模式,6:00~12:00.14:00~18:00启用照明,其他时间关闭,自动切换. 自动模式:在6:00~12:00.14:00~18:00启用照明时间段中,6:00开始启用照明,当室外照度达到一定强度时,关闭B区.C区照明,当室外照度低于一定强度时,重新启用.在此期间,A区采用温度场控制,当该区

单片机 光立方-基于51单片机的8*8*8的光立方

问题描述 基于51单片机的8*8*8的光立方 基于51单片机的8*8*8的光立方,希望有详细的代码,可以立体动感的控制小灯.小灯图像变换的同时还有音乐伴随.我会用protues仿真.希望提供相应的电路图 解决方案 http://www.51hei.com/bbs/dpj-31331-1.html

基于51单片机频率计的代码问题,求大神解答啦~

问题描述 基于51单片机频率计的代码问题,求大神解答啦~ 基于51单片机的频率计设计 软件设计原理:利用单片机内部资源,定时器0定时一秒,计数器1在1s内计数,从而计算得频率. 这样能测得1hz~450khz. 我想设定当频率小于10hz时,定时器0定时10s,计数器1在10s内计数,结果测得的数据除以10就得到频率,从而获得0.1hz~10hz更精确的频率. 现在代码测试的情况是:被测频率大于10hz没有问题,如果被测频率小于10hz,结果显示为10倍的频率,意思就是程序中没有除以10,怎么改

基于vhdl的交通灯控制程序,需要管教配置图,

问题描述 基于vhdl的交通灯控制程序,需要管教配置图, 基于vhdl的交通灯控制程序,需要管教配置图,,能在实验箱上实现 解决方案 http://www.docin.com/p-720997369.htmlhttp://wenku.baidu.com/link?url=RjrbDZu_vShXsVaEbTVNcgkJL2D1ztNAIZ0Pbh4dY2QtbZ2_gApTUswiRW3VnvA8_72tjZ6ui4lLkDHb_JsGcgffNxs_R72yJHGvB0YhLJm管脚配置根据你