找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2535|回复: 4
打印 上一主题 下一主题
收起左侧

求51交通灯能加减时间有数码管

[复制链接]
跳转到指定楼层
楼主
ID:143896 发表于 2016-11-7 22:33 来自触屏版 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
求51交通灯能加减时间有数码管
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

地板
ID:145582 发表于 2016-11-8 12:20 | 只看该作者

SmartMetal 核心板 原理图.pdf (58.17 KB, 下载次数: 34)


我给你简单说明一下:我买的学习板是1代表打开数码管,0代表关闭数码管,相当于直接把位选简单化了,P0口直接表示段选;
led是共阳极的,数码管是共阴极的。
回复

使用道具 举报

板凳
ID:143896 发表于 2016-11-8 11:08 来自触屏版 | 只看该作者
妖夜 发表于 2016-11-7 23:48
这是我前段时间写的交通灯程序,也是请教了论坛的大神帮忙解决的。图下面有源码,你自己看看吧。

有电路图吗
回复

使用道具 举报

沙发
ID:145582 发表于 2016-11-7 23:48 | 只看该作者
这是我前段时间写的交通灯程序,也是请教了论坛的大神帮忙解决的。图下面有源码,你自己看看吧。
  1. /**************************************************
  2. 实验名:交通灯设计
  3. 实验内容:利用中断,定时/计数器,数码管和led灯进行交通灯的设计
  4. *************************************************/                                                          
  5.                                     #include <reg52.h>
  6.                                 #define uint unsigned int
  7.                                    #define uchar unsigned char
  8.                                    sbit wei1=P2^4;           //定义位选 0
  9.                                    sbit wei2=P2^5;           //1
  10.                                    sbit wei3=P2^6;           //2
  11.                                    sbit wei4=P2^7;           //3
  12.                                    sbit green_we=P1^2;        //定义交通灯 绿东西
  13.                                    sbit green_ns=P1^3;        //定义交通灯 绿南北
  14.                                    sbit red_we=P1^0;        //定义交通灯 红东西
  15.                                    sbit red_ns=P1^1;        //定义交通灯 红南北
  16.                                    sbit yellow_we=P1^4;        //定义交通灯 黄东西
  17.                                    sbit yellow_ns=P1^5;        //定义交通灯 黄南北
  18.                                    uchar num,num1,shi_we,shi_ns,ge_we,ge_ns;
  19.                                    uint xianshi_we,xianshi_ns;
  20.                                    uchar code table[]={
  21.                                    0x3f,0x06,0x5b,0x4f,0x66,
  22.                                    0x6d,0x7d,0x07,0x7f,0x6f}; //定义数值0,1,2...9
  23.                                    void delayms(uint xsm) //延时程序
  24.                                    {
  25.                                    uint i,j;
  26.                                    for(i=xsm;i>0;i--)
  27.                                    for(j=110;j>0;j--);
  28.                                    }
  29.                                    void display(uchar shi_we,uchar ge_we,uchar shi_ns,uchar ge_ns)         //定义数码管动态扫描函数
  30.                                    {
  31.                                    wei1=1;
  32.                                    wei2=0;
  33.                                    wei3=0;
  34.                                    wei4=0;
  35.                                    P0=table[shi_we];
  36.                                    delayms(5);
  37.                                    wei1=0;
  38.                                    wei2=1;
  39.                                    wei3=0;
  40.                                    wei4=0;
  41.                                    P0=table[ge_we];
  42.                                    delayms(5);
  43.                                    wei1=0;
  44.                                    wei2=0;
  45.                                    wei3=1;
  46.                                    wei4=0;
  47.                                    P0=table[shi_ns];
  48.                                    delayms(5);
  49.                                    wei1=0;
  50.                                    wei2=0;
  51.                                    wei3=0;
  52.                                    wei4=1;
  53.                                    P0=table[ge_ns];
  54.                                    delayms(5);
  55.                                    }
  56.                                    void main()
  57.                                    {
  58.                                    num=0;
  59.                                    num1=0;
  60.                                    xianshi_we=19;
  61.                                    xianshi_ns=19;
  62.                                    shi_we=1;
  63.                                    ge_we=9;
  64.                                    shi_ns=1;
  65.                                    ge_ns=9;
  66.                                    TMOD=0x01;                                  //设置定时器0和计数器1为工作方式1
  67.                                    TH0=(65536-46080)/256;          //设置初值
  68.                                    TL0=(65536-46080)%256;
  69.                                    EA=1;                                          //开总中断
  70.                                    ET0=1;                                          //开定时器0中断
  71.                                    TR0=1;                                          //启动定时器0
  72.                                    P1=0xff;           //led灯全灭
  73.                                    P1=0xf6;   //定义东西亮红灯,南北亮绿灯;
  74.                                    while(1)
  75.                                    {
  76.                                         display(shi_we,ge_we,shi_ns,ge_ns);
  77.                                           if(num1==17)
  78.                                         {
  79.                                         P1=0xde; //定义东西亮红灯,南北亮黄灯;
  80.                                         }
  81.                                 if(num1==19)
  82.                                         {
  83.                                         P1=0xf9; //定义东西亮绿灯,南北亮红灯;
  84.                                         xianshi_we=19;
  85.                                 xianshi_ns=19;
  86.                                         }
  87.                                 if(num1==36)
  88.                                         {
  89.                                         P1=0xed; //定义东西亮黄灯,南北亮红灯;
  90.                                         }
  91.                                 if(num1==39)
  92.                                         {
  93.                                         num1=0;
  94.                                         xianshi_we=19;
  95.                                 xianshi_ns=19;
  96.                                         P1=0xf6; //定义东西亮红灯,南北亮绿灯;
  97.                                         }
  98.                                    }
  99.                                    }
  100.                                    void T0_time()interrupt 1
  101.                                    {
  102.                                         TH0=(65536-46080)/256;
  103.                                         TL0=(65536-46080)%256;
  104.                                         num++;
  105.                                         if(num%20==0)
  106.                                         {
  107.                                      num=0; num1++;
  108.                                          xianshi_we--;
  109.                                             xianshi_ns--;
  110.                                          shi_we=xianshi_we/10;
  111.                                          ge_we=xianshi_we%10;
  112.                                          shi_ns=xianshi_ns/10;
  113.                                          ge_ns=xianshi_ns%10;
  114.                                          }
  115.                                    }
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表