找回密码
 立即注册
楼主: 曹会杰

点亮第一个LED灯

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-08-08 11:50:32
已绑定手机

2

主题

70

回帖

339

积分

中级会员

积分
339
发表于 2025-6-24 19:21:07 | 显示全部楼层
曹*** 发表于 2025-6-24 19:19
[apoyl_aliyunv ...

为什么中间灯会全亮一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-08-08 11:50:32
已绑定手机

2

主题

70

回帖

339

积分

中级会员

积分
339
发表于 2025-6-24 19:24:18 | 显示全部楼层
曹*** 发表于 2025-6-24 19:19
[apoyl_aliyunv ...

又点错了,上传了三个视频文件
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-08-08 11:50:32
已绑定手机

2

主题

70

回帖

339

积分

中级会员

积分
339
发表于 2025-6-24 21:47:14 | 显示全部楼层
USB不停电下载成功完成!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-08-08 11:50:32
已绑定手机

2

主题

70

回帖

339

积分

中级会员

积分
339
发表于 2025-6-24 21:48:33 | 显示全部楼层
曹*** 发表于 2025-6-24 21:47
USB不停电下载成功完成!

/*
        MAIN_Fosc  24000000Hz
*/
#include <AI8051U.H>
#include "stc32_stc8_usb.h"
#include <intrins.H>

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

unsigned char ucLed=0xFE;
unsigned char ucLed_Mode;//流水灯模式
unsigned char ucLed_Buff[]={0x7E,0xBD,0xDB,0xE7};

/*---Xms延时函数 ---*/
void DelayXms(unsigned int Xms)        //@24.000MHz
{
        unsigned long edata i;
        while(Xms--)
        {
                _nop_();
                _nop_();
                _nop_();
                i = 5998UL;
                while (i) i--;
        }
}
/*---LED流水灯处理函数 ---*/
void ucLed_Proc()
{
        static unsigned char i=0;
        P2 = ucLed;
        switch(ucLed_Mode)
        {
                case 0:
                        if(ucLed==0x7E)
                        {
                                ucLed = 0xFE;
                        }
                        else
                        ucLed = _crol_(ucLed,1);
                        DelayXms(500);
                        if(ucLed==0x7F)ucLed_Mode=1;
                break;
                case 1:
                        ucLed = _cror_(ucLed,1);
                        DelayXms(500);
                        if(ucLed==0xFE)ucLed_Mode=2;
                break;
                case 2:                                       
                                ucLed=ucLed_Buff;
                                i++;
                                if(i==3)ucLed_Mode=3;
                       
                        DelayXms(500);
                break;
                case 3:
                       
                        ucLed=ucLed_Buff;
                        i--;
                        if(i==255)ucLed_Mode=0;
                        DelayXms(500);
                break;
        }
        P2=0xFF;
}
/*---MAIN 主函数 ---*/
void main()
{
        P_SW2 |= 0x80;                //B7位写1,使能访问XFR       
                                                                       
        P0M1 = 0x00;   P0M0 = 0x00;        //初始化IO口为准双向IO口
    P1M1 = 0x00;   P1M0 = 0x00;
    P2M1 = 0x00;   P2M0 = 0x00;
    P3M1 = 0x00;   P3M0 = 0x00;
    P4M1 = 0x00;   P4M0 = 0x00;
    P5M1 = 0x00;   P5M0 = 0x00;
    P6M1 = 0x00;   P6M0 = 0x00;
    P7M1 = 0x00;   P7M0 = 0x00;
       
        usb_init();                                     //USB CDC 接口配置
    IE2 |= 0x80;                                    //使能USB中断
    EA = 1;                                                                                        //IE |= 0X80;开总中断
               
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
               
        while(1)
        {
                if (bUsbOutReady)
        {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            
            usb_OUT_done();
        }
                ucLed_Proc();
        }
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-08-08 11:50:32
已绑定手机

2

主题

70

回帖

339

积分

中级会员

积分
339
发表于 2025-6-25 09:17:46 | 显示全部楼层
感谢官方 免费+包邮 的 擎天柱 核心板学习记录
printf_usb函数的应用






Screenshot 2025-06-25 081631.png
Screenshot 2025-06-25 090649.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:65
  • 最近打卡:2025-08-08 11:50:32
已绑定手机

2

主题

70

回帖

339

积分

中级会员

积分
339
发表于 2025-6-25 09:19:05 | 显示全部楼层
曹*** 发表于 2025-6-25 09:17
感谢官方 免费+包邮 的 擎天柱 核心板学习记录
printf_usb函数的应用

输出成功!

Screenshot 2025-06-25 090623.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:46
  • 最近打卡:2025-08-09 10:27:56
已绑定手机

7

主题

62

回帖

221

积分

中级会员

积分
221
发表于 5 天前 | 显示全部楼层
曹*** 发表于 2025-6-24 19:19
[apoyl_aliyunv ...

这段代码主要实现了一个LED 灯的多种模式循环显示功能,通过控制 P2 口连接的 LED(推测是 8 位共阴极数码管或 8 个独立 LED),按不同模式进行切换显示。以下是详细分析:
核心功能说明
代码通过ucLed_Proc()函数控制 LED 的显示模式,共包含 4 种模式,完成一轮后自动循环。具体逻辑如下:
1. 变量与硬件说明
ucLed:用于存储当前输出到 P2 口的 LED 控制数据(8 位二进制,每一位对应一个 LED 的亮灭状态,0 表示点亮,1 表示熄灭,推测为共阴极 LED)。
ucLed_Mode:模式控制变量(0-3),用于切换不同的显示模式。
ucLed_Buff:一个数组(代码中未完全展示定义,推测包含 3 个元素),存储自定义的 LED 显示数据。
i:静态变量,用于在模式 2、3 中遍历ucLed_Buff数组。
P2:LED 控制端口,通过写入ucLed的值控制 LED 亮灭;最后设置为0xFF是为了避免残留电平影响。
P2M0、P2M1:配置 P2 口为普通 IO 模式(推挽 / 准双向,根据 STC 单片机特性,0x00通常对应准双向输出)。
2. 四种模式详解(switch(ucLed_Mode))
模式 0(case 0):左移循环
初始状态:ucLed从0xFE(二进制11111110,最低位 LED 点亮)开始。
逻辑:通过_crol_(ucLed,1)函数将ucLed循环左移 1 位(每次左移,点亮的 LED 向左移动一位)。
切换条件:当ucLed变为0x7F(二进制01111111,最高位 LED 点亮)时,切换到模式 1。
延时:每次移动后延时 500ms,肉眼可见 LED 缓慢左移。
例:0xFE(亮最右)→ 0xFD(亮右 2)→ ... → 0x7F(亮最左)→ 进入模式 1。
模式 1(case 1):右移循环
逻辑:通过_cror_(ucLed,1)函数将ucLed循环右移 1 位(每次右移,点亮的 LED 向右移动一位)。
切换条件:当ucLed变回0xFE(二进制11111110,回到最右位 LED 点亮)时,切换到模式 2。
延时:每次移动后延时 500ms,LED 缓慢右移。
例:0x7F(亮最左)→ 0xBF(亮左 2)→ ... → 0xFE(亮最右)→ 进入模式 2。
模式 2(case 2):自定义数组正向遍历
逻辑:按顺序显示ucLed_Buff数组中的元素(i从 0 递增到 2,依次取ucLed_Buff[0]→ucLed_Buff[1]→ucLed_Buff[2])。
切换条件:当i等于 3(遍历完 3 个元素)时,切换到模式 3。
延时:每个元素显示 500ms。
例:若ucLed_Buff = {0xAA, 0x55, 0x33},则依次显示这三个值对应的 LED 状态。
模式 3(case 3):自定义数组反向遍历
逻辑:按逆序显示ucLed_Buff数组中的元素(i从 2 递减到 0,依次取ucLed_Buff[2]→ucLed_Buff[1]→ucLed_Buff[0])。
切换条件:当i减到 255(无符号数溢出,相当于遍历完反向顺序)时,切换回模式 0,完成一轮循环。
延时:每个元素显示 500ms。
整体流程
模式循环顺序:模式 0(左移)→ 模式 1(右移)→ 模式 2(数组正向)→ 模式 3(数组反向)→ 模式 0(重复),形成一个完整的 LED 动态显示循环。
总结
这段代码的作用是:通过 P2 口控制 8 个 LED(或数码管),按 “左移→右移→自定义数组正向→自定义数组反向” 的顺序循环显示,每种模式下 LED 状态每 500ms 更新一次,适合做简单的 LED 跑马灯或动态显示效果。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-11 07:48 , Processed in 1.111124 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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