求学. 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日

悬赏问题

  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算