YangHY 发表于 2025-12-28 11:18:38


看看我们新的AI_usb.h

我们新学的虚拟LED函数就有了:

int SEG7_ShowString(const char *fmt, ...);
void SEG7_ShowLong(long n, char radix);
void SEG7_ShowFloat(float f);
void SEG7_ShowCode(BYTE *cod);

void LED40_SendData(BYTE *dat, BYTE size);
void LED40_SetPort(BYTE port, BYTE dat);
void LED40_SetBit(BYTE port, BYTE bt);
void LED40_ClrBit(BYTE port, BYTE bt);

YangHY 发表于 2025-12-28 11:22:05

记得在Ai_usb.h里打开prinf()函数:

#ifndef __AI_USB_H__
#define __AI_USB_H__

#include "def.h"

//使用串口“printf”打印信息需屏蔽以下两个定义
//#define PRINTF_SEGLED         //printf输出重定向到ISP下载软件中的7段数码管
//#define PRINTF_HID            //printf输出直接重定向到USB口
#define PRINTF_USB            //printf输出直接重定向到USB口

否则我们用不了printf()函数

YangHY 发表于 2025-12-28 11:25:51

我们把这个lib文件给它换一下

移除旧stc_usb_cdc_32.LIB

换新的stc_usb_cdc_32.LIB

YangHY 发表于 2025-12-28 11:26:44

更换好头文件和库函数文件,再来编译

就一切正常:

YangHY 发表于 2025-12-28 11:33:20

task.c里这样设置:

static TASK_COMPONENTS Task_Comps[]=
{
//状态计数周期函数
       
// {0, 300,   300,   LED0_Blink},      /* task 1 Period: 300ms */
// {0, 600,   600,   LED1_Blink},      /* task 1 Period: 600ms */
// {0, 900,   900,   LED2_Blink},      /* task 1 Period: 600ms */

    {0, 10,    10,    KEY_Task},      /* task 1 Period: 600ms */

        {0, 500,   500,   TASK_1},      /* task 1 Period: 500ms */
        {0, 500,   500,   TASK_2},      /* task 1 Period: 500ms */
//        {0, 10,   10,   TASK_3},      /* task 1 Period: 500ms */


};

YangHY 发表于 2025-12-28 11:35:13

编译连接下载后

串口已经接受到数据

YangHY 发表于 2025-12-28 11:36:28

把接口设置好:

YangHY 发表于 2025-12-28 11:37:17

接着打开虚拟擎天柱:

YangHY 发表于 2025-12-28 11:38:21

先在串口核对一下数据:


04是指P2端口: 0000 100


YangHY 发表于 2025-12-28 11:41:48

流水灯:

u8 P2_STATE = 0X01;

u8 P10_STATE = 0;

// 任务1:P2口流水灯,P10闪烁
void TASK_1( void )
{
       
// ----------------------- p2端口流水灯        -----------------------
        LED40_SetPort(2,~P2_STATE);                        //点亮P20端口,这个是点亮虚拟的
    P2 = P2_STATE;//点亮“擎天柱”,这个是点亮实体的

        P2_STATE = (P2_STATE<<1);                        //1000 0000 -> 1 0000 0000
        if( P2_STATE == 0 )
                P2_STATE = 1;
       
// ----------------------- p10端口闪烁        -----------------------       
        if( P10_STATE == 0 )
                LED40_SetBit(1,0);//P10端口输出高电平
        else
                LED40_ClrBit(1,0);//P10端口输出低电平
       
        P10_STATE = !P10_STATE;
}

页: 29 30 31 32 33 34 35 36 37 38 [39] 40 41 42 43 44 45 46 47 48
查看完整版本: 第一课 序言《AI8051U的特点》