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

Ai8051U学习打卡

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-11-22 22:32:20 | 显示全部楼层
今天我学习了《Ai8051U深度入门》教学视频第9课 数码管的静态数码管部分,看了视频才知道,原来数码管显示还能用上结构体,74hc595的控制程序还能这样写,这是以前各种8051单片机书上没有看过的内容,每年这么多单片机的课本的都是无脑重复,真的想起一句话,学校里学的单片机太简单基础,都不知道现在公司里的单片机技术发展到什么样子。

数码管demo运行的样子

数码管demo运行的样子
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-11-23 09:09:22 | 显示全部楼层
今天学习了 《Ai8051U深度入门》教学视频第9节 第二个任务,动态显示0-7,我学到了 断码和位码都可以设定为数组,通过循环调用数组,每个数码管显示1ms,8个数码管时间不超过20ms防止闪烁,就可以固定的动态的显示0-7,调用数组号,如果需要增加,每次+1要写在[]方括号里。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-11-24 20:20:25 | 显示全部楼层
今天在B站学习了《Ai8051U深度入门》第9节 数码管的第三个任务,显示动态电子时钟,学习到 if else语句可以写很长,使用结构体的时候,每个数码管写一个seg_no ,1ms扫显示一个,8个数码管循环扫描,在从Task任务里 写一个shi fen miao的自加函数,就可以做成一个简易的电子时钟。我还发现B站的教学视频可以达到1080p,比在论坛里的视频看的清楚。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-11-25 11:30:44 | 显示全部楼层
今天学习了《Ai8051U深度入门》视频第9节课的 虚拟数码管部分,学习到了使用ISP软件+实验箱/擎天柱开发板进行虚拟数码管显示,还了解到了ISP软件在数码管显示方面的许多功能和强大的实力。不过视频里的ISP软甲版本是V6.94Y,我用的版本是V6.96E,比视频里的功能又增加了不少。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-11-25 20:55:53 | 显示全部楼层
今天复习了结构体流水灯和虚拟led端口显示,使用数组的形式显示火车流水灯,但是在怎样只开P2口并做到虚拟显示的函数PLED_40这里,我还是没理解端口设置,在cod[3] = ~T_NUM[state_now];                //P2 保持段码输出 这里 把~T_NUM[state_now]换掉,ISP软件的虚拟显示就不工作了。。。。
#include "io.h"

u8 T_NUM[16] =
{
        0X01,0X03,0X07,0X0F,0X1F,0X3F,0X7F,0XFF,
        0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00
};

u8 state_now = 0;

void PLED_40(void)
{
        u8 cod[8];
        cod[0] = 0x0f;                //表示开启P0-P3
        cod[1] = 0X00;                //关闭P0端口       
        cod[2] = 0X00;                //关闭P1
        cod[3] = ~T_NUM[state_now];                //P2 保持段码输出
        cod[4] = 0X00;                //关闭P3
        LED40_SendData( cod,5 ); //仍发送前5个元素(使能P0-P3配置)
       
        P2 = ~T_NUM[state_now];//直接控制P2输出
       
        state_now++;
        if( state_now>15 )
                state_now = 0;

       
}

#include "task.h"
#include "io.h"




static TASK_COMPONENTS Task_Comps[]=
{
//状态  计数  周期  函数
       
{0, 150,   150,   PLED_40},      /* task 1 Period: 150ms */

};

u8 Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps[0]);

//========================================================================
// 函数: Task_Handler_Callback
// 描述: 任务标记回调函数.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2012-10-22
//========================================================================
void Task_Marks_Handler_Callback(void)
{
    u8 i;
    for(i=0; i<Tasks_Max; i++)
    {
        if(Task_Comps[i].TIMCount)      /* If the time is not 0 */
        {
            Task_Comps[i].TIMCount--;   /* Time counter decrement */
            if(Task_Comps[i].TIMCount == 0) /* If time arrives */
            {
                /*Resume the timer value and try again */
                Task_Comps[i].TIMCount = Task_Comps[i].TRITime;  
                Task_Comps[i].Run = 1;      /* The task can be run */
            }
        }
    }
}

//========================================================================
// 函数: Task_Pro_Handler_Callback
// 描述: 任务处理回调函数.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2012-10-22
//========================================================================
void Task_Pro_Handler_Callback(void)
{
    u8 i;
    for(i=0; i<Tasks_Max; i++)
    {
        if(Task_Comps[i].Run) /* If task can be run */
        {
            Task_Comps[i].Run = 0;      /* Flag clear 0 */
            Task_Comps[i].TaskHook();   /* Run task */
        }
    }
}
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-11-27 13:41:07 | 显示全部楼层
今天搞懂了 控制DIP40的各个管脚上LED状态的 库函数调用,前天学习代码的时候,void PLED_40(void)我并没有看懂命令格式,今天看懂了,1-4字节的4CH 45H 44H 28H 是固定的不能变动,第5字节的意思是 之后有效数据长度,这个可以在代码写完再改,第6字节是P0-P5端口的屏蔽为,ISP软件的示例3 第6字节是0FH,就是

  0-0-0-0--1--1--1--1,
  0-0-0-0-P4-P3-P2-P4
意思就是打开P0-P4口,
从第7字节开始,代码开始描述端口状态,
那么 4CH 45H 44H 28H 05H 0FH 11H 22H 33H 44H
        -----命令头--------|长度|端口|2灯|4灯|6灯|2灯      
反过来再看命令,因为在第6字节描述哪个端口开关之后,又用了4个字节描述每个端口的状态,所以4+1是5,在第5字节描述有效数据长度就是05H,
我前天使用虚拟显示的时候,用P2端口显示流水灯,但是其他端口也有虚拟端口亮,当时不知道为什么,
今天想明白了,因为用的是取反,所以 其他口我以为是灭,其实是亮
截图202511271326429740.jpg
截图202511271340341744.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-11-27 13:41:58 | 显示全部楼层
当我把代码改为如下就只有P2口流水灯了
#include "io.h"

u8 T_NUM[8] =
{
        0X01,0X03,0X07,0X0F,0X1F,0X3F,0X7F,0XFF
};

u8 state_now = 0;

void PLED_40(void)
{
        u8 cod[8];
        cod[0] = 0x0f;                //表示开启P0-P3
        cod[1] = 0Xff;                //P0端口       
        cod[2] = 0Xff;                //P1
        cod[3] = ~T_NUM[state_now];                //P2
        cod[4] = 0Xff;                //P3
        LED40_SendData( cod,5 );
       
        P2 = ~T_NUM[state_now];
       
        state_now++;
        if( state_now>7 )
                state_now = 0;

}
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-11-30 21:38:00 | 显示全部楼层
今天又研究了一下虚拟显示LED的代码,搞明白了,虚拟显示和实际显示是两回事,PLED-40()函数只是把LED信息打包放在信封里,发给单片机,其实虚拟显示和实际显示可以自己显示自己的,互不干扰,互不影响,我有修改了代码,让P0口,P1口和P2口 分别显示P2口的流水灯,但是擎天柱开发板上只有P2显示,
#include "io.h"

u8 T_NUM[16] =
{
        0X01,0X03,0X07,0X0F,0X1F,0X3F,0X7F,0XFF,
        0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00
};

u8 state_now = 0;

void PLED_40(void)
{
        u8 cod[8];
        cod[0] = 0x0f;                //表示开启P0-P3
        cod[1] =~T_NUM[state_now];        //关闭P0端口       
        cod[2] = ~T_NUM[state_now];        //关闭P1
        cod[3] = ~T_NUM[state_now];                //P2 保持段码输出
        cod[4] = 0XFF;                //关闭P3
        LED40_SendData( cod,5 ); //仍发送前5个元素(使能P0-P3配置)
       
        P2 = ~T_NUM[state_now];//直接控制P2输出
       
        state_now++;
        if( state_now>15 )
                state_now = 0;

       
}

截图202511302134436332.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-12-1 12:02:23 | 显示全部楼层
今天看了《Ai8051U深度入门》教学视频第10节的前半部分,明白了 LED虚拟显示的 命令格式

例如 功能1控制DIP40各个管脚上LED状态和功能2指定管脚上的LED状态,命令格式类似,但是库函数名称不一样
格式都是  : 4CH  |  45H  |  44H  |  28H  |  02H  |  01H  |  55H
描述     :    -----------------固定头---------|-长度--|--端口-|-状态-
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-12-17 15:46:32
已绑定手机

1

主题

79

回帖

363

积分

中级会员

积分
363
发表于 2025-12-1 16:17:35 | 显示全部楼层
今天看了《Ai8051U深度入门》教学视频第10节的前半部分,明白了 LED虚拟显示的 命令格式

例如 功能1控制DIP40各个管脚上LED状态和功能2指定管脚上的LED状态,命令格式类似,但是库函数名称不一样,功能3控制
功能3    格式             4CH  |  45H  |  44H  |  28H  | x1     |   x2   |  pn
   字节顺序                1字节|2字节  |3字节 |4字节  | 5字节 |6字节 |7字节
示例  :                    4CH  |  45H  |  44H  |  28H  |  02H  |  01H  |  55H
             描述     :    -----------------固定头---------|-长度--|--端口-|-状态-
第6字节组成:    bit7     bit6    bit5    bit4    bit3    bit2    bit1    bit0
代表端口                               P5      P4      P3      P2     P1      P0           
计算                   8        4        2        1        8       4       2       1
3示1   01H          0        0        0        0        0        0       0       1    --设置P0口
3示2   04H          0        0        0        0        0        1       0       0    --设置P2口

第7字节组成:    bit7     bit6    bit5    bit4    bit3    bit2    bit1    bit0
计算                   8        4        2        1        8       4       2       1
3示1   55H          0        1        0        1        0       1       0       1
3示2   AAH         1         0        1       0        1       0       1       0

第5字节长度的意思就是从第五字节向后还有几个字节,第5字节就写几,示例中第5字节后面还有两个字节,所以第五字节就是02H

功能1和功能2  指定管脚输出低/高电平
功能1/2    格式             4CH  |  45H  |  44H  |  28H  | 02H   |  00H   |  px
   字节顺序                   1字节|2字节  |3字节 |4字节  | 5字节 |6字节 |7字节
描述     :                     -----------------固定头---------|-长度--|-固定-|-状态-

示例1                             4CH      45H    44H    28H  |  02H  |  00H | 03H
描述     :                     |----------------固定头---------|-长度--|-固定-|-状态-

第7字节组成:                  bit7   |   bit6    bit5    bit4    bit3 |  bit2    bit1    bit0 |
描述                        高平1/低0 |  ------指定管脚-------------|-----指定第几位----|
含义                                 1/0        8       4       2       1    |    4        2       1
计算                                  8         4        2       1      8          4        2       1
功1示1  第7字节  03H         0          0       0       0       0         0        1       1
含义                            低电平   |--------P0管脚--------------|------第3位-------
功1示2 第7字节   25H         0         0        1      0       0          1        0        1                  
含义                            低电平   |--------P4管脚--------------|------第5位-------     

说实话第7字节为25H,代表P4.5口 我有点懵,
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-12-18 10:25 , Processed in 0.114406 second(s), 79 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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