YangHY 发表于 2025-12-28 13:08:51

按下P32:

数码管从0变成10000

YangHY 发表于 2025-12-28 13:09:28

接着按P32:

YangHY 发表于 2025-12-28 13:10:13

再按P33:

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

其实功能1和功能4都可以实现这个功能

YangHY 发表于 2025-12-28 13:12:41

接着看虚拟键盘:

YangHY 发表于 2025-12-28 13:15:14

任务3:按下数字按键在数码管显示对应的按键数字!
例:按下按键0数码管显示0;

先完成显示任务:

u32 REC_NUM = 0;

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

YangHY 发表于 2025-12-28 13:23:32

REC_NUM怎么得到?

看main.c里USB_CDC:

void main(void)
{
      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)                                                      //如果接收到了数据
      {
                        REC_NUM = UsbOutBuffer-48;
         // USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                        
            usb_OUT_done();                                                      //
      }
                Task_Pro_Handler_Callback();                              //执行功能函数

      }
}

注意:

REC_NUM是在io.c里定义:

u32 REC_NUM = 0;


主函数中一定要extern u32 REC_NUM;


extern u32 REC_NUM;//此变量是在io.c建立,但本文件也要用,这里后面不能加=

YangHY 发表于 2025-12-28 13:31:05

接受的数据是第5个:

其实是第6个字节(从0开始数)

YangHY 发表于 2025-12-28 13:33:14

声明:





后调用:


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},      //10ms运行一次按键检测函数

        {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 13:35:17

这里还有个ASCII码的问题:
-48后就OK
页: 31 32 33 34 35 36 37 38 39 40 [41] 42 43 44 45 46 47 48 49 50
查看完整版本: 第一课 序言《AI8051U的特点》