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

AI8051U学习心得-1

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2026-02-12 08:01:00
已绑定手机

1

主题

33

回帖

399

积分

中级会员

积分
399
发表于 2026-1-2 17:36:25 | 显示全部楼层
学习心得-15  数码管显示“6”,共阳极单数码管
  1. #include <AI8051U.H>      // 包含擎天柱核心板寄存器定义头文件
  2. /**
  3. * @brief 系统初始化函数
  4. */
  5. void Init(void)
  6. {
  7.         WTST = 0;                                        // 设置程序指令等待参数,0为最快速度
  8.         EAXFR = 1;                                        // 使能访问扩展RAM(XFR)
  9.         CKCON = 0;                                        // 设置外部RAM访问时序
  10.         // 将P2端口设置为准双向口模式
  11.         P2M1 = 0x00;
  12.         P2M0 = 0x00;
  13. }
  14. /**
  15. * @brief 主函数,程序入口
  16. */
  17. void main(void)
  18. {
  19.         Init(); // 调用初始化函数
  20.     // --- 核心代码 ---
  21.     // 将P2端口赋值为0x82,以在共阳数码管上显示数字“6”
  22.     // 0x82 的二进制是 1000 0010
  23.         P2 = 0x82;
  24.         while(1)
  25.         {
  26.         // 程序卡在死循环中,数码管将一直显示“6”
  27.         }
  28. }
复制代码
IMG_20260102_173429.jpg
IMG_20260102_173434.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2026-02-12 08:01:00
已绑定手机

1

主题

33

回帖

399

积分

中级会员

积分
399
发表于 2026-1-2 17:37:06 | 显示全部楼层
vdgh*** 发表于 2026-1-2 17:36
学习心得-15  数码管显示“6”,共阳极单数码管

引脚        P27 (dp)        P26 (g)        P25 (f)        P24 (e)        P23 (d)        P22 (c)        P21 (b)        P20 (a)
电平        1        0        0        0        0        0        1        0
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2026-02-12 08:01:00
已绑定手机

1

主题

33

回帖

399

积分

中级会员

积分
399
发表于 2026-1-2 18:30:51 | 显示全部楼层
学习心得-15  p2呼吸灯
  1. #include <AI8051U.H>      // 包含擎天柱核心板寄存器定义头文件
  2. /**
  3. * @brief 用于软件PWM的微秒级延时函数 (一个单位时间)
  4. * @note 这个延时函数非常短,用于构成PWM的基本时间单位。
  5. *       延时的长短会影响呼吸的“频率”和“平滑度”。
  6. */
  7. void pwm_delay_us()
  8. {
  9.     unsigned char i;
  10.     // 这个循环的次数决定了PWM的一个单位时间长度。
  11.     // 你可以根据实际情况调整这个值。
  12.     for(i = 1000; i > 0; i--);
  13. }
  14. /**
  15. * @brief 系统初始化函数
  16. */
  17. void Init(void)
  18. {
  19.         WTST = 0;                                        // 设置程序指令等待参数,0为最快速度
  20.         EAXFR = 1;                                        // 使能访问扩展RAM(XFR)
  21.         CKCON = 0;                                        // 设置外部RAM访问时序
  22.         // 将P2端口设置为准双向口模式
  23.         P2M1 = 0x00;
  24.         P2M0 = 0x00;
  25. }
  26. /**
  27. * @brief 主函数,程序入口
  28. */
  29. void main(void)
  30. {
  31.     unsigned int brightness; // 定义亮度变量,范围 0-100
  32.     unsigned int i;          // 循环变量
  33.         Init(); // 调用初始化函数
  34.         while(1) // 无限循环,让呼吸灯效果持续进行
  35.         {
  36.         // --- 效果一:呼吸 - 渐亮 (从暗到亮) ---
  37.         // brightness 从 0 增加到 100
  38.                 for(brightness = 0; brightness < 100; brightness++)
  39.                 {
  40.             // LED 点亮阶段
  41.             P2 = 0x00; // P2端口输出低电平,点亮所有LED (假设为低电平点亮)
  42.             for(i = 0; i < brightness; i++)
  43.             {
  44.                 pwm_delay_us(); // 延时一个单位时间
  45.             }
  46.             // LED 熄灭阶段
  47.             P2 = 0xFF; // P2端口输出高电平,熄灭所有LED
  48.             for(i = 0; i < 100 - brightness; i++)
  49.             {
  50.                 pwm_delay_us(); // 延时一个单位时间
  51.             }
  52.                 }
  53.         // --- 效果二:呼吸 - 渐暗 (从亮到暗) ---
  54.         // brightness 从 100 减少到 0
  55.                 for(brightness = 100; brightness > 0; brightness--)
  56.                 {
  57.             // LED 点亮阶段
  58.             P2 = 0x00; // 点亮所有LED
  59.             for(i = 0; i < brightness; i++)
  60.             {
  61.                 pwm_delay_us(); // 延时一个单位时间
  62.             }
  63.             // LED 熄灭阶段
  64.             P2 = 0xFF; // 熄灭所有LED
  65.             for(i = 0; i < 100 - brightness; i++)
  66.             {
  67.                 pwm_delay_us(); // 延时一个单位时间
  68.             }
  69.                 }
  70.         }
  71. }
复制代码
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2026-02-12 08:01:00
已绑定手机

1

主题

33

回帖

399

积分

中级会员

积分
399
发表于 2026-1-2 18:40:21 | 显示全部楼层
学习心得-16  闪烁+流水灯,测试成功
  1. #include <AI8051U.H>      // 包含擎天柱核心板寄存器定义头文件
  2. #include <intrins.h>      // 包含内部函数库,用于循环移位
  3. // 定义常量,方便调整效果
  4. #define PWM_PERIOD 100    // PWM周期的总时间单位
  5. #define BASE_BRIGHTNESS 5 // 背景LED的基础亮度 (占空比),值越大背景越亮
  6. /**
  7. * @brief 用于软件PWM的微秒级延时函数 (一个单位时间)
  8. */
  9. void pwm_delay_us()
  10. {
  11.     unsigned char i;
  12.     for(i = 100; i > 0; i--);
  13. }
  14. /**
  15. * @brief 系统初始化函数
  16. */
  17. void Init(void)
  18. {
  19.         WTST = 0;
  20.         EAXFR = 1;
  21.         CKCON = 0;
  22.         P2M1 = 0x00;
  23.         P2M0 = 0x00;
  24. }
  25. /**
  26. * @brief 主函数,程序入口
  27. */
  28. void main(void)
  29. {
  30.     // --- 主要修改点:将所有在循环内使用的变量都移到函数开头声明 ---
  31.     unsigned int breath_brightness;
  32.     unsigned char led_pattern;
  33.     unsigned int i;
  34.     unsigned int j; // 将 j 移到这里声明
  35.         Init();
  36.     led_pattern = 0x01;
  37.         while(1)
  38.         {
  39.                 for(breath_brightness = 0; breath_brightness < PWM_PERIOD; breath_brightness++)
  40.                 {
  41.                         for(i = 0; i < 8; i++)
  42.                         {
  43.                                 if(led_pattern & (0x01 << i))
  44.                                 {
  45.                                         P2 = ~(0x01 << i);
  46.                     // 修改:去掉 for 循环中的 unsigned int
  47.                                         for(j = 0; j < breath_brightness; j++)
  48.                                         {
  49.                                                 pwm_delay_us();
  50.                                         }
  51.                                 }
  52.                                 else
  53.                                 {
  54.                                         P2 = ~(0x01 << i);
  55.                     // 修改:去掉 for 循环中的 unsigned int
  56.                                         for(j = 0; j < BASE_BRIGHTNESS; j++)
  57.                                         {
  58.                                                 pwm_delay_us();
  59.                                         }
  60.                                 }
  61.                                 P2 = 0xFF;
  62.                 // 修改:去掉 for 循环中的 unsigned int
  63.                                 for(j = 0; j < 2; j++)
  64.                                 {
  65.                                         pwm_delay_us();
  66.                                 }
  67.                         }
  68.                 }
  69.                 for(breath_brightness = PWM_PERIOD; breath_brightness > 0; breath_brightness--)
  70.                 {
  71.                         for(i = 0; i < 8; i++)
  72.                         {
  73.                                 if(led_pattern & (0x01 << i))
  74.                                 {
  75.                                         P2 = ~(0x01 << i);
  76.                     // 修改:去掉 for 循环中的 unsigned int
  77.                                         for(j = 0; j < breath_brightness; j++)
  78.                                         {
  79.                                                 pwm_delay_us();
  80.                                         }
  81.                                 }
  82.                                 else
  83.                                 {
  84.                                         P2 = ~(0x01 << i);
  85.                     // 修改:去掉 for 循环中的 unsigned int
  86.                                         for(j = 0; j < BASE_BRIGHTNESS; j++)
  87.                                         {
  88.                                                 pwm_delay_us();
  89.                                         }
  90.                                 }
  91.                                 P2 = 0xFF;
  92.                 // 修改:去掉 for 循环中的 unsigned int
  93.                                 for(j = 0; j < 2; j++)
  94.                                 {
  95.                                         pwm_delay_us();
  96.                                 }
  97.                         }
  98.                 }
  99.         
  100.                 led_pattern = _crol_(led_pattern, 1);
  101.         }
  102. }
复制代码
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2026-02-12 08:01:00
已绑定手机

1

主题

33

回帖

399

积分

中级会员

积分
399
发表于 2026-1-2 18:52:54 | 显示全部楼层
学习心得-17    3亮流水灯,测试成功

  1. #include <AI8051U.H>      // 包含擎天柱核心板寄存器定义头文件
  2. #include <intrins.h>      // 包含内部函数库,用于循环移位
  3. // 定义常量,方便调整效果
  4. #define PWM_PERIOD 100    // PWM周期的总时间单位
  5. #define BASE_BRIGHTNESS 5 // 背景LED的基础亮度 (占空比),值越大背景越亮
  6. /**
  7. * @brief 用于软件PWM的微秒级延时函数 (一个单位时间)
  8. */
  9. void pwm_delay_us()
  10. {
  11.     unsigned char i;
  12.     for(i = 50; i > 0; i--);
  13. }
  14. /**
  15. * @brief 系统初始化函数
  16. */
  17. void Init(void)
  18. {
  19.         WTST = 0;
  20.         EAXFR = 1;
  21.         CKCON = 0;
  22.         P2M1 = 0x00;
  23.         P2M0 = 0x00;
  24. }
  25. /**
  26. * @brief 主函数,程序入口
  27. */
  28. void main(void)
  29. {
  30.     unsigned int breath_brightness;
  31.     unsigned char led_pattern;
  32.     unsigned int i;
  33.     unsigned int j;
  34.         Init();
  35.     // --- 主要修改点 1: 修改初始模式 ---
  36.     // 0x07 的二进制是 0000 0111,这会让P20, P21, P22三个LED同时点亮。
  37.     led_pattern = 0x07;
  38.         while(1)
  39.         {
  40.                 for(breath_brightness = 0; breath_brightness < PWM_PERIOD; breath_brightness++)
  41.                 {
  42.                         for(i = 0; i < 8; i++)
  43.                         {
  44.                 // 判断当前扫描的LED是否是流水灯组的一部分
  45.                                 if(led_pattern & (0x01 << i))
  46.                                 {
  47.                                         P2 = ~(0x01 << i);
  48.                                         for(j = 0; j < breath_brightness; j++)
  49.                                         {
  50.                                                 pwm_delay_us();
  51.                                         }
  52.                                 }
  53.                                 else
  54.                                 {
  55.                                         P2 = ~(0x01 << i);
  56.                                         for(j = 0; j < BASE_BRIGHTNESS; j++)
  57.                                         {
  58.                                                 pwm_delay_us();
  59.                                         }
  60.                                 }
  61.                                 P2 = 0xFF;
  62.                                 for(j = 0; j < 2; j++)
  63.                                 {
  64.                                         pwm_delay_us();
  65.                                 }
  66.                         }
  67.                 }
  68.                 for(breath_brightness = PWM_PERIOD; breath_brightness > 0; breath_brightness--)
  69.                 {
  70.                         for(i = 0; i < 8; i++)
  71.                         {
  72.                                 if(led_pattern & (0x01 << i))
  73.                                 {
  74.                                         P2 = ~(0x01 << i);
  75.                                         for(j = 0; j < breath_brightness; j++)
  76.                                         {
  77.                                                 pwm_delay_us();
  78.                                         }
  79.                                 }
  80.                                 else
  81.                                 {
  82.                                         P2 = ~(0x01 << i);
  83.                                         for(j = 0; j < BASE_BRIGHTNESS; j++)
  84.                                         {
  85.                                                 pwm_delay_us();
  86.                                         }
  87.                                 }
  88.                                 P2 = 0xFF;
  89.                                 for(j = 0; j < 2; j++)
  90.                                 {
  91.                                         pwm_delay_us();
  92.                                 }
  93.                         }
  94.                 }
  95.         
  96.         // --- 主要修改点 2: 修改移动逻辑 ---
  97.         // 当流水灯组移动到最右边时 (led_pattern == 0xE0),
  98.         // 下一次移动会移出P2端口。为了让它循环回来,我们需要特殊处理。
  99.         if(led_pattern == 0xE0) // 0xE0 的二进制是 1110 0000
  100.         {
  101.             // 直接跳转到最左边的初始位置
  102.             led_pattern = 0x07;
  103.         }
  104.         else
  105.         {
  106.             // 否则,正常左移一位
  107.             led_pattern = _crol_(led_pattern, 1);
  108.         }
  109.         }
  110. }
复制代码
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2026-02-12 08:01:00
已绑定手机

1

主题

33

回帖

399

积分

中级会员

积分
399
发表于 2026-1-4 18:39:23 | 显示全部楼层
学习心得-18   用AIcube创建项目,实现cdc输出 MY name is  AI80051U,Hello World !,运用AIcube非常方便,很高大上,需要自己手动配置的代码很少,适合新手入门!

  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息  
  4. // 文件名称: main.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2026-01-04) 创建文件
  9. ////////////////////////////////////////
  10. //<<AICUBE_USER_HEADER_REMARK_END>>
  11. #include "config.h"                     //默认已包含stdio.h、intrins.h等头文件
  12. //<<AICUBE_USER_INCLUDE_BEGIN>>
  13. // 在此添加用户头文件包含  
  14. //<<AICUBE_USER_INCLUDE_END>>
  15. //<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
  16. // 在此添加用户全局变量定义、用户宏定义以及函数声明  
  17. //<<AICUBE_USER_GLOBAL_DEFINE_END>>
  18. ////////////////////////////////////////
  19. // 项目主函数
  20. // 入口参数: 无
  21. // 函数返回: 无
  22. ////////////////////////////////////////
  23. void main(void)
  24. {
  25.     //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
  26.     // 在此添加用户主函数初始化代码  
  27.     //<<AICUBE_USER_MAIN_INITIAL_END>>
  28.     SYS_Init();
  29.     //<<AICUBE_USER_MAIN_CODE_BEGIN>>
  30.     // 在此添加主函数中运行一次的用户代码  
  31.     //<<AICUBE_USER_MAIN_CODE_END>>
  32.     while (1)
  33.     {
  34.         //USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  35.                                
  36.                                 printf_usb("MY name is  AI80051U,Hello World !\r\n");
  37.         //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
  38.         // 在此添加主函数中用户主循环代码  
  39.         //<<AICUBE_USER_MAIN_LOOP_END>>
  40.     }
  41. }
  42. ////////////////////////////////////////
  43. // 系统初始化函数
  44. // 入口参数: 无
  45. // 函数返回: 无
  46. ////////////////////////////////////////
  47. void SYS_Init(void)
  48. {
  49.     EnableAccessXFR();                  //使能访问扩展XFR
  50.     AccessCodeFastest();                //设置最快速度访问程序代码
  51.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  52.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  53.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  54.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  55.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  56.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  57.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  58.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  59.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  60.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  61.     PORT4_Init();                       //P4口初始化
  62.     delay_ms(1);
  63.     USBLIB_Init();                      //USB库初始化
  64.     delay_ms(1);
  65.     //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
  66.     // 在此添加用户初始化代码  
  67.     //<<AICUBE_USER_INITIAL_CODE_END>>
  68.     EnableGlobalInt();                  //使能全局中断
  69. }
  70. ////////////////////////////////////////
  71. // 微秒延时函数
  72. // 入口参数: us (设置延时的微秒值)
  73. // 函数返回: 无
  74. ////////////////////////////////////////
  75. void delay_us(uint16_t us)
  76. {
  77.     do
  78.     {
  79.         NOP(34);                        //(MAIN_Fosc + 500000) / 1000000 - 6
  80.     } while (--us);
  81. }
  82. ////////////////////////////////////////
  83. // 毫秒延时函数
  84. // 入口参数: ms (设置延时的毫秒值)
  85. // 函数返回: 无
  86. ////////////////////////////////////////
  87. void delay_ms(uint16_t ms)
  88. {
  89.     uint16_t i;
  90.     do
  91.     {
  92.         i = MAIN_Fosc / 6000;
  93.         while (--i);
  94.     } while (--ms);
  95. }
  96. ////////////////////////////////////////
  97. // P4口初始化函数
  98. // 入口参数: 无
  99. // 函数返回: 无
  100. ////////////////////////////////////////
  101. void PORT4_Init(void)
  102. {
  103.     SetP4nInitLevelHigh(PIN_ALL);       //设置P4初始化电平
  104.     SetP4nQuasiMode(PIN_7 | PIN_5 | PIN_4 | PIN_3 | PIN_2 | PIN_1 | PIN_0); //设置P4.7,P4.5,P4.4,P4.3,P4.2,P4.1,P4.0为准双向口模式
  105.     SetP4nPushPullMode(PIN_6);          //设置P4.6为推挽输出模式
  106.     DisableP4nPullUp(PIN_ALL);          //关闭P4内部上拉电阻
  107.     DisableP4nPullDown(PIN_ALL);        //关闭P4内部下拉电阻
  108.     DisableP4nSchmitt(PIN_ALL);         //使能P4施密特触发
  109.     SetP4nSlewRateNormal(PIN_ALL);      //设置P4一般翻转速度
  110.     SetP4nDrivingNormal(PIN_ALL);       //设置P4一般驱动能力
  111.     SetP4nDigitalInput(PIN_ALL);        //使能P4数字信号输入功能
  112.     //<<AICUBE_USER_PORT4_INITIAL_BEGIN>>
  113.     // 在此添加用户初始化代码  
  114.     //<<AICUBE_USER_PORT4_INITIAL_END>>
  115. }
  116. ////////////////////////////////////////
  117. // USB库初始化函数
  118. // 入口参数: 无
  119. // 函数返回: 无
  120. ////////////////////////////////////////
  121. void USBLIB_Init(void)
  122. {
  123.     usb_init();                         //初始化USB模块
  124.     USB_SetIntPriority(0);              //设置中断为最低优先级
  125.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  126.     //<<AICUBE_USER_USBLIB_INITIAL_BEGIN>>
  127.     // 在此添加用户初始化代码  
  128.     //<<AICUBE_USER_USBLIB_INITIAL_END>>
  129. }
  130. ////////////////////////////////////////
  131. // 等待USB配置完成函数
  132. // 入口参数: 无
  133. // 函数返回: 无
  134. ////////////////////////////////////////
  135. void USBLIB_WaitConfiged(void)
  136. {
  137.     while (DeviceState != DEVSTATE_CONFIGURED) //等待USB完成配置
  138.         WDT_Clear();                    //清看门狗定时器 (防止硬件自动使能看门狗)
  139. }
  140. ////////////////////////////////////////
  141. // USB设备接收数据处理程序
  142. // 入口参数: 无
  143. // 函数返回: 无
  144. // bUsbOutReady:USB设备接收数据标志位
  145. // OutNumber:USB设备接收到的数据长度
  146. // UsbOutBuffer:保存USB设备接收到的数据
  147. ////////////////////////////////////////
  148. void USBLIB_OUT_Done(void)
  149. {
  150.     if (bUsbOutReady)                   //查询是否有接收到USB主机发送数据
  151.     {
  152.         //<<AICUBE_USER_USBLIB_ISR_CODE1_BEGIN>>
  153.         // 在此添加中断函数用户代码  
  154.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  155.         // 在此处添加用户处理接收数据的代码
  156.         //<<AICUBE_USER_USBLIB_ISR_CODE1_END>>
  157.         usb_OUT_done();                 //当前包的数据处理完成,通知USB主机可以发送下一包数据
  158.     }
  159. }
  160. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  161. // 在此添加用户函数实现代码  
  162. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码

Snipaste_2026-01-04_18-34-51.png
Snipaste_2026-01-04_18-31-54.png
Snipaste_2026-01-04_18-34-04.png
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2026-02-12 08:01:00
已绑定手机

1

主题

33

回帖

399

积分

中级会员

积分
399
发表于 2026-1-4 18:59:22 | 显示全部楼层
学习心得-19   用AIcube创建项目,查询方式    实现cdc输出对应字符串,运用AIcube非常方便,很高大上,需要自己手动配置的代码很少,适合新手入门!  查询到对应代码即可打印程序中对应的字符串输出。
4.png
3.png
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2026-02-12 08:01:00
已绑定手机

1

主题

33

回帖

399

积分

中级会员

积分
399
发表于 2026-1-4 19:12:10 | 显示全部楼层
学习心得-20   用AIcube创建项目,中断方式    实现cdc输出对应字符串,运用AIcube非常方便。超级赞!!!
很强大,cdc方便调试,官方教程很多,相比其他类型mcu,做得特别周到和细致!!!

11.png
22.png
2.png
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:324
  • 最近打卡:2026-02-12 09:05:32

835

主题

1万

回帖

2万

积分

管理员

积分
22170
发表于 2026-1-4 19:13:08 | 显示全部楼层
可以 直接 申请个
【免费+包邮 送】AI8051U实验箱


让实验 飞起来

点评

谢谢,超级赞  发表于 2026-1-7 17:49
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2026-02-12 08:01:00
已绑定手机

1

主题

33

回帖

399

积分

中级会员

积分
399
发表于 2026-1-7 17:46:33 | 显示全部楼层
学习心得-21  AI8051-点亮数码管 ,从89-51-00开始计时
以下算法的融汇掌握很重要
********************** 显示时钟函数 ************************/
void DisplayRTC(void)
{
    if(hour >= 10)  LED8[0] = hour / 10;
    else            LED8[0] = DIS_BLACK;
    LED8[1] = hour % 10;
    LED8[2] = DIS_;
    LED8[3] = minute / 10;
    LED8[4] = minute % 10;
    LED8[5] = DIS_;
    LED8[6] = second / 10;
    LED8[7] = second % 10;
}

/********************** RTC演示函数 ************************/
void RTC(void)
{
    if(++second >= 60)
    {
        second = 0;
        if(++minute >= 60)
        {
            minute = 0;
            if(++hour >= 24)    hour = 0;
        }
    }
}
截图202601071743413271.jpg
截图202601071743586428.jpg
IMG_20260107_174228.jpg
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-2-12 18:02 , Processed in 0.133384 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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