找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2148|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

想看看自己的單片機(jī)程序哪里錯(cuò)了,求大神指教

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1061638 發(fā)表于 2023-1-27 19:12 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
程序
#include    "reg51.h"

sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^3;
typedef unsigned char u16;
typedef  unsigned int  u8;
sbit LED1=P2^0;

#define KEY1_PRESS  1;
#define KEY2_PRESS  2;
#define KEY3_PRESS  3;
#define KEY1_UNPRESS  0;
void delay_10us(u8 ten_us)
{
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:883242 發(fā)表于 2023-1-27 21:33 | 只看該作者
#define 那一行不可以加;
回復(fù)

使用道具 舉報(bào)

板凳
ID:155507 發(fā)表于 2023-1-27 22:13 | 只看該作者
語焉不詳、去頭掐尾也是愛莫能助的了。。。

代碼只有片段,這樣沒法完整去找問題

尋求解決問題的正確方式:
問題背景描述
問題現(xiàn)象
為解決問題做了哪些嘗試?有啥效果?
回復(fù)

使用道具 舉報(bào)

地板
ID:1061638 發(fā)表于 2023-1-28 12:27 | 只看該作者
angmall 發(fā)表于 2023-1-27 22:13
語焉不詳、去頭掐尾也是愛莫能助的了。。。

代碼只有片段,這樣沒法完整去找問題

#include    "reg51.h"

sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
typedef unsigned char u16;
typedef  unsigned int  u8;
sbit LED1=P2^0;

#define KEY1_PRESS  1;
#define KEY2_PRESS  2;
#define KEY3_PRESS  3;
#define KEY_UNPRESS  0;
void delay_10us(u8 ten_us)
{
        while(ten_us--);
       
}
u16 key_scan(u16  mode)
{
     static  u16 key=1;
           if(mode)key=1;
       
        if(key=1&&(KEY1==0||KEY2==0||KEY3==0))
  {
                delay_10us(1000);
        key=0;
  if(KEY1==0)
                return  KEY1_PRESS;
   else if(KEY2==0)
                 return KEY2_PRESS;
         else if(KEY3==0)
         return  KEY3_PRESS;
         
}
else if(KEY1==1&&KEY2==1&&KEY3==1)
{
         key=1;
       
}
return KEY_UNPRESS;

               
        }



void main()
{
        u16 key=0;
       
        while(1)
        {
               
         key=key_scan(0);
               
                if (key==KEY1_PRESS)
                LED1=!LED1;
                       
                       
                }
        }
回復(fù)

使用道具 舉報(bào)

5#
ID:1061638 發(fā)表于 2023-1-28 12:31 | 只看該作者
angmall 發(fā)表于 2023-1-27 22:13
語焉不詳、去頭掐尾也是愛莫能助的了。。。

代碼只有片段,這樣沒法完整去找問題

哥我又發(fā)了一個(gè)完整的請(qǐng)您幫看一下唄,拜托了
回復(fù)

使用道具 舉報(bào)

6#
ID:155507 發(fā)表于 2023-1-28 13:39 | 只看該作者
我能騙你嗎 發(fā)表于 2023-1-28 12:31
哥我又發(fā)了一個(gè)完整的請(qǐng)您幫看一下唄,拜托了

給你改了,對(duì)比一下就知道哪里錯(cuò)了。




  1. #include "reg51.h"

  2. sbit KEY1=P3^1;
  3. sbit KEY2=P3^0;
  4. sbit KEY3=P3^2;
  5. typedef unsigned char u16;
  6. typedef  unsigned int  u8;
  7. sbit LED1=P2^0;

  8. #define KEY1_PRESS   1  //; <----#define 那一行不可以加;
  9. #define KEY2_PRESS   2  //; <----#define 那一行不可以加;
  10. #define KEY3_PRESS   3  //; <----#define 那一行不可以加;
  11. #define KEY_UNPRESS  0  //; <----#define 那一行不可以加;
  12. void delay_10us(u8 ten_us)
  13. {
  14.     while(ten_us--);
  15.       
  16. }
  17. u16 key_scan(u16  mode)
  18. {
  19.     static  u16 key=1;
  20.     if(mode)key=1;
  21.       
  22.     if(key=1&&(KEY1==0||KEY2==0||KEY3==0))
  23.     {
  24.         delay_10us(1000);
  25.         key=0;
  26.           if(KEY1==0)
  27.                 return  KEY1_PRESS;
  28.           else if(KEY2==0)
  29.                  return KEY2_PRESS;
  30.       else if(KEY3==0)
  31.          return  KEY3_PRESS;
  32.          
  33.         }
  34.         else if(KEY1==1&&KEY2==1&&KEY3==1)
  35.         {
  36.                          key=1;
  37.       
  38.         }
  39.         return KEY_UNPRESS;

  40.                
  41. }



  42. void main()
  43. {
  44.     u16 key=0;
  45.    
  46.     while(1)
  47.     {
  48.            
  49.        key=key_scan(0);
  50.            
  51.         if (key==KEY1_PRESS)
  52.         LED1=!LED1;
  53.                
  54.                
  55.     }
  56. }
  57.                
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

7#
ID:213173 發(fā)表于 2023-1-28 14:56 | 只看該作者
我能騙你嗎 發(fā)表于 2023-1-28 12:27
#include    "reg51.h"

sbit KEY1=P3^1;

要看你想達(dá)到什么目的
回復(fù)

使用道具 舉報(bào)

8#
ID:723161 發(fā)表于 2023-1-28 15:54 | 只看該作者
u16是int一般 u8是char
回復(fù)

使用道具 舉報(bào)

9#
ID:723161 發(fā)表于 2023-1-28 16:05 | 只看該作者
第20行那里     if(key=1&&(KEY1==0||KEY2==0||KEY3==0))

是不是應(yīng)該是key==1
回復(fù)

使用道具 舉報(bào)

10#
ID:1061638 發(fā)表于 2023-1-28 17:18 | 只看該作者
angmall 發(fā)表于 2023-1-28 13:39
給你改了,對(duì)比一下就知道哪里錯(cuò)了。

謝謝哥,這個(gè)主函數(shù)我沒太理解,能不能幫忙講一下
回復(fù)

使用道具 舉報(bào)

11#
ID:1061638 發(fā)表于 2023-1-28 17:22 | 只看該作者

為啥那兄弟
回復(fù)

使用道具 舉報(bào)

12#
ID:723161 發(fā)表于 2023-1-29 09:38 | 只看該作者
這個(gè)不影響 主要是20行那里if(key=1&&(KEY1==0||KEY2==0||KEY3==0))      key==1  不是key=1   一個(gè)等于號(hào)是賦值 不是判斷
回復(fù)

使用道具 舉報(bào)

13#
ID:596109 發(fā)表于 2023-1-29 10:46 | 只看該作者
if(key=1&&(KEY1==0||KEY2==0||KEY3==0))  &&前面應(yīng)該是key==1
    {
        delay_10us(1000);
        key=0;
          if(KEY1==0)
                return  KEY1_PRESS;  
回復(fù)

使用道具 舉報(bào)

14#
ID:596109 發(fā)表于 2023-1-29 11:14 | 只看該作者
key_scan函數(shù)里的delay_10us(1000);應(yīng)該換到main函數(shù)的循環(huán)里,否則按下按鍵1后,因?yàn)閗ey值一直為KEY1_PRESS,所以函數(shù)會(huì)一直執(zhí)行if (key==KEY1_PRESS)    LED1=!LED1;
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表