历史上的今天
返回首页

历史上的今天

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

正在发生

2020年11月11日 | 单片机交通灯PCB板图与仿真源码(MAX7219+数码管显示)

2020-11-11 来源:51hei

单片机交通灯源程序如下:

#include

#include


#define uchar unsigned char

#define uint unsigned int

#define DIG0 0x01                 // 定义数码管1

#define DIG1 0x02                 // 定义数码管2

#define DIG2 0x03                 // 定义数码管3

#define DIG3 0x04                 // 定义数码管4


void delay(uint i);

void T0_init();

void MAX7219(uchar addr,uchar num);

void MAX7219_init();                        //MAX7219初始化


void display();


sbit DIN=P3^0;                                         //连接MAX7219 DIN引脚

sbit LOAD=P3^1;                                        //连接MAX7219 LOAD 引脚

sbit CLK=P3^2;                                         //连接MAX7219 CLK 引脚



sbit G1=P0^0;                                        //南北红绿灯

sbit Y1=P0^1;

sbit R1=P0^2;

                                                                 

sbit G2=P1^0;                                        //东西红绿灯

sbit Y2=P1^1;

sbit R2=P1^2;


uchar NS_S,NS_G,EW_S,EW_G;

uchar NS,EW;

uchar temp=0,i;


uchar code table[10]= {0x7e,0x30,0x6d,0x79,0x33,

                                          0x5b,0x5f,0x70,0x7f,0x7b};                //共阴级数码管数组

                                                         

void delay(uint i)

{

        uint j;

        for(j=0;j}


void T0_init()

{                                                                 //装初值10MS

        TMOD=0X01;

        TH0=0XD8;

        TL0=0XF0;

        ET0=1;

        TR0=1;

}

void MAX_write(uchar ch)                 //以8位一个字节进行写值

{

        uchar j,ads;

    for(j=0;j<8;j++)                            //8位

        {

      ads=ch&0x80;                        //取最高位

      CLK = 0;                        //时钟线置低

      if(ads)  DIN = 1;

      else     DIN = 0;

      ch=ch<<1;                         //左移一位

      CLK=1;                                     //上升沿,DIN的数据写入到7219

    }

}

void MAX7219(uchar addr, uchar num)                //写地址,写数据

{

    LOAD = 0;         

        _nop_();

    MAX_write(addr);

         _nop_();

    MAX_write(num);  

         _nop_();

    LOAD = 1;                                  //锁存

}                                                                          


void MAX7219_init()

{

    MAX7219(0x0c,0x01);                                        //正常状态

    MAX7219(0x0b,0x03);                                        //设置扫描范围DIG0-3

    MAX7219(0x0a,0x05);                                        //设置亮度11/32

    MAX7219(0x09,0x00);                                        //采用译码方式 ,不译码

}

void display()

{

        NS_S=NS/10;                                                         //南北十位,个位

        NS_G=NS%10;


        EW_S=EW/10;                                                         //东西十位,个位

        EW_G=EW%10;


        MAX7219(DIG0,table[NS_S]);                                //南北十位,个位       

    MAX7219(DIG1,table[NS_G]);                                       

    MAX7219(DIG2,table[EW_S]);                                //东西十位,个位

    MAX7219(DIG3,table[EW_G]);

}



void T0_(void)interrupt 1

{

  temp++;

  TH0=0XD8;

  TL0=0XF0;

  if(temp==100)

    {

      temp=0;

      NS--;

      EW--;

          if((NS==0)&&(EW==3))

         {

          NS=3;

          EW=3;

          i=1;

         }

      if((NS==0)&&(EW==0)&&(i==1))

         {

          NS=83;

          EW=80;

          i=2;

         }

     if((NS==3)&&(EW==0))

         {

          NS=3;

          EW=3;

          i=3;

         }

     if((NS==0)&&(EW==0)&&(i==3))

         {

          NS=60;

          EW=63;

          i=4;

         }

        }

        display();

}

void main()

{

        T0_init();

        MAX7219_init();

        EA=1;

        NS=60;                                                                   //初始南北通行60秒

        EW=63;                                                                  

   R2=0,G1=0;                                                             //南北绿灯亮,东西红灯亮

while (1)

        {

                uint k;

                display();        

      switch(i)

               {

              case 1:         R2=1,G1=1;                        //关闭南北绿灯,东西红灯

                                                  Y1=0,Y2=0;                        //黄灯闪烁

                      for(k=0;k<3;k++)

                        {

                              Y1=~Y1;

                                                          Y2=~Y2;

                              delay(10000);

推荐阅读

史海拾趣

Caddell-Burns Manufacturing公司的发展小趣事

为了进一步扩大市场份额,Caddell-Burns Manufacturing公司开始积极寻求国际合作。他们与多个国家的电子制造商建立了稳定的合作关系,将产品出口到世界各地。同时,公司还参加了多个国际电子展会,展示了公司的最新产品和技术成果,吸引了众多客户的关注。这些举措不仅提升了公司的国际知名度,也为公司的长期发展奠定了坚实基础。

ELECTRONIC ASSEMBLY公司的发展小趣事

在电子产业的浪潮中,一家名为“智汇电子组装”的初创公司凭借其独特的技术优势迅速崛起。公司创始人是一位资深的电子工程师,他带领着一支由多名技术精英组成的团队,专注于研发高效、精确的电子组装技术。通过不断创新和优化,智汇电子组装成功开发出一套自动化组装设备,大大提高了生产效率,降低了成本。凭借这一技术优势,公司逐渐在电子组装市场上崭露头角,赢得了众多客户的青睐。

驰兴电感(Coilank)公司的发展小趣事

为了进一步提升产品的竞争力,驰兴电感积极开展国际合作。公司与国际知名电子元器件厂商建立了长期稳定的合作关系,共同研发新产品、新技术。这些国际合作不仅使驰兴电感能够借鉴国际先进经验和技术,还为公司带来了更多的市场机会和资源。

Gems Sensors & Controls公司的发展小趣事

随着技术的不断积累和市场的不断拓展,Gems Sensors & Controls公司成功加盟了全球知名的世界500强企业丹纳赫集团。这一举措不仅为公司带来了更多的资源和支持,也加速了Gems的全球化布局。如今,Gems的生产基地遍布北美、欧洲和亚洲,并在全球范围内设立了销售、设计和服务办事处,能够为客户提供更加全面和便捷的服务。

HIT(日立)公司的发展小趣事
在电路中设置过流、过压等保护电路,以防止电路在异常情况下损坏或引发安全事故。
Diamond SA公司的发展小趣事

在电子行业竞争日益激烈的背景下,Diamond SA公司开始寻求通过并购来实现规模扩张和资源整合。他们精心挑选了一些具有潜力的目标企业,通过谈判和交易成功完成了并购。这些并购不仅为Diamond SA公司带来了更多的技术资源和市场份额,还增强了公司的整体竞争力。

问答坊 | AI 解惑

加载错误

不知道该怎么设置啊。。。。。。 望大虾指点。。。。。。…

查看全部问答>

RF工程师的音:urgent:某著名半导体外企新出来的RF 职位(内部推荐)

某著名外企新出来的RF 职位, 不过指明了公司名, 注意不符合请勿浪费资源,同时请注意工作地点有:上海,深圳,北京,成都,请在简历中注明申请去的地方。紧急招募,越开越好。请发中英文简历到 herofighter88@gmail.com 除Technical Hub Manager, ...…

查看全部问答>

赛灵思的数字显示器产品方案

本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 Xilinx FPGA 和目标设计平台可以满足面板、存储器和视频/调谐器板接口的各种 I/O 要求,包括高速 LVDS、RSDS、PPDS、DisplayPortTM 和 V-by-OneTM。 Xilinx 还能满足新兴技术所需的清晰图像 ...…

查看全部问答>

手把手教你写程序(zt)

手把手教你写程序 内容:从最简单的程序入手,手把手教你写程序,让同学们拿到一个复杂的程序或者任务,能快速找到切入点,写出程序,再在此基础上优化程序。当拿到一个单片机任务时,不要急于动手写程序,先仔细分析它的以下几个点: 1、它要 ...…

查看全部问答>

求助:arm linux驱动,要用到singal()函数和setitimer函数,应该包含哪些头文件?

2.6.22的内核, 要用到singal()函数和setitimer()函数,应该包含哪些头文件? #include #include 包含上面两个头文件后还是提示说singal和setitimer未定义,仔细看了下,linux/signal.h中没有signal函数的声明。 高手帮忙看看,谢谢…

查看全部问答>

miniGUI皮肤编程 一个弱弱的问题~

1,请问miniGUI关于皮肤的编程要不要安装关于皮肤的函数库? 2,关于皮肤的变成用gcc后面要加什么进行编译啊?…

查看全部问答>

基于ZIGBEE的智能家居应该选择哪种拓扑结构为宜?

大家好。小弟要写一篇硕士毕业论文。内容是关于ZIGBEE的智能家居系统。 我看了一些1,2年前的文献,他们大都采用星型的拓扑结构。 我想问下,如果采用星型的话,那么在房间内的那些终端节点,会不会因为墙的阻挡,而在与中央的主控制器的通信过程 ...…

查看全部问答>

嵌入式linux编程内存泄露检测问题

找到一个memwatch工具,编译单个文件时只要在编译语句中定义memwatch相关的变量就好,但是编译大量的文件,makefile要怎么改;还有memwatch能否检测内核的内存泄露问题,请高手指教!!!…

查看全部问答>

WinCE5.0 Build 报错

系统用的是S3C2440 build log 报错如下: BUILD_MARKER:LINK_STATIC_LIBRARY_END Copying fulllibc.* NMAKE : fatal error U1073: don\'t know how to make \'showerr\' Stop. 请问各位高手是何原因啊?…

查看全部问答>

求教关于虚拟打印机的问题

我用了一个虚拟打印机驱动,把word文档转化为bmp图片,一旦检测到有图片产生,就会弹出对话框处理当前文档的图片,但是,当word文档前面几页没有页码,后面有页码时,虚拟打印机却把前面没有页码的识别为一个文档,后面的识别为一个文档,弹出两次 ...…

查看全部问答>