找回密码
 立即注册
楼主: skyalong

学习《Ai8051U教学视频》心得打卡

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-06-16 07:09:04
已绑定手机

1

主题

12

回帖

119

积分

注册会员

积分
119
发表于 2025-6-5 09:33:29 | 显示全部楼层
第十集 虚拟键盘LED和数码管
虚拟显示——LED
截图202506101443043509.jpg     截图202506101445356707.jpg     截图202506101445575209.jpg
任务1:P2口流水灯,P10闪烁
任务1代码
void Task1(void)
{
    u8 cod[8] = {0};
   
    cod[0] = 0x3f;//指定端口 xx11 1111 xxP5P4 P3P2P1P0
    cod[1] = 0xff;//P0 0000 0001
    cod[2] = (led_num % 2)|0xfe;//P1 0000 0010
    cod[3] = ~SEG_W[led_num ];//P2 0000 0100
    cod[4] = 0xff;//P3 0101 0101
    cod[5] = 0xff;//P4 1010 1010
    cod[6] = 0xff;//P5 0101 0101
    LED40_SendData(cod, 7);
    led_num ++;
    if(led_num > 7)led_num = 0;
}

虚拟显示——数码管
截图202506101451108606.jpg     截图202506101451393473.jpg
任务2:左边数码管显示P32按下次数,右边数码管显示P33按下次数
任务2代码(做了修改,第4位加点显示做分割,默认显示0000.0000)
u8 key_num1 = 0;
u8 K32num = 0,K33num = 0;
void Task2(void)
{
    u8 cod[8];
    cod[0] = SEG_D[K32num/1000%10];
    cod[1] = SEG_D[K32num/100%10];
    cod[2] = SEG_D[K32num/10%10];
    cod[3] = (SEG_D[K32num%10])|0x80;
    cod[4] = SEG_D[K33num/1000%10];
    cod[5] = SEG_D[K33num/100%10];
    cod[6] = SEG_D[K33num/10%10];
    cod[7] = SEG_D[K33num%10];
    SEG7_ShowCode(cod);
    if(P32 == 0)
    {
        key_num++;
        if(key_num == 5)
        {
            K32num++;
        }   
    }else{key_num = 0;}
    if(P33 == 0)
    {
        key_num1++;
        if(key_num1 == 5)
        {
            K33num++;
        }   
    }else{key_num1 = 0;}
}

虚拟键盘
截图202506101459071054.jpg
任务3:按下数字按键在数码管显示对
应的按键数字!
例:按下按键0数码管显示0;
任务3代码
void main(void)
{   
    Sys_init();
    usb_init();                                     //USB CDC 接口配置
    set_usb_OUT_callback(usb_callback);             //设置中断回调回调函数
   
    Init_595();
    Timer0_Init();
    EA = 1;
    while(1)
    {   
        Task_Pro_Handler_Callback();
        REC_NUM = UsbOutBuffer[5]-48;
    }
}
u16 REC_NUM = 0;
void Task3(void)
{
    SEG7_ShowLong(REC_NUM,10);
}

拓展代码
u8 cod[8] = {16,16,16,16,16,16,16,16};
u8 cod1[8] ;
void Task3(void)
{        
        if(seg_num == 0)
        {
                cod[0] = 0x40;
                cod[1] = 0x40;
                cod[2] = 0x40;
                cod[3] = 0x40;
                cod[4] = 0x40;
                cod[5] = 0x40;
                cod[6] = 0x40;
                cod[7] = 0x40;
        }        
        cod[seg_num-1] = SEG_D[REC_NUM];
        cod1[seg_num-1] = REC_NUM;


        SEG7_ShowCode(cod);
        if(seg_num >= 8)
        {
                if(cod1[0] == 1&&cod1[1] == 2&&cod1[2] == 3&&cod1[3] == 4&&cod1[4] == 5&&cod1[5] == 6&&cod1[6] == 7&&cod1[7] == 8)
                {
                        cod[0] = 0x40;
                        cod[1] = 0x40;
                        cod[2] = 0x5c;//o
                        cod[3] = 0x73;//p
                        cod[4] = 0x79;//e
                        cod[5] = 0x54;//n  
                        cod[6] = 0x40;
                        cod[7] = 0x40;               
                        
                        SEG7_ShowCode(cod);
                }else seg_num = 0;  //8位结束回0
        }
        
}

工程代码
AI8051_5_10包含拓展.7z (87.91 KB, 下载次数: 1)
拓展代码工程
AI8051_6_10拓展.7z (82.43 KB, 下载次数: 1)













--哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前








回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-06-16 07:09:04
已绑定手机

1

主题

12

回帖

119

积分

注册会员

积分
119
发表于 7 天前 | 显示全部楼层
第十一集 矩阵按键
摘要
1.矩阵按键的原理
2.矩阵按键的程序实现
原理
截图202506110927146057.jpg     截图202506110932087758.jpg
任务1代码

u8 key_board_num = 0xff;
void key_board(void)
{
  COL1 = 0;
  COL2 = 0;
  COL3 = 0;
  COL4 = 0;
  ROW1 = 1;
  ROW2 = 1;
  
  if(ROW1 == 0||ROW2 == 0)
  {
    if(ROW1 == 0&&ROW2 == 0){}
    else if((ROW1 == 1&&ROW2 ==0)||(ROW1 == 0&&ROW2 ==1))
    {
      if(ROW1 == 0){key_board_num = 0;}
      else if(ROW2 ==0){key_board_num = 4;}
   
      COL1 = 1;
      COL2 = 1;
      COL3 = 1;
      COL4 = 1;
      ROW1 = 0;
      ROW2 = 0;
      
      if(COL1 == 0){key_board_num = key_board_num + 1 -1;seg_num++;}
      if(COL2 == 0){key_board_num = key_board_num + 1;seg_num++;}
      if(COL3 == 0){key_board_num = key_board_num + 2;seg_num++;}
      if(COL4 == 0){key_board_num = key_board_num + 3;seg_num++;}
      printf("%d按键按下\r\n",key_board_num);
    }
    COL1 = 0;
    COL2 = 0;
    COL3 = 0;
    COL4 = 0;
    ROW1 = 1;
    ROW2 = 1;
  }
  else
  {
    key_board_num = 0xff;
  }
}
void key_Seg(void)
{
  seg_num++;
  if(seg_num >= 8)    seg_num = 0;  //8位结束回0
  Display_Seg(~SEG_W[0],SEG_D[key_board_num]);
}


程序实现
截图202506111324049020.jpg
代码

void key_board(void)
{
  COL1 = 0;
  COL2 = 0;
  COL3 = 0;
  COL4 = 0;
  ROW1 = 1;
  ROW2 = 1;
  
  if(ROW1 == 0||ROW2 == 0)
  {
    if((ROW1 == 0)&&(ROW2 == 0)){}
    else if(((ROW1 == 1)&&(ROW2 ==0))||((ROW1 == 0)&&(ROW2 ==1)))
    {
      if(ROW1 == 0){key_board_num = 0;}
      else if(ROW2 ==0){key_board_num = 4;}
   
      COL1 = 1;
      COL2 = 1;
      COL3 = 1;
      COL4 = 1;
      ROW1 = 0;
      ROW2 = 0;
      
      if(COL1 == 0){key_board_num = key_board_num + 1 -1;}
      if(COL2 == 0){key_board_num = key_board_num + 1;}
      if(COL3 == 0){key_board_num = key_board_num + 2;}
      if(COL4 == 0){key_board_num = key_board_num + 3;}
      //printf("%d按键按下\r\n",key_board_num);
    }
    COL1 = 0;
    COL2 = 0;
    COL3 = 0;
    COL4 = 0;
    ROW1 = 1;
    ROW2 = 1;
  }
  else
  {
    key_board_num = 0xff;
  }
}
void key_Seg(void)
{
  Display_Seg(~SEG_W[led_num],SEG_D[possward[led_num]]);
  led_num++;
  if(led_num >= 8)    led_num = 0;  //8位结束回0
}
void write_pow(void)
{
  if(key_board_num < 0xff)
  {
    key_num ++;
    if(key_num == 5)
    {
      if(seg_num == 0)
      {
        possward[0] = 16;
        possward[1] = 16;
        possward[2] = 16;//o
        possward[3] = 16;//p
        possward[4] = 16;//e
        possward[5] = 16;//n  
        possward[6] = 16;
        possward[7] = 16;   
      }
      possward[seg_num] = key_board_num;
      seg_num ++;
      if(seg_num == 8)
      {
        if(possward[0] == 1&&possward[1] == 2&&possward[2] == 3&&possward[3] == 4&&possward[4] == 5&&possward[5] == 6&&possward[6] == 7&&possward[7] == 0)
        {
          possward[0] = 17;
          possward[1] = 1;
          possward[2] = 17;//o
          possward[3] = 1;//p
          possward[4] = 17;//e
          possward[5] = 1;//n  
          possward[6] = 17;
          possward[7] = 1;   
        }
        else
        {
          possward[0] = 16;
          possward[1] = 16;
          possward[2] = 16;//o
          possward[3] = 16;//p
          possward[4] = 16;//e
          possward[5] = 16;//n  
          possward[6] = 16;
          possward[7] = 16;   
        }
        seg_num = 0;  
      }   
    }
  }
  else
  {
    key_num = 0;
  }
}


拓展
截图202506111333263493.jpg
代码包含洗衣机拓展
AI8051_6_11.7z (94.79 KB, 下载次数: 0)










--哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-06-16 07:09:04
已绑定手机

1

主题

12

回帖

119

积分

注册会员

积分
119
发表于 4 天前 | 显示全部楼层
第十二集 复位系统
摘要
1硬件复位
2.软件复位

硬件复位
截图202506131452579493.jpg     截图202506131453383327.jpg     截图202506131454488704.jpg     截图202506131624013964.jpg
看门狗复位代码,按下按键跳过喂狗超时将复位
WDT_CONTR = 0X24;//开启看门狗
    while(1)
    {   
        Task_Pro_Handler_Callback();
        //REC_NUM = UsbOutBuffer[5]-48;//任务3
        if(P33 != 0)
            WDT_CONTR = 0X34;//喂狗
    }
软件复位代码,P32软件复位,P32软件复位并进入下载模式

void key(void)
{
    if(P32 == 0)
    {
        key_num++;
        if(key_num == 5)
        {
            //printf("按键按下\r\n");
            USB_Reset_U();
            IAP_CONTR = 0X20;//软件复位,不进入下载模式
        }   
    }
    else
    {
        key_num = 0;
    }
    if(P33 == 0)
    {
        key_num1++;
        if(key_num1 == 5)
        {
            //printf("按键按下\r\n");
            USB_Reset_U();
            IAP_CONTR = 0X60;//软件复位,进入下载模式
        }   
    }
    else
    {
        key_num1 = 0;
    }
}
课后小练
截图202506161418237267.jpg
拓展代码:
AI8051_7_12.7z (97.4 KB, 下载次数: 0)


            





--哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前



回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 00:12 , Processed in 0.147460 second(s), 56 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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