|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
是这样的,我在学习单片机C语言的时候,手上的这块板子因为引脚不够用,按键和显示数字的数码管引脚复用了。ADC旋钮采集也和数码管的公共端引脚复用了。
这个板子的主要功能就是一个旋钮,2个显示数字的数码管(就是显示数字00~99)。按键控制开关机。旋钮分成60档,显示在数码管上。
随着我学习尝试写代码的中途,出现了个问题,这个板上面,有个数码管怎么都不灭,就是和按键复用的那个。我尝试半天最后发现要把ADC采集的IO口初始化和按键采集的IO初始化分开才行。
我想问这是为什么?
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;
}
|
|