开发者社区> cometwo123> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介:
+关注继续查看

设计一个基于单片机的交通灯信号控制器。已知东、西、南、北四个方向各有红黄绿色三个灯,在东西方向有两个数码管, 在南北方向也有两个数码管。 要求交通灯按照表 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;   
   } 
 }


 


   

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PIE-engine 教程 ——基于PIE-engine的水体频率变化长时序遥感监测自动计算平台
PIE-engine 教程 ——基于PIE-engine的水体频率变化长时序遥感监测自动计算平台
26 0
08配置基础路径 同时导出一个函数和一个变量 封装微信请求Api
08配置基础路径 同时导出一个函数和一个变量 封装微信请求Api
26 0
基于STM32设计的智能插座+人体感应灯(ESP8266+人体感应+手机APP)
基于STM32设计的智能插座+人体感应灯(ESP8266+人体感应+手机APP)
282 0
基于STM32设计的智能插座+人体感应灯(ESP8266+人体感应+手机APP)
基于STM32设计的智能插座+人体感应灯(ESP8266+人体感应+手机APP)
139 0
基于 three.js 的 3D 粒子动效实现
作者:个推web前端开发工程师 梁神 一、背景 粒子特效是为模拟现实中的水、火、雾、气等效果由各种三维软件开发的制作模块,原理是将无数的单个粒子组合使其呈现出固定形态,借由控制器、脚本来控制其整体或单个的运动,模拟出现真实的效果。
2614 0
51单片机数据传送指令
51单片机数据传送指令 51单片机数据传送指令   数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。  如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。
1398 0
Comet技术详解:基于HTTP长连接的Web端实时通信技术
前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询、Comet技术、WebSocket技术、SSE(Server-sent Events)。
1212 0
newton's three laws of motion(牛顿三大运动定律)
<p>1、Every object in a state of uniform motion tends to remain in that state of motion unless an external force is applied to it.</p> <p>无外力的作用下,物体保持静止状态</p> <p>2.The relationship between an obj
1377 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
5G无线增强设计与国际标准
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载