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

AI8051U课程第一节心得

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-03-14 23:43:31
已绑定手机

1

主题

13

回帖

95

积分

注册会员

积分
95
发表于 2024-12-13 19:36:13 | 显示全部楼层
学习了AI8051U课程的第八节,用计数器实现多个LED灯的闪烁。
可以用多文件编程方式来进行编程,一个.c文件和一个.h文件执行一个模块功能或者一个任务,这样可以让代码看起来更简洁,修改代码也方便。
.h文件格式:
#ifndef _XXX_H
#define _XXX_H
..........
#endif

.c文件格式:
#include "XXX.h"
...........
!!!!一定要在keil里把头文件路径添加到工程里,否则会找不到头文件,报错!!!!
!!!!.c文件要记得添加去工程里!!!!
LED1 0.3秒闪一次,LED2 0.6秒闪一次,LED3 0.9秒闪一次
要实现这个功能,可以提取出它的一些共同的特征,就可以用结构体去统一写,就可以很方便的定义三个LED灯的一些变量,减少代码的重复。
关键代码:
typedef struct
{
    unsigned char Run; //任务状态:run/stop
    unsigned int TIMCount; //定时计数器
    unsigned int TRITime; //重载计数器
    void(*TaskHook)(void); //任务函数
}TASK_COMPONENTS;
定义变量的时候就能写:TASK_COMPONENTS 变量名1,变量名2,...;
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-03-14 23:43:31
已绑定手机

1

主题

13

回帖

95

积分

注册会员

积分
95
发表于 2024-12-13 19:54:23 | 显示全部楼层
学习了AI8051U课程第八节,学习了用定时器来实现多个LED灯不同频率的闪烁。
采用多文件编程,可以提高代码的可读性,能让代码看起来更简洁明了,也方便修改。
.h文件格式:
#ifndef _XXX_H
#define _XXX_H
......
#endif

.c文件格式
#include "XXX.h"
......

!!!!一定要记得把头文件路径包含到keil工程里,否则会找不到头文件,报错!!!!
!!!!要记得把.c文件添加到工程里!!!!
实现LED1 0.3秒闪一次,LED2 0.6秒闪一次,LED3 0.9秒闪一次,可以先找到它们的共同特征,这样就能用结构体来定义这些共同点的变量,极大地简化了代码。具体定义如下:
typedef struct
{
    unsigned char Run; //任务状态
    unsigned int TIMCount; //定时计数器
    unsigned int TRITime; //重载计数器
    void(*TaskHook)(void); //任务函数
}TASK——COMPONENTS;
定义的时候就能写:TASK——COMPONENTS 变量名1,变量名2,......;
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-03-14 23:43:31
已绑定手机

1

主题

13

回帖

95

积分

注册会员

积分
95
发表于 2024-12-14 16:09:35 | 显示全部楼层
学习了AI8051U课程第九节,学习了数码管的显示。
数码管内部其实就是好多个发光二极管按照形状排列封装在一起组成的。它可以做成多种形状、多种样式,本质都是点亮发光二极管。数码管分共阴极和共阳极两种。共阴极就是数码管里发光二极管的阴极全部连在一起并接地,把每个发光二极管的阳极引出,通过高电平点亮。共阳极就是数码管里发光二极管的阳极全部连在一起并接电源,把每个发光二极管的阴极引出,通过低电平点亮。
常用8段数码管:
             a
       _______
      |            |
      |            |   b
f     |      g    |
      |_______|
      |            |
      |            |    c
e    |            |
      |_______|   。dp
             d

一般a是最低位,dp是最高位,一共8个发光二极管,通过点亮不同的发光二极管就能显示数字(0-9)和部分字母。官方下载软件里有数码管计算器,通过生成段码给连着数码管的IO口赋值就能显示。
多位数码管显示就要用动态显示,原理就是利用人眼的视觉暂留效应,通过快速的切换显示从而让人看起来多位同时显示的“假象”。多位数码管除了段选线还有位选线,位选一次只能选一位数码管,选中哪位数码管给它送段代码那位数码管就能亮,通过扫描的方式就能实现多位同时显示。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-03-14 23:43:31
已绑定手机

1

主题

13

回帖

95

积分

注册会员

积分
95
发表于 2024-12-21 22:31:13 | 显示全部楼层
学习了AI8051U课程第十节,学习了虚拟显示LED和数码管。虚拟LED和虚拟数码管都在官方ISP软件里的仿真调试接口里。
控制擎天柱DIP40各个管脚的LED状态命令:
4CH 45H 44H 28H x1 x2 px ...
1~4字节:命令头
5字节:后面有效数据长度
6字节:P0~P5端口的屏蔽位(bit0:P0,bit1:P1,...)
7~n字节:P0~P5端口的状态
在ISP下载工具里添加头文件的时候就能自动的把AI_usb.h添加进去。程序写好烧录进擎天柱板子上后打开串口然后打开仿真调试接口就能看到。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-7 03:26 , Processed in 0.105637 second(s), 62 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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