普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 575|回复: 0

第一个51程序

[复制链接]

2

主题

2

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2023-12-26 11:14:21 | 显示全部楼层 |阅读模式
/*红绿灯项目
    使用普中板A7
        接口P0、P1、P2、静态数码管接口。
实现效果:
        1.车行灯和人行灯实现交换亮灯。
        2.静态数码管呈现9-0倒数,倒数后0闪3次,车道黄灯同时闪。
*/
#include "reg52.h"
#include "intrins.h"
#define LED1 P0           //静态数码管
typedef unsigned char u8;
typedef unsigned int u16;
//LED灯接口数据
sbit BLS1=P2^0;         //人行绿灯1   D1
sbit BHS1=P2^1;         //人行红灯1   D2
sbit DLS1=P2^2;         //车行绿灯1   D3
sbit DHS1=P2^3;         //车行黄灯1   D4
sbit DHD1=P2^4;         //车行红灯1   D5
sbit DLS2=P2^5;         //车形绿灯2   D6
sbit DHS2=P2^6;         //车行黄灯2   D7
sbit DHD2=P2^7;         //车行红灯2   D8
sbit BLS2=P1^0;         //人行绿灯2   D9
sbit BHS2=P1^1;         //人行红灯2   D10
u8 timeSJ[11]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f,0x00};        //静态数码管显示
void time(u16 T)
{
        while(T--);
}

void DHS(u16 c)        //黄灯开关函数
{
   switch(c)
   {
                   case 0:{DHS1=0,DHS2=0;}break;          //车行黄灯亮
                   case 1:{DHS1=1,DHS2=1;}break;     //车行黄灯灭
   }

}

void PAT(u16 e)          //闪烁函数
{
        u16 d=0;
        for(d=0;d<e;d++)
        {
                LED1=~timeSJ[10];        //数码管不显示
                DHS(1);        //调用黄灯函数
                time(50000);
                 LED1=~timeSJ[9];        //数码管显示0
                DHS(0);
                time(50000);
        }
                DHS(1);
}

void main()
{       
        u16 a=0,b=0;
       
        while(1)
        {
         for(a=0;a<2;a++)        //for实现换灯
         {
                for(b=0;b<=10;b++)
                 {
                          if(b==10)
                         {
                     //换灯闪3次0 黄灯亮
                                 if(a==0)
                                {
                                         BLS1=1;                //人行绿灯1灭
                                        BHS2=1;                //人行红灯2灭
                                        DLS1=1;   //车行绿灯1灭
                                    DHD2=1;   //车行红灯2灭       
                                 }
                                 else
                                 {
                                         BLS2=1;                  //人行绿灯2灭
                                        BHS1=1;                  //人行红灯1灭
                                        DLS2=1;   //车行绿灯2灭
                                    DHD1=1;   //车行红灯1灭
                                 }
                                 PAT(3);          //函数修改形参改变闪烁次数
                         }
                         else
                         {
                          //从9开始倒数交叉显示灯亮
                                if(a==0)
                                {
                                 LED1=~timeSJ[b];
                                 BLS1=0;   //人行绿灯1亮
                                 BHS2=0;   //人行红灯2亮
                                 DLS1=0;   //车行绿灯1亮
                                 DHD2=0;   //车行红灯2亮
                                 time(50000);
                                }
                                else
                                {
                                 LED1=~timeSJ[b];
                                 BLS2=0;         //人行绿灯2亮
                                 BHS1=0;         //人行红灯1亮
                                 DLS2=0;   //车行绿灯2亮
                                 DHD1=0;   //车形红灯1亮
                                 time(50000);
                                }

                         }
                }
          }
        }                  
}

回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-27 19:39 , Processed in 0.089155 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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