51单片机编写交通灯

#include<reg52.h>
#include"bstv51.h"

uint g;
uchar code X[3]={0x40,0x30,0x06};
uchar code led[3]={3,12,48};
uchar code D[17]={0x3f , 0x06 , 0x5b ,0x4f , 0x66 , 0x6d ,0x7d ,
                   0x07 , 0x7f , 0x6f ,0x77 , 0x7c , 0x39 , 
                   0x5e , 0x79 , 0x71 , 0x00};

void delay(uint xms)
{
    uint i,j;
	for(i=xms;i>0;i--)
	    for(j=112;j>0;j--);
}

void play3(uint x)
{
	uint i,j,y;
	i = x%10;
	j = x/10%10;
    for(y=166;y>0;y--)
     {
	P0=D[i];
	DU=1;
	DU=0;
	P0=0x7f;
	WE=1;
	WE=0;
	delay(1);
	P0=D[j];
	DU=1;
	DU=0;
	P0=0xbf;
	WE=1;
	WE=0;	 	
    delay(1);
	P0=X[g];
	DU=1;
	DU=0;
	P0=0xfe;
	WE=1;
	WE=0;
	delay(1);
	P1 = ~led[2];
    }
	for(y=502;y>0;y--)
     {
	P0=0xfe;
	P1=~0;
	delay(1);
    } 
}

void play90(uint x)
{
	uint i,j,y;
	i = x%10;
	j = x/10%10;
	P1 = ~led[1];
    for(y=333;y>0;y--)
     {
	P0=D[i];
	DU=1;
	DU=0;
	P0=0x7f;
	WE=1;
	WE=0;
	delay(1);
	P0=D[j];
	DU=1;
	DU=0;
	P0=0xbf;
	WE=1;
	WE=0;	 	
    delay(1);
	P0=X[g];
	DU=1;
	DU=0;
	P0=0xfe;
	WE=1;
	WE=0;
	delay(1);
    }
}

void main()
{
    while(1)
	{
	   uint i,j;
	   P1 = 0xfe;
	   for(g = 0;g < 3;g++)	
	   {
	   for(i = 15;i > 3;i--)
	     {
		   play90(i);
		 }
	   for(i = 3;i > 0;i--)
	     {
		   play3(i);
		 }
	   }
	}
}

这个代码需要另外一个文件(下面这个是c文件)

/*********************************************************************
 *
 *                         bstv51.c
 *
 *********************************************************************
 * 描    述: BST-V51开发板初始化
 * 开发平台: BST-V51开发板+KEIL C51
 ********************************************************************/

#include <reg52.h>/*包含51系统头文件*/
#include "bstv51.h"/*包含BST-V51开发板头文件*/

/*BST-V51主板初始化函数*/
void bstv51_init(void)
{
	/* 引脚方向、输出初值定义 */
	FM=1;/*蜂鸣器*/
	EN=0;/*让LCD1602数据口处于输入状态,相当于LCD1602使不能,让其释放数据总线*/
	CS=1;/*TF卡使不能*/
	RST=0;/*ds1302使不能*/
}

这个是.h文件

/*********************************************************************
 *
 *                          bstv51.h
 *
 *********************************************************************
 * 文件名: bstv51.h
 * 描  述: BST-V51开发板头文件
 ********************************************************************/

#ifndef bstv51_H
#define bstv51_H

/*变量类型标识的宏定义,通常做法*/
#define uchar unsigned char //8 0-255
#define uint unsigned int   //16  0-65535
#define ON 1
#define OFF 0

/*定义晶振频率(单位 Hz)*/
#define FOSC  11059200 
//#define FOSC  12000000 
//#define FOSC  22118400 


/* BST-V51 引脚定义 */
sbit L0  = P1^0; //LED0引脚
sbit L1  = P1^1;
sbit L2  = P1^2;
sbit L4  = P1^4;
sbit L5  = P1^5;
sbit L6  = P1^6;
sbit L7  = P1^7;

sbit RS  = P1^0;   //RS为寄存器选择,1=数据寄存器、0=指令寄存器。
sbit RW  = P1^1;   //RW为读写信号线,1=读操作,0=写操作。
                   //当RS=RW=0可以写入指令或者显示地址,
                   //当RS=0,RW=1可以读忙信号,
                   //当RS=1,RW=0可以写入数据。

sbit SDI  = P1^5;  //DS1302
sbit SDO  = P1^6;  //DS1302
sbit SCK  = P1^7;  //DS1302


sbit EN	 = P2^5;   //当EN端由高电平跳变成低电平时,液晶模块执行命令。
sbit CS  = P2^6;
sbit RST = P2^7;   //DS1302时钟
sbit RX  = P3^0;
sbit TX  = P3^1;
sbit IR  = P3^2;
sbit B20 = P2^4;
sbit FM =  P2^3;

sbit DU=P2^6;
sbit WE=P2^7;

/*为方便使用,部分管脚的多重定义*/

#define CLK SW0
#define DAT SW1




//系统初始化函数
void bstv51_init(void);/*BST-V51开发板主板初始化*/


#endif

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值