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

《Ai8051U教学视频》学习心得

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2024-12-29 23:47:56
已绑定手机

1

主题

17

回帖

79

积分

注册会员

积分
79
发表于 2024-12-22 19:55:20 | 显示全部楼层

第十集 虚拟LED和数码管

本节主要介绍了ISP软件上的虚拟LED,数码管和虚拟键盘等仿真功能的使用流程及注意事项
10_01_01.png

虚拟LED
10_02_01.png

虚拟数码管
10_02_02.png

虚拟键盘
10_02_03.png

任务1:P2口流水灯,P10闪烁
10_03_01.png
  1. void TASK_1( void )
  2. {                 
  3.         LED40_SetPort(2,~P2_STATE);                //点亮P20端口        
  4.         P2_STATE = (P2_STATE<<1);                //1000 0000 _> 1 0000 0000
  5.         if( P2_STATE == 0 )
  6.         {
  7.                 P2_STATE = 1;
  8.         }
  9.         
  10.         if( P10_STATE == 0)
  11.         {
  12.                 LED40_SetBit(1,0);
  13.         }
  14.         else
  15.         {
  16.                 LED40_ClrBit(1,0);
  17.         }         
  18.         P10_STATE = !P10_STATE;
  19. }
  20. u32 KEY_Count = 0;
复制代码

任务2:左边数码管显示P32按下次数 右边数码管显示P33按下次数
10_03_02.png
  1. void TASK_2( void )
  2. {
  3.         KEY_Count = KEY1_COUNT *10000 + KEY2_COUNT;     
  4.         SEG7_ShowLong(KEY_Count ,10);
  5. }      
  6. u32 REC_NUM = 0;
复制代码

任务3:按下数字按键在数码管显示对应的按键数字
10_03_03.png
  1. void TASK_3( void )
  2. {
  3.         SEG7_ShowLong( REC_NUM ,10);
  4. }
复制代码

课后练习
10_04_01.png
10_04_02.png
10_04_03.png
10_04_04.png
io.c
  1. #include "io.h"
  2. u16 cnt1,cnt2;
  3. u16 Key_Vol[3] ;                                //按键按下持续时间
  4. u8 code t_display[]={                       //标准字库
  5. //   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
  6.     0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
  7. //black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y
  8.     0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
  9.     0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
  10. u8 cod[8] = {0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40};
  11. void KEY_Task(void)
  12. {
  13.         if( P32 == 0 )
  14.         {
  15.                 Key_Vol[0]++;
  16.                 if( Key_Vol[0]==5 )
  17.                 {
  18.                         //按键按下的任务
  19.                         cnt1++;
  20.                 }
  21.         }
  22.         else
  23.         {
  24.                 Key_Vol[0] = 0;
  25.         }
  26.         
  27.         if( P33 == 0 )
  28.         {
  29.                 Key_Vol[1]++;
  30.                 if( Key_Vol[1]==5 )
  31.                 {
  32.                         //按键按下的任务
  33.                         cnt2++;
  34.                 }
  35.         }
  36.         else
  37.         {
  38.                 Key_Vol[1] = 0;
  39.         }        
  40. }
  41. u8 index=0;
  42. u8 overflag = 0;
  43. void Task_4(void)
  44. {
  45.         SEG7_ShowCode(cod);
  46.         switch(rec_vkey)
  47.         {
  48.                 case 0:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
  49.                 case 1:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
  50.                 case 2:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
  51.                 case 3:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
  52.                 case 4:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
  53.                 case 5:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
  54.                 case 6:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
  55.                 case 7:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
  56.                 case 8:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
  57.                 case 9:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
  58.                 default:rec_vkey = 0xff;break;
  59.         }
  60.         
  61.         if(overflag)
  62.         {
  63.                 overflag = 0;
  64.                 if((cod[0]==t_display[1]) && (cod[1]==t_display[2]) && (cod[2]==t_display[3]) && (cod[3]==t_display[4]) && \
  65.                         (cod[4]==t_display[5]) && (cod[5]==t_display[6]) && (cod[6]==t_display[7]) && (cod[7]==t_display[8]))
  66.                 {
  67.                         cod[0] = 0x00;
  68.                         cod[1] = 0x00;
  69.                         cod[2] = 0x00;
  70.                         cod[3] = 0x00;
  71.                         cod[4] = 0x5C;
  72.                         cod[5] = 0x73;
  73.                         cod[6] = 0x79;
  74.                         cod[7] = 0x37;
  75.                 }
  76.                 else
  77.                 {
  78.                         cod[0] = 0x40;
  79.                         cod[1] = 0x40;
  80.                         cod[2] = 0x40;
  81.                         cod[3] = 0x40;
  82.                         cod[4] = 0x40;
  83.                         cod[5] = 0x40;
  84.                         cod[6] = 0x40;
  85.                         cod[7] = 0x40;
  86.                 }
  87.         }
  88.         
  89. }
复制代码

io.h
  1. #ifndef __IO_H
  2. #define __IO_H
  3. #include "config.h"                        //调用头文件
  4. void KEY_Task(void);
  5. void Task_4(void);
  6. #endif
复制代码

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2024-12-29 23:47:56
已绑定手机

1

主题

17

回帖

79

积分

注册会员

积分
79
发表于 2024-12-25 14:20:05 | 显示全部楼层
收到官方送的AI8051U实验箱啦,感谢官方支持!!!!!!!!!
微信图片_20241225141608.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2024-12-29 23:47:56
已绑定手机

1

主题

17

回帖

79

积分

注册会员

积分
79
发表于 2024-12-25 15:42:48 | 显示全部楼层

老规矩先点灯

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2024-12-29 23:47:56
已绑定手机

1

主题

17

回帖

79

积分

注册会员

积分
79
发表于 2024-12-25 16:47:22 | 显示全部楼层

第九集计时

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2024-12-29 23:47:56
已绑定手机

1

主题

17

回帖

79

积分

注册会员

积分
79
发表于 2024-12-25 18:44:12 | 显示全部楼层

第九集课后练习

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2024-12-29 23:47:56
已绑定手机

1

主题

17

回帖

79

积分

注册会员

积分
79
发表于 2024-12-26 13:33:37 | 显示全部楼层
冲哥的屏幕到了先来个手写计算器例程学习下
微信图片_20241226133154.jpg



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2024-12-29 23:47:56
已绑定手机

1

主题

17

回帖

79

积分

注册会员

积分
79
发表于 2024-12-26 21:18:39 | 显示全部楼层

第十集课后练习

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2024-12-29 23:47:56
已绑定手机

1

主题

17

回帖

79

积分

注册会员

积分
79
发表于 2024-12-27 12:26:02 | 显示全部楼层

第11集 矩阵按键

一、矩阵按键介绍
与独立按键对比:
独立按键:一个按键占用一个 I/O 口。
矩阵按键:将按键排成行列矩阵形式,可减少 I/O 口占用。
矩阵按键的优势:
以较少的 I/O 口控制较多的按键。
例如:8 个 I/O 口可控制 16 个按键。

二、矩阵按键控制原理
按键检测原理:
先将部分引脚输出低电平,部分输出高电平。
若有按键按下,高电平引脚会被拉低。
通过改变输出电平的引脚,结合行和列的状态,可判断按下的按键。
微信图片_20241227122311.jpg

三、矩阵按键程序编写
功能函数:
定义矩阵按键读取函数,返回按下按键的序号。
函数内通过三步操作判断按键状态:先输出特定电平,延时等待,读取引脚状态并计算。
优化函数:
通过静态变量记录上一次按键状态,与当前状态对比,避免重复输出。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-30 20:36 , Processed in 0.152430 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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