837510587 发表于 2021-11-24 18:24:10

C语言—单片机引脚复用的问题,小白求助

是这样的,我在学习单片机C语言的时候,手上的这块板子因为引脚不够用,按键和显示数字的数码管引脚复用了。ADC旋钮采集也和数码管的公共端引脚复用了。

这个板子的主要功能就是一个旋钮,2个显示数字的数码管(就是显示数字00~99)。按键控制开关机。旋钮分成60档,显示在数码管上。

随着我学习尝试写代码的中途,出现了个问题,这个板上面,有个数码管怎么都不灭,就是和按键复用的那个。我尝试半天最后发现要把ADC采集的IO口初始化和按键采集的IO初始化分开才行。
我想问这是为什么?


static/image/hrline/line4.png
void discom(uchar dis1,uchar dis2,uchar dis3,uchar dis4)//êyÂë1ü11«12¶ËÑ¡í¨
{
        if(display_timer > 5)//
        {
                display_timer = 0;
        }       
        switch(display_timer)
        {
                case 0:{IO_InitOUT();
                                                COML1=1;COML2=1;COML3=1;COML4=1;display(dis4);COML2=0;}break;                                                       
                case 1:{COML1=1;COML2=1;COML3=1;COML4=1;display(dis3);COML1=0;}break;                                                       
                case 2:{COML1=1;COML2=1;COML3=1;COML4=1;display(dis2);COML4=0;}break;                                                       
                case 3:{COML1=1;COML2=1;COML3=1;COML4=1;display(dis1);COML3=0;}break;                                                       
                case 4:{COML1=1;COML2=1;COML3=1;COML4=1;display(10);//       
                                                IO_InitIN_SW();                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                key();                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                }break;                                                                                                                                                                                                                                                                                                               
                case 5:{       
                                                COML1=0;COML2=0;COML3=1;COML4=1;display(10);       
                                                IO_InitIN_AIN();
                                                Lset_num = LS_ADC_switch_return();                                                                                                                                                                                                                                       
                                                Rset_num = RS_ADC_switch_return();
                                                Lnum = L_ADC_temp_return();
                                                Rnum = R_ADC_temp_return();
                                                ADCCON = 0x00;                                                                                                                                                                                                                                               
                                                ADCCFG0 = 0x03;                       
                }break;       
                default:{}                                                                                                                                                                                                                                                                                               
                break;                                                                                                                                                                                                                                                                                                               
        }
}
void IO_InitOUT(void)//ADC1£¬ADC2Îaêäè룬ÆäóàÎaêä3ö
{
        P0CON = 0xFF;   //强推挽输出
        P0PH= 0x00;
        P1CON = 0xFF;//强推挽输出
        P1PH= 0x00;
        P2CON = 0xFF;
        P2PH= 0x00;
}
/*****************************************************
*****************************************************/
void IO_InitIN_SW(void)//
{
P2CON = 0xBC;        //P2.6(sw3)高阻输入带上拉
        P2PH= 0x40;       
        P1CON = 0xFF;// //强推挽输出
        P1PH= 0x00;
        P0CON = 0xEE;// // P0.4(sw1),P0.0(sw2)高阻输入带上拉
        P0PH= 0x11;       
}
void IO_InitIN_AIN(void)//
{
      P2CON = 0xCC;        // P2.5(AIN5),P2.4(AIN4)普通输入
        P2PH= 0x00;       
        P1CON = 0xFF;
        P1PH= 0x00;
        P0CON = 0xFF;
        P0PH= 0x00;       
}

傻眼貓咪 发表于 2021-11-24 19:46:22

ARDUINO? STM32F103?

837510587 发表于 2021-11-26 08:38:30

傻眼貓咪 发表于 2021-11-24 19:46
ARDUINO? STM32F103?

都不是,是国产的一个51单片机,赛元的92F7422。
页: [1]
查看完整版本: C语言—单片机引脚复用的问题,小白求助