YangHY 发表于 2026-1-18 17:28:55

先看DIP40接口的LED怎么用?

YangHY 发表于 2026-1-18 17:31:15

命令头的含义:

YangHY 发表于 2026-1-18 17:34:11

这个适合我们的擎天柱出场:

YangHY 发表于 2026-1-18 17:36:31

直接写出调用函数:

void PLED_40(void)
{
        u8 cod;
        cod = 0x0f;                //表示开启P0-P3
        cod = 0X01;                //P0端口       
        cod = 0X01;                //P1
        cod = T_NUM;                //P2
//cod = ~T_NUM;                //P2
        cod = 0X01;                //P3
        LED40_SendData( cod,5 ); //这个函数在USB库里
//说明在STC32_STC8_USB.H里,详见:
//void LED40_SendData(BYTE *dat, BYTE size):
//2个参数,第一个是数组名字,第二个是成员数量
       
        P2 = T_NUM;
//P2 = ~T_NUM;       
        state_now++;
        if( state_now>7 )
                state_now = 0;
}

YangHY 发表于 2026-1-18 17:38:34

记得在io.h里声明:

#include "config.h"                        //调用头文件

//#define 引脚名称PXX的端口定义

#define HC595_SER         P34
#define HC595_RCK         P35
#define HC595_SCK         P32

void LED0_Blink(void);
void LED1_Blink(void);
void LED2_Blink(void);

void KEY_Task(void);

//---------------------------------595控制函数---------------------------------
void Init_595(void);
void Send_595( u8 dat );
void Display_Seg(u8 HC595_1,u8 HC595_2);
void Seg_Task(void);

//以下1行任务四才启用
void TIMECOUNT_Task(void);
void PLED_40(void);
void SEG_PC( void );
       
#endif

YangHY 发表于 2026-1-18 17:39:45

还是1秒调用1次:
static TASK_COMPONENTS Task_Comps[]=
{
//状态计数周期函数
       
{0,    1 ,1   ,   Seg_Task},      /* task 1 Period: 1ms扫描一次数码管 */
{0,1000,1000,   TIMECOUNT_Task},   /* task 1 Period: 1s调用计时一次 */
{0,1000,1000,   PLED_40},   /* task 1 Period:1s调用一次 */   
{0,1000,1000,   SEG_PC},   /* task 1 Period: 1s调用一次 */   

};

YangHY 发表于 2026-1-18 17:45:56

下面是试验箱的流水灯+USD-CDC调试接口显示
        u8 cod;
        cod = 0x0f;                //表示开启P0-P3
        cod = ~T_NUM;                //P0端口       
        cod = 0X01;                //P1
        cod = 0X01;                //P2
        cod = 0X01;                //P3
        LED40_SendData( cod,5 );
       
        P0 = ~T_NUM;
       
        state_now++;
        if( state_now>7 )
                state_now = 0;

YangHY 发表于 2026-1-18 17:48:28

接着看虚拟数码管:

YangHY 发表于 2026-1-18 17:50:14

也是先写驱动函数:
void SEG_PC( void )
{
        u8 cod;
       

        cod = SEG_NUM;                                        //小时的十位数的数码管段码
        cod = SEG_NUM;
        cod =SEG_NUM;                                                //数码管刷段码和位码

        cod = SEG_NUM;                                        //分钟
        cod = SEG_NUM;
        cod =SEG_NUM;                                                //数码管刷段码和位码       

        cod = SEG_NUM;                                        //分钟
        cod = SEG_NUM;
       
        SEG7_ShowCode(cod);
//说明在STC32_STC8_USB.H里,详见:
//void SEG7_ShowCode(BYTE *cod);
//1个参数,是个8位数组名字

}

YangHY 发表于 2026-1-18 17:56:56

这样虚拟的数码管和LED都可以使用了:
页: 60 61 62 63 64 65 66 67 68 69 [70] 71 72 73 74 75 76 77 78 79
查看完整版本: 第一课 序言《AI8051U的特点》