C51单片机使用P2口8个开关控制P1和P0,16个Led,更改P2口状态后,原来的16个Led的状态不改变。
问题是:实现用P2.0至P2.7端口连接的8个开关按键,控制P0口和P1口连接的16个发光二级管,实现不同花样的流水点亮效果。
Proteus图如下
#include <reg51.h>
#define uchar unsigned char
//Delay
void delay(){
uchar i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
char GetKey(){
char key;
key = ~P2;
return key;
}
//P2=1,P0 All On.
void P0_All_On(){
P0 = 0x00;
}
//P1 unidirectional led
void P1_Unidirectional_Led(){
}
//P2=0xfd,P1 All On.
void P1_All_On(){
while(1){
P1 = 0x00;
}
}
void LedDispose(char key){
P1 = 0xff;
P0 = 0xff;
if(key == 0x01)
P0_All_On();
if(key == 0x02)
P1_All_On();
}
void main(){
char key;
P2 = 0xff;
key = ~P2;
while(1)
{
key = GetKey();
// state = ~P2;
if(key != 0x00)
{
LedDispose(key);
}else{
P1 = 0xff;
P0 = 0xff;
}
}
}
仿真效果如下:
代码都没有,怎么分析呢
先搭建好51单片机的最小系统,包括晶振那些,可以去网上搜一下proteus上搭建51单片机最小系统的电路图,否则单片机是不能正常工作的