51单片机控制LED灯显示模式

1.在交通灯控制系统的基础上修改硬件电路
2.AT89C51单片机的P1口接8个独立按键,P0口接8个LED灯,led等的上拉电阻改用排阻,设计硬件电路。
3.编写程序,实现基本要求:当P1.0键按下后P0.0灯亮, P1.1键按下后P0.0~P1.1灯亮, P1.2键按下后P0.0~P1.2灯亮,以此类推, P1.7键按下后P0.0~P1.7灯亮
4.进一步发挥,按如下规则显示,或自己制定显示规则。(另一程序)
当key0 按下时,LED等全亮
当key1 按下时,后四个LED灯亮
当key2 按下时,前四个LED灯亮
当key3 按下时,奇数灯亮
当key4 按下时,偶数灯亮
当key5 按下时,从右到左依次显示
当key6 按下时,从左到有依次显示
当key7 按下时,显示如下花样显示效果。

1、基本图
在这里插入图片描述

2、key0触发
在这里插入图片描述

3、key1触发
在这里插入图片描述

4、key2触发
在这里插入图片描述

5、key3触发
在这里插入图片描述

6、key4触发
在这里插入图片描述

#include<reg52.h>
unsigned int i;
unsigned char cnt = 0;
void delay(unsigned int z){
	unsigned int x,y;
	for(x=0;x<z;x++)
		for(y=0;y<200;y++);
}

void main(){
	
	unsigned char i,j,k,sum,sumTosum;
	   //if(P1 == 0x01)
	P0 = 0x00;
	while(1){
		if(P1==0xFE){			 
			P0 = 0xff;
			delay(500);
		}
		else if(P1==0xFD){
			P0 = 0xf0; //of
			delay(500);													   
		}
		else if(P1==0xFB){
			P0 = 0x0f;
			delay(500);
		}
		else if(P1==0xF7){
			P0 = 0x55;	 //10101010
			delay(500);			
		}			
		else if(P1==0xEF){
			P0 = 0xAA;
			delay(500);		
		}
		else if(P1==0xDF){
			delay(200);
			j = 128;
			P0 = j;
			delay(200);
			for(i = 0;i < 8;i++){
				P0 = j/=2;
				delay(200);
			}	  	
		}
		else if(P1==0xBF){
			delay(200);
			j=1;
			P0=j;
			delay(200);
			for(i=0;i<8;i++){
				P0 = j*=2;
				delay(200);	
			}
		}
		else if(P1==0x7F){
			delay(200);
			j = 128;
			k = 1;
			sum = j + k;
			P0 = sum;
			delay(200);
			for(i = 0;i < 3;i++){
				j/=2;
				k*=2;
				sum += (j + k);
				//sumTosum += sum;
				P0 = sum;
				delay(200);
			}
			j = 128;
			k = 1;
			sum -= j + k;
			P0 = sum;
			delay(200);
			for(i = 0;i < 3;i++){		
				j /= 2;
				k*=2;
				sum -= (j + k);
				//sumTosum += sum;
				P0 = sum;
				delay(200);
			}		
		}	
	}
}

P0-P3四个I/O端口的主要功能有什么区别?各个口在什么情况下需接上拉电阻?
答:
P1、P2、P3都有上拉电阻,而P0没有,所以。如果用P0口驱动必须接上拉电阻。
P0、P1、P2口只能是I/O口,P3口还有第二功能。
P0的功能是地址、数据总线
P1的功能是只能输入、输出端口,P1输入时要置1
P2的功能是普通的输入、输出端口,有片外存储器时可以当作地址总线使用
P3的功能是只能输入、输出端口,P3输入、输出时要置1

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值