GPIO的8中工作模式
4种输入模式:上拉输入模式,下拉输入模式,浮空输入模式和模拟输入模式。
在上拉输入模式,默认状态下,GPIO引脚的数据为1,高电平;下拉模式则相反,默认状态下,GPIO的引脚的数据为0,低电平。
浮空输入模式,芯片内部既没有上拉,有没有下拉。由于其输入阻抗较大,一般把这种模式用于标准的通信协议I2C,USART的接收端。
模拟输入模式适用于ADC情况。
4种输出模式:普通推挽输出,普通开漏输出,复用推挽输出,复用开漏输出。普通推挽输出一般应用在输出电平0V和33V的场合。而普通开漏输出一般应用在电平不匹配的场合,如需要输出5V的场合,就需要在外部接一个上拉电阻。对于相应的复用模式,就根据GPIO相应的复用功能来选择,如GPIO的引脚用作串口的输出,则使用复用推挽输出模式。
在开漏模式时,一定要接上拉电阻。
假设你的是共阳极数码管,P0接数码。按键接P2^0;
#include<reg52h>
typedef unsinged int uint;
sbit key=P2^0;
unsigned char tab[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void denay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--)
}
void main()
{
uchar a;
while(1)
{
P0=tab[a];
if (key1==0)
{delay(10);
if(key==0)
{
while(!key1);
a++;
if(a==10) a=0;
}
}
}
#include<reg52h>
#define uint unsigned int
sbit S1=P1^0;
sbit S2=P1^1;
sbit S3=P1^2;
sbit S4=P1^3;
sbit LED1=P1^4;
void delay(uint);
main()
{
S1 = 1;
S2 = 1;
S3 = 1;
S4 = 1;
while(1)
{
if(S1==0)
{
P2 = 0X00;
LED1 = 0;
delay(500);
P2 = ~P2;
LED1 = ~LED1;
delay(500);
};
if(S2==0)
{
P2 = 0Xc0;
delay(500);
P2 = 0xff;
LED1 = 1;
delay(500);
};
if(S3==0)
{
P2 = 0X07;
LED1 = 0;
delay(500);
P2 = 0XFF;
LED1 = 1;
delay(500);
};
if(S4==0)
{
P2 = 0X38;
LED1 = 0;
delay(500);
P2 = 0xff;
LED1 =1;
delay(500);
};
};
}
void delay(uint z)
{
uint x, y;
for(x=85; x>0; x--)
for(y=z; y>0; y--);
}
具体还要看你单片机和LED引脚的连线,原理大概就是上面那样了,可以下载到机子验证。
设定:8255PA、PC口为输入、PB作输出(均为方式0)
MOV DPTR, #0FF2BH ;假设命令口地址FF2BH
MOV A, #10011001B ;命令字
MOVX @DPTR, A
……
忘了问了,你的8255的地址,是不是FF2BH?
1、定义变量,保存当前数值,通过按键扫描函数检测按键状态,判断按下的是加号还是减号。
2、根据按键状态,更新当前数值,调用数码管显示函数,将当前数值显示在数码管上。
3、循环执行以上步骤,实现按键控制数码管加减的功能。
以上就是关于按键控制led灯亮或熄灭的程序设计中采用查询方式检测按键的状态与用中断方式检测按键的状态有何不同全部的内容,包括:按键控制led灯亮或熄灭的程序设计中采用查询方式检测按键的状态与用中断方式检测按键的状态有何不同、51单片机c语言设计,按键控制数码管,依次按下显示0到9循环、基于51单片机的led彩灯设计。 9个灯(红绿蓝三色)。按键控制 c语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)