找回密码
 立即注册
楼主: 电子DIY小家

《8051U深度入门到32位51大型实战视频》,【免费 + 包邮 送】实验箱@Ai8051U,100万套

   火... [复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-10-16 00:05:03

6

主题

306

回帖

1478

积分

金牌会员

积分
1478
发表于 2025-9-30 22:04:10 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-10-15 09:34:20
已绑定手机

1

主题

29

回帖

29

积分

新手上路

积分
29
发表于 2025-10-1 16:47:09 | 显示全部楼层
学习了 今天开始下载规格书学习
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:301
  • 最近打卡:2025-10-15 15:29:16

7

主题

289

回帖

343

积分

中级会员

积分
343
发表于 2025-10-2 15:13:25 | 显示全部楼层
单片*** 发表于 2024-12-3 11:17
兑换了个芯片,回来搭最小系统板跟着学习吧

我也是,咱们共同加油吧!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:301
  • 最近打卡:2025-10-15 13:44:23
已绑定手机

4

主题

93

回帖

1611

积分

金牌会员

积分
1611
发表于 2025-10-2 17:13:08 | 显示全部楼层
我搭建了个普通的TTL下载电路,直接连接这颗U的P3.0和P3.1,希望能成功!
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-10-15 10:45:17
已绑定手机

1

主题

1

回帖

39

积分

新手上路

积分
39
发表于 2025-10-2 23:33:42 | 显示全部楼层
请问现在还可以有送吗?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2025-10-16 09:14:19
已绑定手机

0

主题

14

回帖

138

积分

注册会员

积分
138
发表于 2025-10-3 16:37:29 | 显示全部楼层
typedef enum {
    IDLE,
    DETECT,
    RELEASE_DEBOUNCE       
} KEY_MAT_STATE;

typedef struct {
    KEY_MAT_STATE         state;
    u8                                 key_num;
    u16                         debounce;
    u8                                pressed_cnt; //按下次数计数
} KEY_MAT_STRUCT;

KEY_MAT_STRUCT key_mat={IDLE,11,0,0};

void Key_Matrix_Scan()
{
        static u8 temp=11;
        ROW1=1;
        ROW2=1;
        COL1=0;
        COL2=0;
        COL3=0;
        COL4=0;
        switch (key_mat.state) {
            case IDLE:
                if (ROW1==0&&ROW2==1)
                {
                        key_mat.debounce=0;
                        key_mat.state=DETECT;
                }else if (ROW1==1&&ROW2==0)
                {
                        key_mat.debounce=0;
                        key_mat.state=DETECT;
                }
                break;
            case DETECT:
                if (++key_mat.debounce>=DEBOUNCE_TIME_10MS)
                {
                        if (ROW1==0&&ROW2==1)
                            {
                                    temp=1;
                                key_mat.debounce=0;
                            }else if (ROW1==1&&ROW2==0)
                            {
                                temp=5;
                                key_mat.debounce=0;
                            }
                                    printf("temp1=%d\n",temp );
                            ROW1=0;
                                ROW2=0;
                                COL1=1;
                                COL2=1;
                                COL3=1;
                                COL4=1;
                                        printf("temp2=%d\n",temp );
                                if (!COL1)
                                {
                                       
                                        printf("temp3=%d\n",temp );
                                        key_mat.state=RELEASE_DEBOUNCE;
                                        key_mat.debounce=0;
                                        break;
                                }else if (!COL2)
                                {
                                        temp +=1;
                                        printf("temp4=%d\n",temp );
                                        key_mat.state=RELEASE_DEBOUNCE;
                                        key_mat.debounce=0;
                                        break;
                                }else if (!COL3)
                                {
                                        temp +=2;
                                        key_mat.state=RELEASE_DEBOUNCE;
                                        key_mat.debounce=0;
                                        break;
                                }else if (!COL4)
                                {
                                        temp +=3;
                                        key_mat.state=RELEASE_DEBOUNCE;
                                        key_mat.debounce=0;
                                        break;
                                }
                }
                break;
        case RELEASE_DEBOUNCE:
                        printf("temp11=%d\n",temp );
                if (!COL1 && !COL2 && !COL3 && !COL4)
                {                               
                        if (++key_mat.debounce>=DEBOUNCE_TIME_10MS)
                                {
                                        if (temp< 10)
                                        {
                                                key_mat.key_num=temp;
                                                        key_mat.state=IDLE;                                                       
                                        }                                       
                                }
                }
               
                       break;
            default:
                // default code
                break;
        }
}冲哥能帮我分析一个,为什么按下松手后,没有正常进入RELEASE_DEBOUNCE状态,在DETECT状态不断的循环
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:259
  • 最近打卡:2025-10-15 06:43:13
已绑定手机

145

主题

491

回帖

704

积分

高级会员

积分
704
发表于 2025-10-4 06:39:32 | 显示全部楼层
擎天柱mpu6500的例程?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2025-10-16 09:14:19
已绑定手机

0

主题

14

回帖

138

积分

注册会员

积分
138
发表于 2025-10-5 14:54:58 | 显示全部楼层
#include "keymatrix.h"


const u8 correct_password[]={1,2,3,4,5,6};
u8 time=0;

typedef enum {
    IDLE,
    ROW_DETECT,
    COL_DETECT,
    RELEASE_DEBOUNCE       
} KEY_MAT_STATE;

typedef enum {
    P_IDLE,
    INPUTTING,
    VERIFYING,
    SUCCESS,
    FAILURE,
    FUN_LIST,
    FUN_RUN
} PASSWORD_STATE;

typedef struct {
    KEY_MAT_STATE         state;
    u8                                 key_current_value;
    u16                         debounce;
    u8                                key_value;
} KEY_MAT_STRUCT;

typedef struct {
    PASSWORD_STATE  password_state;         //状态
    u8                                password_current[6];     //密码缓冲
    u8                                password_length;        //密码长度
    u16                                password_lock_time;     //锁定时间
    u8                                password_failed_cnt;    //失败次数
    u8                                 password_input_length;  //当前输入长度
    const u8                *password_correct;      //正确密码
} PASSWORD_STRUCT;

PASSWORD_STRUCT password = {
        P_IDLE,{16,16,16,16,16,16},6,3000,0,0,correct_password
};


KEY_MAT_STRUCT key_mat={IDLE,255,0,255};

void Key_Matrix_Scan(void)
{
        switch (key_mat.state) {
                    case IDLE:
                        ROW1 = 1;
                        ROW2 = 1;
                        COL1 = 0;
                        COL2 = 0;
                        COL3 = 0;
                        COL4 = 0;
                        if ((!ROW1 && ROW2) || (ROW1 && !ROW2))
                        {
                                key_mat.state =ROW_DETECT;
                                key_mat.debounce = 0;
                        }
                        break;
                    case ROW_DETECT:
                        if (++key_mat.debounce == DEBOUNCE_TIME_10MS)
                        {
                                if ((!ROW1 && ROW2) || (ROW1 && !ROW2))
                                        {
                                                if (!ROW1) {key_mat.key_current_value = 1;}
                                                else if (!ROW2) {key_mat.key_current_value = 5;}
                                                ROW1 = 0;
                                                ROW2 = 0;
                                                COL1 = 1;
                                                COL2 = 1;
                                                COL3 = 1;
                                                COL4 = 1;
                                                key_mat.state = COL_DETECT;
                                                key_mat.debounce = 0;
                                        }else
                                                key_mat.state = IDLE;
                        }
                        break;
                    case COL_DETECT:
                        if (++key_mat.debounce == DEBOUNCE_TIME_10MS)
                        {
                                if (COL1 == 0) {key_mat.key_current_value += 0;}
                                else if (COL2 == 0) {key_mat.key_current_value += 1;}
                                else if (COL3 == 0) {key_mat.key_current_value += 2;}
                                else if (COL4 == 0) {key_mat.key_current_value += 3;}
                               
                                key_mat.state = RELEASE_DEBOUNCE;
                        }
                        break;
                    case RELEASE_DEBOUNCE:
                        if (COL1 && COL2 && COL3 && COL4)
                        {
                                key_mat.key_value = key_mat.key_current_value;
                                key_mat.key_current_value = 255;
                                key_mat.state = IDLE;
                        }
                        break;
                    default:
                        key_mat.state = IDLE;
                        break;
                }               
}


void Password_Detct()
{
        static u8 i;
        switch (password.password_state) {
            case P_IDLE:
                if (key_mat.key_value != 255)
                {
                                password.password_state=INPUTTING;
                }
                break;
            case INPUTTING:
                if (key_mat.key_value != 255)
                {
                                printf("%d\n",key_mat.key_value );
                        password.password_current[password.password_input_length] = key_mat.key_value;
                        key_mat.key_value=255;
                        SEG_Display_Buffer[password.password_input_length] = 16;
                        password.password_input_length++;
                        if (password.password_input_length > (password.password_length-1))
                        {
                                password.password_input_length=0;
                                password.password_state=VERIFYING;
                        }
                }
                break;          
        case VERIFYING:
                
                for (i = 0; i < password.password_length; i++) {
                    if (password.password_current[i] == password.password_correct[i])
                    {
                            password.password_state = SUCCESS;
                    }else
                            password.password_state = FAILURE;
                }
                break;            
            case SUCCESS:
                    SEG_Display_Buffer[0]=17;
                SEG_Display_Buffer[1]=17;
                SEG_Display_Buffer[2]=17;
                SEG_Display_Buffer[3]=17;
                SEG_Display_Buffer[4]=17;
                SEG_Display_Buffer[5]=17;
                SEG_Display_Buffer[6]=17;
                SEG_Display_Buffer[7]=10;
                password.password_state=FUN_LIST;
                break;
                  case FAILURE:
                SEG_Display_Buffer[0]=17;
                SEG_Display_Buffer[1]=17;
                SEG_Display_Buffer[2]=17;
                SEG_Display_Buffer[3]=17;
                SEG_Display_Buffer[4]=17;
                SEG_Display_Buffer[5]=17;
                SEG_Display_Buffer[6]=17;
                SEG_Display_Buffer[7]=11;
                password.password_state=P_IDLE;

                break;            
            case FUN_LIST:
                switch (key_mat.key_value) {
                    case 1:
                            SEG_Display_Buffer[0]=key_mat.key_value;
                            time=60;
                            password.password_state=FUN_RUN;
                        break;
                    case 2:
                            SEG_Display_Buffer[0]=key_mat.key_value;
                        time=90;
                        password.password_state=FUN_RUN;
                        break;
                    case 3:
                        password.password_state=P_IDLE;
                        break;
                    default:
                        
                        break;
                }
                break;
             case FUN_RUN:
                     fun_list();
                if (key_mat.key_value == 3 || time == 0)
                           {
                                   password.password_state = FUN_LIST;
                                   key_mat.key_value = 255;
                                        time = 0;
                                        SEG_Display_Buffer[0]=0;
                                        SEG_Display_Buffer[6]=0;
                                        SEG_Display_Buffer[7]=0;
                                       
                           }                                                    
            default:
                // default code
                break;
        }
}

void fun_list(void)
{
    // SEG_Display_Buffer[0]=17;
    SEG_Display_Buffer[1]=17;
    SEG_Display_Buffer[2]=17;
    SEG_Display_Buffer[3]=17;
    SEG_Display_Buffer[4]=17;
    SEG_Display_Buffer[5]=17;
    SEG_Display_Buffer[6]=time/10;
    SEG_Display_Buffer[7]=time%10;
}

void fun_handel()
{
   time--;
}
冲哥,这是我写的简易洗衣机面板的小程序
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:246
  • 最近打卡:2025-10-15 13:31:06
已绑定手机

0

主题

69

回帖

1136

积分

金牌会员

积分
1136
发表于 2025-10-6 07:16:29 | 显示全部楼层
冲哥,最好讲一下stc8051的8位用法
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-10-12 14:54:20
已绑定手机

0

主题

5

回帖

60

积分

注册会员

积分
60
发表于 2025-10-6 14:51:22 | 显示全部楼层
讲的很棒
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-16 10:03 , Processed in 0.135574 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表