求学. 2022-08-13 16:14 采纳率: 50%
浏览 43
已结题

代码烧录后独立按钮不起作用

51单片机 独立按键
代码烧录到开发板不起作用怎么回事?

#include <regx52.h>
                    void Delay (unsigned int xms){
           unsigned char k , j;
           while(xms){
           k = 2;
           j = 236;
           do{
           while(--k);}
           while(--j);
           
               xms--;
           }
           }
                sbit k1 = P3^1; 
                   sbit k2 = P3^0;
                   sbit k3 = P3^2;
                   sbit k4 = P3^3;

 unsigned char Key(){
                   unsigned char KeyNumber = 0;
                   if(k1 == 0){Delay(10);if(k1==0){KeyNumber == 1;}while(!k1);}
                   if(k2 == 0){Delay(10);if(k2==0){KeyNumber == 2;}while(!k2);}
                   if(k3 == 0){Delay(10);if(k3==0){KeyNumber == 3;}while(!k3);}
                   if(k4 == 0){Delay(10);if(k4==0){KeyNumber == 4;}while(!k4);}
                    return KeyNumber;
                   }
            unsigned char KeyNum;
            
            int main(void){
                 
                 while (1){
                  KeyNum =  Key();
                  if(KeyNum == 1){P2 = 0xfe;}
                                        
                 }
                 }

img

img

  • 写回答

2条回答 默认 最新

  • 吕傑森 2022-08-13 19:28
    关注

    常用惯例, P3.0, P3.1 会是 UART TX/RD.
    怀疑你硬件干扰, 或是51零件本身初始化干扰。
    main程序改成

    int main( void )
      {
        P3 = 0xFF;   /*  初始 P3, 避免预设错误 */
        P2 = 0x00;   /*  全亮, 表示LED 驱动OK.  也确认51有动作 */   
        while (1)
         {
            KeyNum  =  Key( );
            if( 0 != KeyNum )
              {
                   P2 = KeyNum;  /* 看灯号对按键  */                               
              }
          }
    }
    

    2022/08/14
    这几个指令没指值 KeyNumber = 1; <- 是 = , 不是 ==
    if(k1 == 0){Delay(10);if(k1==0){**KeyNumber == 1; **}while(!k1);}
    if(k2 == 0){Delay(10);if(k2==0){KeyNumber == 2;}while(!k2);}
    if(k3 == 0){Delay(10);if(k3==0){KeyNumber == 3;}while(!k3);}

    指值用 =
    P3 = 0xFF;
    逻辑比较符 == , 返回 1 or 0 ( TRUE, FALSE )
    ( 0 == k1 ) 使用时, 要注意 “强制型别转换” 所带来的隐性错误

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月22日
  • 已采纳回答 8月14日
  • 修改了问题 8月13日
  • 创建了问题 8月13日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值