找回密码
 立即注册
查看: 282|回复: 8

学习《8051U深度入门到32位51大型实战教学视频》打卡

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-12-04 08:32:00
已绑定手机

2

主题

6

回帖

75

积分

注册会员

积分
75
发表于 2025-11-1 11:38:31 | 显示全部楼层 |阅读模式
第三集:点亮第一个LED
代码:
#include "Ai8051U.h" //调用头文件

void main(void) //主函数
{
        P0M0=0; //P0端口(P00-P07)为准双向口
        P0M1=0;
        P4M0=0; //P4端口为准双向口
        P4M1=0;
        
        while(1)
        {
                P40=0;       //P40端口输出0V
                P00=0;         //P00端口输出0V
                P01=0;         //P01端口输出0V
        }
}
[/url]
截图202511011135075264.jpg
截图202511011135148152.jpg

03.zip

44.7 KB, 下载次数: 4

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:281
  • 最近打卡:2026-02-04 10:17:57

16

主题

760

回帖

3776

积分

超级版主

积分
3776
发表于 2025-11-1 11:40:45 | 显示全部楼层
推荐优先看printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-12-04 08:32:00
已绑定手机

2

主题

6

回帖

75

积分

注册会员

积分
75
发表于 2025-11-5 17:25:10 | 显示全部楼层
第四集:USB不停电下载

代码:

#include "Ai8051U.h"   //调用头文件
#include "stc32_stc8_usb.h"  //调用头文件

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

void main(void) //主函数
{
    P_SW2 |= 0x80;     //B7位写1,使能访问XFR        
      
    P0M1 = 0x00;   P0M0 = 0x00;
    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();                                    

    IE2 |= 0x80;                                    
    EA = 1;                                                                                       
      
    while (DeviceState != DEVSTATE_CONFIGURED);     
      
    while(1)
    {
               
        if (bUsbOutReady)
        {
            USB_SendData(UsbOutBuffer,OutNumber);   
            
            usb_OUT_done();
        }
               
                P40 = 0;                                    
                P00 = 0;  
                P02 = 0;               
                //P01 = 0;               
        }
}
截图202511051724399444.jpg
截图202511051724488328.jpg

04.zip

2.23 MB, 下载次数: 2

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-12-04 08:32:00
已绑定手机

2

主题

6

回帖

75

积分

注册会员

积分
75
发表于 2025-11-15 11:57:37 | 显示全部楼层
第五集:C语言基础
代码:
#include "ai8051u.h"                        //调用头文件
#include "stc32_stc8_usb.h"                //调用头文件

#define u8 unsigned char
#define u16 unsigned int

u8 X = 200;  //初始状态
u8 Y = 10;  //初始状态

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

void main(void)
{
    P_SW2 |= 0x80;                //B7位写1,使能访问XFR
       
    P0M1 = 0x00;   P0M0 = 0x00;
    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);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            if( X && Y )
                        {
                                printf("条件为真");
                        }
                        else
                        {
                                printf("条件为假");
                        }
                    //printf("X / Y =%u \r\n",(u16)(X/Y));
                        //printf("X %% Y =%u \r\n",(u16)(X%Y));
            usb_OUT_done();                                                       
        }
               
                //P40 = 0;        //P40端口输出0V
                //P00 = 0;        //P00端口输出0V
                //P02 = 0;        //P02端口输出0V
                //P01 = 0;        //P01端口输出0V
        }
}


截图202511151156181190.jpg
截图202511151156385679.jpg
截图202511151156478620.jpg

05.C语言基础.zip

87.87 KB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-12-04 08:32:00
已绑定手机

2

主题

6

回帖

75

积分

注册会员

积分
75
发表于 2025-11-19 11:19:40 | 显示全部楼层
第六集: I/O输入输出
代码:
#include "ai8051u.h"                                //调用头文件
#include "stc32_stc8_usb.h"                //调用头文件

#define u8 unsigned char
#define u16 unsigned int

u8 state = 0;                                         //初始状态

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

void Delay20ms(void)        //@24.000MHz Delay20ms();
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 119998UL;
        while (i) i--;
}

void main(void)
{
    WTST = 0;                                                                                  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1;                                                                                 //扩展寄存器(XFR)访问使能
    CKCON = 0;                                                                                 //提高访问XRAM速度
                                                                                       
    P0M1 = 0x00;   P0M0 = 0x00;
    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;
       
        P40=0;
       
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
       
        while(1)
        {
               
        if (bUsbOutReady)                                                        //如果接收到了数据
        {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
           
            usb_OUT_done();                                                       
        }
               
//                //任务1:按下P32按钮灯亮,松开P32按钮灯灭;
//                if( P32 == 0 )                                                                    //判断按钮P32是否按下
//                {
//                        P00 = 0;
//                }
//                else
//                {
//                        P00 = 1;
//                }
//                //任务2:按下P32按钮灯灭,松开P32按钮灯亮;               
//                if( P32 == 0 )                                                                         //判断按钮P32是否按下
//                {
//                        P00 = 1;
//                }
//                else
//                {
//                        P00 = 0;
//                }
                //任务3:按一下灯亮,按一下灯灭;                                       
                if( P32 == 0 )                                                                         //判断按钮P32是否按下
                {
                        Delay20ms();                                //延时20ms消抖
                        if(P32 == 0)
                        {
                                state = !state;                                                                //变量取反 0 1 0 1 0 1
                                P00 = state;
                                printf("state:%d\r\n",(int)state);
                                while( P32 == 0 );                          //等待P32松开
                        }
                }

        }
}
06.zip (89.42 KB, 下载次数: 1)
截图202511191115201423.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-12-04 08:32:00
已绑定手机

2

主题

6

回帖

75

积分

注册会员

积分
75
发表于 2025-11-19 14:27:04 | 显示全部楼层
第7集:定时器中断

代码:#include "ai8051u.h"                        //调用头文件
#include "stc32_stc8_usb.h"                //调用头文件

#define u8 unsigned char
#define u16 unsigned int

u8 state = 0;                                         //初始状态
u8 Run_State = 0;                                //运行状态

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

void Delay20ms(void)        //@24.000MHz Delay20ms();
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 119998UL;
        while (i) i--;
}

//void Timer0_Init(void)                //3秒@24.000MHz
//{
//        TM0PS = 0X5B;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
//        AUXR &= 0X7F;                        //定时器时钟12T模式
//        TMOD &= 0XF0;                        //设置定时器模式
//        TL0 = 0x3F;                                //设置定时初始值
//        TH0 = 0x01;                        //设置定时初始值
//        TF0 = 0;                                //清除TF0标志
//        TR0 = 1;                                //定时器0开始计时
//        ET0 = 1;                                //使能定时器0中断
//       
//        //TM0PS = 91
//        //12T    /12
//        //TH0-TL0 = 319
//}

void Timer0_Init(void)                //500微秒@24.000MHz
{
        AUXR |= 0x80;                        //定时器时钟1T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x20;                                //设置定时初始值
        TH0 = 0xD1;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
}


void main(void)
{
        int count=1;                                                                                //按键计数变量
        WTST = 0;                                                                                  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1;                                                                                 //扩展寄存器(XFR)访问使能
    CKCON = 0;                                                                                 //提高访问XRAM速度
                                                                                       
    P0M1 = 0x00;   P0M0 = 0x00;
    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中断
//        Timer0_Init( );                                                                        //定时器初始化
    EA = 1;                                                                                        //IE |= 0X80;
       
        P40=0;
       
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
       
        while(1)
        {
               
        if (bUsbOutReady)                                                        //如果接收到了数据
        {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
           
            usb_OUT_done();                                                       
        }
               

//                //任务1;                                       
//                if( P32 == 0 )                                                                         //判断按钮P32是否按下
//                {
//                        Delay20ms();                                //延时20ms消抖
//                        if(P32 == 0)
//                        {
//                                printf("按键按下次数\xfd:%d次\r\n",(int)count);
//                                count ++;
//                                while( P32 == 0 );                          //等待P32松开
//                        }
//                }
//                //任务2:灯按一下点亮三秒后熄灭                       
//                if( P32 == 0 )                                                                         //判断按钮P32是否按下
//                {
//                        Delay20ms();                                //延时20ms消抖
//                        if(P32 == 0)
//                        {
////                                printf("按键按下次数\xfd:%d次\r\n",(int)count);
////                                count ++;
//                                P00 = 0;
//                                Timer0_Init( );               
//                                while( P32 == 0 );                          //等待P32松开
//                        }
//                }
                //任务3:救护车灯控制器       
                if( P32 == 0 )                                                                         //判断按钮P32是否按下
                {
                        Delay20ms();                                //延时20ms消抖
                        if( P32 == 0 )
                        {
                                Run_State = !Run_State;                                        //运行状态取反
                                if(Run_State == 1)                       //运行
                                {
                                        Timer0_Init();                                                //关闭定时器
                                }
                                else
                                {
                                        TR0 = 0;
                                        P00 = 1;
                                        P01 = 1;
                                }
//                                P00 = 0;
//                                Timer0_Init();               
                                while( P32 == 0 );                          //等待P32松开
                        }
                }
        }
}
void Timer0_Isr(void) interrupt 1                                 //3s执行一次
{
                state = !state;                                                               
                P00 = state;
            P01 = !state;                                                                                        //定时器0关闭计时
}

截图202511191425412574.jpg

07.zip

92.11 KB, 下载次数: 2

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-12-04 08:32:00
已绑定手机

2

主题

6

回帖

75

积分

注册会员

积分
75
发表于 2025-11-22 11:31:43 | 显示全部楼层

第八集:
代码:
#include "config.h"       
#include "task.h"       

u8 State1 = 0;                                        //LED1初始状态
u8 State2= 0;                                  //LED2初始状态
u8 State3= 0;                                         //LED3初始状态

u8 State[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 i;
//State [0]=

u16 Key_Vol = 0;
u8 num = 0;

//u16 Count_300 = 0;                                //计数300ms变量
//u16 Count_600 = 0;                                //计数600ms变量
//u16 Count_900 = 0;                                //计数900ms变量

u16 Count_ms[3]={0,0,0};            //三个计时变量
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";


void Delay10ms(void)        //@24.000MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        _nop_();
        i = 59998UL;
        while (i) i--;
}


void main(void)
{
        int count=1;                                                                        //按键计数变量
        Sys_init();
        usb_init();                                     //USB CDC 接口配置

    IE2 |= 0x80;                                    //使能USB中断
        Timer0_Init( );                                                                        //定时器初始化
    EA = 1;                                                                                        //IE |= 0X80;
       
        P40=0;
       
        while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
       
        while(1)
        {
               
        if (bUsbOutReady)                                                        //如果接收到了数据
        {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            usb_OUT_done();                                                       
        }

//                if( Count_ms[0] >=500 )                                                //500ms执行一次
//                {
//                        Count_ms[0] = 0;
//                        P0 = ~State[ num ];                      //0-7
//                        num ++;
//                        if( num >7)
//                        {
//                                num = 0;
//                        }
                       
                        P0 = ~State[ num ];                      //0-7  
                       
                        if( P32==0 )
                        {
                                Delay10ms();
                                if(P32 == 0 )
                                {
                                        while(P32 == 0 );
                                        num ++;
                                }
                        }       
                if( Count_ms[1] >=1000 )                                                //1000ms执行一次
                {
                        Count_ms[1] = 0;
                        printf("AI8051U\r\n");
                }
                if( Count_ms[2] >=10 )                                                //10ms执行一次
                {
                        Count_ms[2] = 0;
                        if( P32==0 )                                                        //按键按下
                        {
                                Key_Vol ++;
                                if( Key_Vol == 5 )
                                        {
                                                num ++;
                                        }
                        }
                        else
                        {
                                Key_Vol = 0;
                        }
                }       
        }
}



void Timer0_Isr(void) interrupt 1                                 //1ms执行一次
{
         Task_Marks_Handler_Callback(void);
}

截图202511221130041389.jpg

微信视频2025-11-22_113015_833.mp4

475.1 KB, 下载次数: 1

微信视频2025-11-22_113047_713.mp4

503.72 KB, 下载次数: 1

示例代码.rar

99.64 KB, 下载次数: 1

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-12-04 08:32:00
已绑定手机

2

主题

6

回帖

75

积分

注册会员

积分
75
发表于 2025-11-25 16:04:34 | 显示全部楼层
第九集:数码管

代码:

#include "io.h"

u8 SEG_NUM[]=
{
    0x3F,       /*'0', 0*/
    0x06,       /*'1', 1*/
    0x5B,       /*'2', 2*/
    0x4F,       /*'3', 3*/
    0x66,       /*'4', 4*/
    0x6D,       /*'5', 5*/
    0x7D,       /*'6', 6*/
    0x07,       /*'7', 7*/
    0x7F,       /*'8', 8*/
    0x6F,       /*'9', 9*/
    0x77,       /*'A', 10*/
    0x7C,       /*'B', 11*/
    0x39,       /*'C', 12*/
    0x5E,       /*'D', 13*/
    0x79,       /*'E', 14*/
    0x71,       /*'F', 15*/
    0x40,       /*'-', 16*/
    0x00,       /*' ', 17*/
    0x80,       /*'.', 18*/
};

u8 T_NUM[8] =
{
        0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80
};


u8 State1 = 0;                                        //LED1初始状态
u8 State2 = 0;                                        //LED2初始状态
u8 State3 = 0;                                        //LED3初始状态

u16 Key_Vol[3] ;                                //按键按下持续时间

void LED0_Blink(void)
{
        State1 = !State1;
        P00 = State1;
}

void LED1_Blink(void)
{
        State2 = !State2;
        P01 = State2;
}

void LED2_Blink(void)
{
        State3 = !State3;
        P02 = State3;
}

void KEY_Task(void)
{
//        if( P32 == 0 )
//        {
//                Key_Vol[0]++;
//                if( Key_Vol==5 )
//                {
//                        //按键按下的任务
//                        printf( "按键单击\r\n" );
//                }
//        }
//        else
//        {
//                Key_Vol = 0;
//        }
}
       

void Init_595(void)
{
        HC595_SER = 0;
        HC595_RCK = 0;
        HC595_SCK = 0;       
}
       


void Send_595( u8 dat )
{
        u8 i;
       
        for( i=0;i<8;i++ )
        {
                dat <<= 1;                                //DAT = (DAT<<1);        //CY
                HC595_SER = CY;                //先把数据写到引脚上
                HC595_SCK = 1;                        //输出上升沿的时钟信号
                HC595_SCK = 0;
        }
}

void Display_Seg(u8 HC595_1,u8 HC595_2)
{
        Send_595(HC595_1);                        //数码管段码输出  高电平点亮
        Send_595(HC595_2);                        //数码管位码      低电平点亮
       
        HC595_RCK = 1;                                //数据输出       
        HC595_RCK = 0;
}

u8 Seg_no = 0;
u8 shi  =0;
u8 fen  =0;
u8 miao =0;

void Seg_Task(void)
{
        u8 num = 0;
        if( Seg_no ==0 )                                                                //小时十位
        {
                num = shi/10;
                Display_Seg( SEG_NUM[num] , ~T_NUM[0]);                //数码管刷段码和位码
        }
        else if( Seg_no ==1 )                                                        //小时的个位
        {
                num = shi%10;
                Display_Seg( SEG_NUM[num] , ~T_NUM[1]);                //数码管刷段码和位码
        }       
        else if( Seg_no ==2 )                                                        //第一个横杠
        {
                Display_Seg( SEG_NUM[16] , ~T_NUM[2]);                //数码管刷段码和位码
        }       
        else if( Seg_no ==3 )                                                        //分钟的十位
        {
                num = fen/10;
                Display_Seg( SEG_NUM[num] , ~T_NUM[3]);                //数码管刷段码和位码
        }
        else if( Seg_no ==4 )
        {
                num = fen%10;
                Display_Seg( SEG_NUM[num] , ~T_NUM[4]);                //数码管刷段码和位码
        }       
        else if( Seg_no ==5 )
        {
                Display_Seg( SEG_NUM[16] , ~T_NUM[5]);                //数码管刷段码和位码
        }       
        else if( Seg_no ==6 )
        {
                num = miao/10;
                Display_Seg( SEG_NUM[num] , ~T_NUM[6]);                //数码管刷段码和位码
        }
        else if( Seg_no ==7 )
        {
                num = miao%10;
                Display_Seg( SEG_NUM[num] , ~T_NUM[7]);                //数码管刷段码和位码
        }       
        else
        {
               
        }
        Seg_no ++;
        if( Seg_no>7 )
                Seg_no=0;
}

void TIMECOUNT_Task(void)
{
        miao ++;
        if( miao>59 )
        {
                miao = 0;
                fen++;
                if( fen>59 )
                {
                        fen = 0;
                        shi ++;
                        if( shi>23 )
                                shi = 0;
                }
        }
}

u8 state_now = 0;


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

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

void SEG_PC( void )
{
        u8 cod[8];
       

        cod[0] = SEG_NUM[shi/10];                                        //小时的十位数的数码管段码
        cod[1] = SEG_NUM[shi%10];
        cod[2] =SEG_NUM[16];                                                //数码管刷段码和位码

        cod[3] = SEG_NUM[fen/10];                                        //分钟
        cod[4] = SEG_NUM[fen%10];
        cod[5] =SEG_NUM[16];                                                //数码管刷段码和位码       

        cod[6] = SEG_NUM[miao/10];                                        //分钟
        cod[7] = SEG_NUM[miao%10];
       
        SEG7_ShowCode(cod);
}


截图202511251603002113.jpg

微信视频2025-11-25_160239_001.mp4

285.46 KB, 下载次数: 1

微信视频2025-11-25_160348_988.mp4

353.52 KB, 下载次数: 1

微信视频2025-11-25_160356_019.mp4

502.86 KB, 下载次数: 0

09.zip

157.64 KB, 下载次数: 1

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-12-04 08:32:00
已绑定手机

2

主题

6

回帖

75

积分

注册会员

积分
75
发表于 2025-11-29 11:22:22 | 显示全部楼层
第十集:虚拟LED和数码管

代码:

#include "io.h"

u8 State1 = 0;                                        //LED1初始状态
u8 State2 = 0;                                        //LED2初始状态
u8 State3 = 0;                                        //LED3初始状态

u16 Key_Vol = 0;                                //按键按下持续时间
u16 Key_Vol_2 =0;
void LED0_Blink(void)
{
        State1 = !State1;
        P00 = State1;
}

void LED1_Blink(void)
{
        State2 = !State2;
        P01 = State2;
}

void LED2_Blink(void)
{
        State3 = !State3;
        P02 = State3;
}

u16 KEY1_COUNT = 0;                //P32按钮计数
u16 KEY2_COUNT = 0;                //P33按钮计数

void KEY_Task(void)
{
// ------------P32按钮计数------------       
        if( P32 == 0 )
        {
                Key_Vol++;
                if( Key_Vol==5 )
                {
                        KEY1_COUNT++;
                }
        }
        else
        {
                Key_Vol = 0;
        }
       
// ------------P33按钮计数------------               
        if( P33 == 0 )
        {
                Key_Vol_2++;
                if( Key_Vol_2==5 )
                {
                        KEY2_COUNT++;
                }
        }
        else
        {
                Key_Vol_2 = 0;
        }       
       
}

u8 P2_STATE = 0X01;

u8 P10_STATE = 0;

// 任务1:P2口流水灯,P10闪烁
void TASK_1( void )
{
       
// ----------------------- p2端口流水灯        -----------------------
        LED40_SetPort(2,~P2_STATE);                        //点亮P20端口
       
        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);
        else
                LED40_ClrBit(1,0);
       
        P10_STATE = !P10_STATE;
}

u32 KEY_Count = 0;

// 任务2:左边数码管显示P32按下次数, 右边数码管显示P33按下次数
void TASK_2( void )
{
        KEY_Count = KEY1_COUNT *10000 + KEY2_COUNT;
       
        SEG7_ShowLong( KEY_Count ,10);
       
}

u32 REC_NUM = 0;

// 任务3:按下数字按键在数码管显示对应的按键数字!
void TASK_3( void )
{
        SEG7_ShowLong( REC_NUM ,10);
}


截图202511291121541025.jpg
截图202511291122095186.jpg

10.zip

1.22 MB, 下载次数: 2

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-2-12 18:05 , Processed in 0.144386 second(s), 81 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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