找回密码
 立即注册

QQ登录

只需一步,快速开始

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

发一段关于51单片机控制交通灯的源程序

[复制链接]
跳转到指定楼层
楼主
ID:347182 发表于 2018-6-7 21:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


#include "reg51.h"

sbit H_red1=P1^0;
sbit H_green1=P1^1;
sbit H_yellow1=P1^2;

sbit S_red1=P1^3;
sbit S_green1=P1^4;
sbit S_yellow1=P1^5;

sbit H_red2=P2^0;
sbit H_green2=P2^1;
sbit H_yellow2=P2^2;

sbit S_red2=P2^3;
sbit S_green2=P2^4;
sbit S_yellow2=P2^5;

unsigned char code disptab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF}; //数码管显示0~F段码数组
unsigned char code bittab[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//第N个数码管显
unsigned char S_temp=12,H_temp=15;
void Delay(unsigned int t)
{       
        unsigned int i,j;
        for(i=0;i<t;i++)                //延时t个1ms
                for(j=0;j<112;j++);        //延时约1ms
}
//数码管显示子程序,每次显示1位,自动轮换,temp要先定义。
void disp()
{
        static unsigned char num;        //指定显示的数码管的序号       
        num++;
        num=(num%8);                //num 变化 0,1,……,7
        P2=0xff;                //数码管消影
        P0=0xff;                //数码管消影
        P2=bittab[num];                //数码管送位码
        switch(num)                //数码管送段码
        {
                case 0:        P0=disptab[H_temp%10];                break;//个位
                case 1:        P0=disptab[H_temp/10%10];                break;
                case 2:        P0=disptab[S_temp%10];                break;
                case 3:        P0=disptab[S_temp/10%10];                break;
                case 4:        P0=disptab[H_temp%10];                break;
                case 5:        P0=disptab[H_temp/10%10];                break;
                case 6:        P0=disptab[S_temp%10];                break;
                case 7:        P0=disptab[S_temp/10%10];                break;//十位

                default:        ;
        }
        //if(num==2||num==4)P0=P0&0x7f;        // 小数点的显示位 0*** ****
}

void int0() interrupt 1
{       
    static char k=0;
    unsigned int i;
   TH0=0x3c;
   TL0=0xb0;
        i++;  //20′?ò???
        k++;
        if(i<=240)
        {               
             
                 if(k/20) {k=0;S_temp--;H_temp--;}
             H_red1=0;
                 S_green1=0;

                 H_red2=0;
                 S_green2=0;
       
        }
        if(i==240){ H_temp =3; S_temp = 3;}

        if(i<=300 && i>240)
        {
             
                  if(k/20) {k=0;S_temp--;H_temp--;}
              H_red1=0;
                  S_green1=1;
                  S_yellow1=~S_yellow1;

                  H_red2=0;
                  S_green2=1;
                  S_yellow2=~S_yellow2;
                  
        }
        if(i==300){ H_temp =12; S_temp = 15;}
        if(i<=540 && i>300)
        {
                  
                 if(k/20) {k=0;S_temp--;H_temp--;}
             H_red1=1;
                 S_yellow1=1;
                 H_green1=0;
                 S_red1=0;

                 H_red2=1;
                 S_yellow2=1;
                 H_green2=0;
                 S_red2=0;
        }
        if(i==540){ H_temp =3; S_temp = 3;}
        if(i<=600 && i>540)
        {
                 
                 if(k/20) {k=0;S_temp--;H_temp--;}
             H_green1=1;
             H_yellow1=~H_yellow1;
                 S_red1=0;

                 H_green2=1;
             H_yellow2=~H_yellow1;
                 S_red2=0;
        }
        if(i==600){ S_temp=12;H_temp=15;}
        if(i>600)
        {
           P1=0XFF;
           i=0;
          
        }

}

void main()
{
    TMOD=0x01;
    TH0=0x3c;
    TL0=0xb0;
        TR0=1;
        EA=1;
        ET0=1;
        while(1)
        {
            disp();
                   Delay(1);
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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