问答

汇集网友智慧,解决技术难题

萌新啊

TA的家园币:22  

  • 求助,51普中开发板

    求助IO口问题我发现P3.7口受P3.6和P3.5影响。当P3.6和P3.5口有任何一个口置1时,P3.7口完全正常,置1置0都输出正常;但是一旦P3.6和P3.5都为0时,P3.7口也必然为0。程序如下:#include"reg52.h"typedefunsignedintu16;//对系统默认数据类型进行重定义typedefunsignedcharu8;#defineKEY_MATRIX_PORTP1//使用宏定义矩阵按键控制口#defineSMG_A_DP_PORTP0//使用宏定义数码管段码口//共阴极数码管显示0~F的段码数据u8gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sbitLSA=P2^2;sbitLSB=P2^3;sbitLSC=P2^4;sbitL1=P2^1;sbitL2=P2^5;sbitL3=P2^6;sbitL4=P2^7;sbitL5=P2^0;sbitL6=P3^3;sbitL7=P3^2;sbitL8=P3^1;sbitL9=P3^7;sbitL10=P3^6;sbitL11=P3^5;sbitL12=P3^4;/********************************************************************************函数名:delay_10us*函数功能:延时函数,ten_us=1时,大约延时10us*输入:ten_us*输出:无*******************************************************************************/voiddelay_10us(u16ten_us){while(ten_us--);}/********************************************************************************函数名:key_matrix_ranks_scan*函数功能:使用行列式扫描方法,检测矩阵按键是否按下,按下则返回对应键值*输入:无*输出:key_value:1-16,对应S1-S16键,0:按键未按下*******************************************************************************/u8key_matrix_ranks_scan(void){u8key_value=0;KEY_MATRIX_PORT=0xf7;//给第一列赋值0,其余全为1if(KEY_MATRIX_PORT!=0xf7)//判断第一列按键是否按下{delay_10us(1000);//消抖switch(KEY_MATRIX_PORT)//保存第一列按键按下后的键值{case0x77:key_value=1;break;case0xb7:key_value=5;break;case0xd7:key_value=9;break;case0xe7:key_value=13;break;}}while(

  • 求助,51普中开发板

    求助各位大佬,为什么部分单片机的IO口会无法使用,出问题的IO口是P3.7和P3.4。这两个口无法进行正确输出,其他的端口均正常。程序如下:#include"reg52.h"typedefunsignedintu16;//对系统默认数据类型进行重定义typedefunsignedcharu8;#defineKEY_MATRIX_PORTP1//使用宏定义矩阵按键控制口#defineSMG_A_DP_PORTP0//使用宏定义数码管段码口//共阴极数码管显示0~F的段码数据u8gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sbitLSA=P2^2;sbitLSB=P2^3;sbitLSC=P2^4;sbitL1=P2^1;sbitL2=P2^5;sbitL3=P2^6;sbitL4=P2^7;sbitL5=P2^0;sbitL6=P3^3;sbitL7=P3^2;sbitL8=P3^1;sbitL9=P3^7;sbitL10=P3^6;sbitL11=P3^5;sbitL12=P3^4;/********************************************************************************函数名:delay_10us*函数功能:延时函数,ten_us=1时,大约延时10us*输入:ten_us*输出:无*******************************************************************************/voiddelay_10us(u16ten_us){while(ten_us--);}/********************************************************************************函数名:key_matrix_ranks_scan*函数功能:使用行列式扫描方法,检测矩阵按键是否按下,按下则返回对应键值*输入:无*输出:key_value:1-16,对应S1-S16键,0:按键未按下*******************************************************************************/u8key_matrix_ranks_scan(void){u8key_value=0;KEY_MATRIX_PORT=0xf7;//给第一列赋值0,其余全为1if(KEY_MATRIX_PORT!=0xf7)//判断第一列按键是否按下{delay_10us(1000);//消抖switch(KEY_MATRIX_PORT)//保存第一列按键按下后的键值{case0x77:key_value=1;break;case0xb7:key_value=5;break;case0xd7:key_value=9;break;case0xe7:key_value=13;break;}}while(KEY_MATRIX_PORT!=0xf7);//等待按键松