Microcontroller 如何使用PIC18F4550的端口作为输入和输出?

Microcontroller 如何使用PIC18F4550的端口作为输入和输出?,microcontroller,pic,Microcontroller,Pic,所以我需要做的是一个使用PIC18F4550、74LS244和HCT573的三态逻辑应用程序。这里的问题是,我需要使用PIC的一个端口作为输入和输出。我需要使用端口的7个引脚,因为我需要连接一个7段显示器,其中4个引脚必须同时作为输入。这些输入连接到74LS244,并从那里连接到四个按钮,因此,当我以二进制形式引入0到15的数字时,显示屏上必须显示10到15的数字或字母。显示器连接至HCT573,并从HCT573连接至PIC。这里的主要问题是,我真的不知道如何将端口同时用作输入和输出。 我用来编

所以我需要做的是一个使用PIC18F4550、74LS244和HCT573的三态逻辑应用程序。这里的问题是,我需要使用PIC的一个端口作为输入和输出。我需要使用端口的7个引脚,因为我需要连接一个7段显示器,其中4个引脚必须同时作为输入。这些输入连接到74LS244,并从那里连接到四个按钮,因此,当我以二进制形式引入0到15的数字时,显示屏上必须显示10到15的数字或字母。显示器连接至HCT573,并从HCT573连接至PIC。这里的主要问题是,我真的不知道如何将端口同时用作输入和输出。
我用来编写代码的软件是CCS编译器(PICC编译器)。

您可以运行无限while循环。在循环过程中,您可以使用两种方法,一种用于轮询,另一种用于显示。一些伪代码可能如下所示

int pollState()
{
    //return the output as an int
    
    int output = 0;
    //set 4 pins state to input - 0b00001111
    TRISC = 0x0f;
    
    //do some checking on the pins 
    if(PORTCbits.RC0 = 1)
    {
        output |= 1 <<0;
    }
    
    if(PORTCbits.RC1 = 1)
    {
        output |= 1<<1;
    }
    
    if(PORTCbits.RC2 = 1)
    {
        output |= 1 <<2;
    }
    
    if(PORTCbits.RC3 = 1)
    {
        output |= 1 <<3;
    }
    
    
    
    return output;
    
    
}



int setState(int number)
{
    //set the portC as output
    
    TRISC = 0;
    
    //the binary was tranfered in the poll state
    //shift out the data here
    
    shiftOut(number);
    
    
    return 0;
    
}

int main(int argc, char **argv)
{
    int state=0;
    
    while(1)
    {
        
        state=pollState();
        setState(state);
    }
    
    
    return 0;
}
int pollState()
{
//以int形式返回输出
int输出=0;
//将4针状态设置为输入-0b00001111
TRISC=0x0f;
//检查一下别针
if(PORTCbits.RC0=1)
{

输出|=1我会改变引脚模式本身,以防止PIC18F4550出现一些不良行为。 因此,如果您想读取一些管脚:更改这些位上的TRISx寄存器,您希望将输入设置为1。 如果要从某些管脚写入:将这些位上的TRISx寄存器更改回0

TRISx寄存器用于选择引脚模式(输入=1/输出=0)

如果你不改变这个寄存器,它可能会得到错误的结果,或者可能会破坏你的图片

嗯,我想告诉你的是:你不能/不应该同时读写数据。你必须总是用TRISx寄存器切换Pin模式。要写数据:使用LATx寄存器;要读数据:使用PORTx寄存器;要更改Pin模式:使用TRISx寄存器