IO口控制-按键控制LED灯花式显示

IO口控制-按键控制LED灯花式显示

一、实验目的

		掌握P0-P3 各个I/O的工作原理和作用
		
		掌握I/O口的输入输出控制
		
		进一步熟练C51编程和软硬件联调

二、实验内容

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

三、电路图

在这里插入图片描述

四、总结

问题讨论

		P0-P3四个I/O端口的主要功能有什么区别?各个口在什么情况下需接上拉电阻?
		
		区别:
		
		P0口作输出口用时,需加上拉电阻。P0口有复用功能。当对外部存储器进行读写操作时,P0口先是提供外部存储器的低8位地址,供外部存储器地址锁存器锁存,然后充当数据线,用于写出或读入数据。P1口、P2口只是普通IO口。
		
		P0口第一个功能是数据接口,第二个功能是地址低八位,P2口第二个功能是地址高八位。另外除了P0口没有内部上拉电阻外,其他三个都有内部上拉电阻。
		
		P1、P2、P3都有内部上拉电阻,所以外部的上拉电阻可接可不接。
		
		P1、P2、P3输出一个高电平,或者提供一个驱动能力的时候,需接上拉电阻。
		
		而P0没有,所以。如果用P0口驱动必须接上拉电阻。
		
		P0口,输出高电平时,接口本身根本就没有输出能力,必须用外接上拉电阻来形成高电平。

问题和建议

		上拉电阻是一个很好的设计,优点是不需要添加外部上拉电阻。
		缺点是驱动电流受到内部上拉电阻的限制。
		上拉电阻越小则驱动能力就越大,所以当驱动能力不足的时候可以并联上拉电阻。

五、代码

代码:

\#include \<reg52.h\>

sbit LED0 = P0\^0;

sbit LED1 = P0\^1;

sbit LED2 = P0\^2;

sbit LED3 = P0\^3;

sbit LED4 = P0\^4;

sbit LED5 = P0\^5;

sbit LED6 = P0\^6;

sbit LED7 = P0\^7;

sbit key0 = P1\^0;

sbit key1 = P1\^1;

sbit key2 = P1\^2;

sbit key3 = P1\^3;

sbit key4 = P1\^4;

sbit key5 = P1\^5;

sbit key6 = P1\^6;

sbit key7 = P1\^7;

void delay(unsigned int z)

{

unsigned int x,y;

for(x=z;x\>0;x--)

for(y=110;y\>0;y--) ;

}

void main(){

P1=0xff;

P0=0x00;

LED0 = 0;

LED1 = 0;

LED2 = 0;

LED3 = 0;

LED4 = 0;

LED5 = 0;

LED6 = 0;

LED7 = 0;

while(1){

if(key0==0){

LED0 = 1;

LED1 = 1;

LED2 = 1;

LED3 = 1;

LED4 = 1;

LED5 = 1;

LED6 = 1;

LED7 = 1;

}

if(key1==0){

LED0 = 0;

LED1 = 0;

LED2 = 0;

LED3 = 0;

LED4 = 1;

LED5 = 1;

LED6 = 1;

LED7 = 1;

}

if(key2==0){

LED0 = 1;

LED1 = 1;

LED2 = 1;

LED3 = 1;

LED4 = 0;

LED5 = 0;

LED6 = 0;

LED7 = 0;

}

if(key3==0){

LED0 = 0;

LED1 = 1;

LED2 = 0;

LED3 = 1;

LED4 = 0;

LED5 = 1;

LED6 = 0;

LED7 = 1;

}

if(key4==0){

LED0 = 1;

LED1 = 0;

LED2 = 1;

LED3 = 0;

LED4 = 1;

LED5 = 0;

LED6 = 1;

LED7 = 0;

}

if(key5==0){

LED0 = 0;

LED1 = 0;

LED2 = 0;

LED3 = 0;

LED4 = 0;

LED5 = 0;

LED6 = 0;

LED7 = 0;

delay(500);

LED7 = 1;

delay(500);

LED6 = 1;

delay(500);

LED5 = 1;

delay(500);

LED4 = 1;

delay(500);

LED3 = 1;

delay(500);

LED2 = 1;

delay(500);

LED1 = 1;

delay(500);

LED0 = 1;

}

if(key6==0){

LED0 = 0;

LED1 = 0;

LED2 = 0;

LED3 = 0;

LED4 = 0;

LED5 = 0;

LED6 = 0;

LED7 = 0;

delay(500);

LED0 = 1;

delay(500);

LED1 = 1;

delay(500);

LED2 = 1;

delay(500);

LED3 = 1;

delay(500);

LED4 = 1;

delay(500);

LED5 = 1;

delay(500);

LED6 = 1;

delay(500);

LED7 = 1;

}

if(key7==0){

LED0 = 1;

LED1 = 0;

LED2 = 0;

LED3 = 0;

LED4 = 0;

LED5 = 0;

LED6 = 0;

LED7 = 1;

delay(500);

LED6 = 1;

LED1 = 1;

delay(500);

LED5 = 1;

LED2 = 1;

delay(500);

LED4 = 1;

LED3 = 1;

delay(500);

LED7 = 0;

LED0 = 0;

delay(500);

LED6 = 0;

LED1 = 0;

delay(500);

LED5 = 0;

LED2 = 0;

delay(500);

LED4 = 0;

LED3 = 0;

delay(500);

}

}

}


LED1 = 0;

LED2 = 0;

LED3 = 0;

LED4 = 0;

LED5 = 0;

LED6 = 0;

LED7 = 1;

delay(500);

LED6 = 1;

LED1 = 1;

delay(500);

LED5 = 1;

LED2 = 1;

delay(500);

LED4 = 1;

LED3 = 1;

delay(500);

LED7 = 0;

LED0 = 0;

delay(500);

LED6 = 0;

LED1 = 0;

delay(500);

LED5 = 0;

LED2 = 0;

delay(500);

LED4 = 0;

LED3 = 0;

delay(500);

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值