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