找回密码
 立即注册
楼主: 陈笑笑

打卡!跟着冲天哥学习AI8051U的第Day 1!

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:274
  • 最近打卡:2025-05-06 08:31:59
已绑定手机

10

主题

16

回帖

801

积分

高级会员

积分
801
发表于 2025-1-4 09:01:44 | 显示全部楼层
陈*** 发表于 2024-11-23 23:51
打卡!跟着冲天哥学习AI8051U的第Day 2!

知识点:

任务:点亮一颗LED


1.准备工作:新建一个工程


1.1.打开keil
1.2.选择 project    new project
1.3.选择“AI8051U”型号
1.3.新建源文件“Main.c”

2.设置CPU模式



3.添加头文件
知识点:(<>表示从keil目录查找添加,""表示从工程目录查找添加)

4.开始实验(由于手上没有板子,只能模拟一下步骤)




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-05-06 14:43:53

25

主题

1157

回帖

2401

积分

超级版主

积分
2401
发表于 2025-1-6 10:35:51 | 显示全部楼层
打卡!跟着冲天哥学习AI8051U的第Day 3!

任务:点亮一颗LED
1.准备工作:新建一个工程


1.1.打开keil
1.2.选择 project    new project
1.3.选择“AI8051U”型号
1.3.新建源文件“Main.c”

2.设置CPU模式

3.添加头文件
知识点:(<>表示从keil目录查找添加,""表示从工程目录查找添加)

4.开始实验(由于手上没有板子,只能模拟一下步骤)




STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-05-06 14:43:53

25

主题

1157

回帖

2401

积分

超级版主

积分
2401
发表于 2025-1-6 10:36:38 | 显示全部楼层
打卡!跟着冲天哥学习AI8051U的第Day 4!

1.USB不停电下载配置步骤




2.学习步骤




3.交作业

3.1知识点:(STC_USB_CDC 功能可以实现不停电下载,不用再去冷启动下载,很方便!很实用的功能!)

3.2代码: 2-STC_USB.7z

STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-05-06 14:43:53

25

主题

1157

回帖

2401

积分

超级版主

积分
2401
发表于 2025-1-6 10:53:07 | 显示全部楼层
打卡!跟着冲天哥学习AI8051U的第Day 5!

C语言学习


1.知识点




















2.总结:(注意点:变量的运算要注意位数,不然会溢出)
  • #include <AI8051U.H>        //AI8051U头文件
  • #include "STC32_STC8_USB.H"        //TSC_USB头文件
  • /* 8 位无符号变量,范围:(0-255) */
  • #define uint8_t unsigned                 char
  • /* 16位无符号变量,范围:(0-65535) */
  • #define uint16_t unsigned short int
  • /* 32位无符号变量,范围:(0-4294967295) */
  • #define uint32_t unsigned long  int
  • char *USER_DEVICEDESC = NULL;
  • char *USER_PRODUCTDESC = NULL;
  • char *USER_STCISPCMD = "@STCISP#";
  • void main(void)                        //主函数
  • {
  •         //只执行一次
  •         /* 允许访问扩展特殊功能寄存器 */
  •         P_SW2 |= 0x80;
  •         /* 配置GPIO 模式 */
  •         P0M0 = 0X00;        P0M1 = 0X00;
  •         P4M1 = 0X00;        P4M1 = 0X00;
  •         /* 打开流水灯供电 */
  •         P40 = 0;
  •         /* 初始化USB */
  •         usb_init();
  •         /* 开启USB中断 */
  •         IE2 |= 0x80;
  •         /* 开启全局总中断 */
  •         EA = 1;
  •         /* 等待USB完成配置 */
  •         while(DeviceState != DEVSTATE_CONFIGURED);
  •         while(1)
  •         {
  •         //LOOP
  •                 /* 判断USB是否接收到了数据 */
  •                 if(bUsbOutReady)
  •         {
  •                         /* 发送数据缓冲区,长度(接收数据原样返回, 用于测试) */
  •                         //USB_SendData(UsbOutBuffer,OutNumber);
  •                         /* 通过USB返回数据 */
  •                         printf("STC_USB_TEXT\r\n");
  •                         usb_OUT_done();
  •         }
  •                 /* 打开P00的LED */
  •                 P00 = 0;
  •         }
  • }
3.推荐一个学习C语言的PDF
13万字C语言保姆级教程(极客江南出品).pdf
STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-05-06 14:43:53

25

主题

1157

回帖

2401

积分

超级版主

积分
2401
发表于 2025-1-6 10:53:57 | 显示全部楼层
打卡!跟着冲天哥学习AI8051U的第Day 6!

学习AI8051U的GPIO!


1.任务点


1.1.什么是GPIO


1.2.GPIO模式


1.3.GPIO端口的施密特触发器


1.4.按键输入检测


1.5.按键抖动(一般抖动在20ms以内)




2.交作业
  • #include <AI8051U.H>        //AI8051U头文件
  • #include "STC32_STC8_USB.H"        //TSC_USB头文件
  • #include <intrins.h>
  • char *USER_DEVICEDESC = NULL;
  • char *USER_PRODUCTDESC = NULL;
  • char *USER_STCISPCMD = "@STCISP#";
  • void Delay20ms(void)        //@24.000MHz
  • {
  •         unsigned long edata i;
  •         _nop_();
  •         _nop_();
  •         i = 119998UL;
  •         while (i) i--;
  • }
  • void main(void)                        //主函数
  • {
  •         //只执行一次
  •         unsigned char  i = 0;
  •         /* 允许访问扩展特殊功能寄存器 */
  •         //P_SW2 |= 0x80;
  •         /* 设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快 */
  •         WTST = 0;
  •         /* 扩展寄存器(XFR)访问使能 */
  •     EAXFR = 1;
  •         /* 提高访问XRAM速度 */
  •     CKCON = 0;
  •         /* 配置 GPIO 模式 */
  •         P0M0 = 0X00;        P0M1 = 0X00;
  •         P3M0 = 0X00;        P3M1 = 0X00;
  •         P4M1 = 0X00;        P4M1 = 0X00;
  •         /* 初始化USB */
  •         usb_init();
  •         /* 开启USB中断 */
  •         IE2 |= 0x80;
  •         /* 开启全局总中断 */
  •     EA = 1;
  •         /* 等待USB完成配置 */
  •         while(DeviceState != DEVSTATE_CONFIGURED);
  •         /* 打开总LED电源 */
  •         P40 = 0;
  •         while(1)
  •         {
  •         //LOOP
  •                 if(bUsbOutReady)
  •         {
  •                         /* 发送数据缓冲区,长度(接收数据原样返回, 用于测试) */
  •                         USB_SendData(UsbOutBuffer,OutNumber);
  •                         usb_OUT_done();
  •         }
  • #if 0               
  •                 /* 判断P32按键是否为0 '0'灯亮,'1'灯灭 */
  •                 if(P32 == 0) { P00 = 0; }
  •                 else                  { P00 = 1; }
  • #endif
  • #if 0               
  •                 /* 判断P32按键是否为1 '0'灯亮,'1'灯灭 */
  •                 if(P32 == 1) { P00 = 0; }
  •                 else                  { P00 = 1; }
  • #endif
  • #if 0               
  •                 /* 判断P32按键是否为1 '0'灯亮,'1'灯灭 */
  •                 if(P32 == 0) { P00 = !P00; }
  •                 /* 等待P32松开 */
  •                 while(!P32);
  • #endif
  • #if 0               
  •                 /* 判断P32按键是否为1 '0'灯亮,'1'灯灭 */
  •                 if(P32 == 0)
  •                 {
  •                         /* 消抖 */
  •                         Delay20ms();
  •                         if(P32 == 0)
  •                         {
  •                                 /* 对P00进行取反 */
  •                                 P00 = !P00;
  •                                 /* 等待P32松开 */
  •                                 while(!P32);
  •                         }
  •                 }
  • #endif
  • #if 0               
  •                 /* 判断P32按键是否为1 '0'灯亮,'1'灯灭 */
  •                 if(P32 == 0)
  •                 {
  •                         /* 消抖 */
  •                         Delay20ms();
  •                         if(P32 == 0)
  •                         {
  •                                 /* 亮 */
  •                                 P00 = 0;
  •                                 /* 等待P32松开 */
  •                                 while(!P32);
  •                         }
  •                 }
  •                 /* 判断P32按键是否为1 '0'灯亮,'1'灯灭 */
  •                 if(P33 == 0)
  •                 {
  •                         /* 消抖 */
  •                         Delay20ms();
  •                         if(P33 == 0)
  •                         {
  •                                 /* 灭 */
  •                                 P00 = 1;
  •                                 /* 等待P32松开 */
  •                                 while(!P33);
  •                         }
  •                 }
  • #endif
  • #if 1        
  •                 P0 = 0XFF;
  •                 /* 判断P32按键是否为1 '0'灯亮,'1'灯灭 */
  •                 if(P32 == 0)
  •                 {
  •                         /* 消抖 */
  •                         Delay20ms();
  •                         if(P32 == 0)
  •                         {
  •                                 /* 每次LED进行加一 */
  •                                 P0 = (P0<<1);
  •                                 /* 等待P32松开 */
  •                                 while(!P32);
  •                         }
  •                 }
  • #endif
  •         }
  • }


STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-05-06 14:43:53

25

主题

1157

回帖

2401

积分

超级版主

积分
2401
发表于 2025-1-6 10:55:43 | 显示全部楼层
打卡!跟着冲天哥学习AI8051U的第Day 7!

学习AI8051U的定时器!

1.定时器的介绍



2.定时器的作用



3.用ISP生成定时器配置代码(注意一定要勾选定时器中断)



4.定时器的应用



5.函数的声明定义调用



6.交作业
  • #include <AI8051U.H>        //AI8051U头文件
  • #include "STC32_STC8_USB.H"        //TSC_USB头文件
  • #include <intrins.h>
  • char *USER_DEVICEDESC = NULL;
  • char *USER_PRODUCTDESC = NULL;
  • char *USER_STCISPCMD = "@STCISP#";
  • bit Run_State = 0;
  • void Delay20ms(void)        //@24.000MHz
  • {
  •         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中断
  • }
  • void main(void)                        //主函数
  • {
  •         //只执行一次
  •         unsigned char  i = 0;
  •         /* 允许访问扩展特殊功能寄存器 */
  •         //P_SW2 |= 0x80;
  •         /* 设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快 */
  •         WTST = 0;
  •         /* 扩展寄存器(XFR)访问使能 */
  •     EAXFR = 1;
  •         /* 提高访问XRAM速度 */
  •     CKCON = 0;
  •         /* 配置 GPIO 模式 */
  •         P0M0 = 0X00;        P0M1 = 0X00;
  •         P3M0 = 0X00;        P3M1 = 0X00;
  •         P4M1 = 0X00;        P4M1 = 0X00;
  •         /* 初始化定时器0 */
  •         //Timer0_Init();
  •         /* 初始化USB */
  •         usb_init();
  •         /* 开启USB中断 */
  •         IE2 |= 0x80;
  •         /* 开启全局总中断 */
  •     EA = 1;
  •         /* 等待USB完成配置 */
  •         while(DeviceState != DEVSTATE_CONFIGURED);
  •         /* 打开总LED电源 */
  •         P40 = 0;
  •         while(1)
  •         {
  •         //LOOP
  •                 if(bUsbOutReady)
  •         {
  •                         /* 发送数据缓冲区,长度(接收数据原样返回, 用于测试) */
  •                         USB_SendData(UsbOutBuffer,OutNumber);
  •                         usb_OUT_done();
  •         }
  • #if 1        
  •                 P0 = 0XFF;
  •                 /* 判断P32按键是否为1 '0'灯亮,'1'灯灭 */
  •                 if(P32 == 0)
  •                 {
  •                         /* 消抖 */
  •                         Delay20ms();
  •                         if(P32 == 0)
  •                         {
  •                                 Run_State = !Run_State;
  •                                 if(Run_State == 1)
  •                                 {
  •                                         Timer0_Init();
  •                                 }
  •                                 else
  •                                 {
  •                                         /* 关闭定时器 */
  •                                         TR0 = 0;
  •                                         P00 = 1;
  •                                         P01 = 1;
  •                                 }
  • //                                /* 灯亮 */
  • //                                P00 = 0;
  • //                                
  • //                                /* 开启定时器 */
  • //                                TR0 = 0;
  •                                 /* 等待P32松开 */
  •                                 while(!P32);
  •                         }
  •                 }
  • #endif
  •         }
  • }
  • void Timer0_Isr(void) interrupt 1
  • {
  •         P00 = !P00;
  •         P01 = !P00;
  •         //P00 = !P00;
  •         /* 关闭定时器 */
  •         //TR0 = 0;
  • }


STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-05-06 14:43:53

25

主题

1157

回帖

2401

积分

超级版主

积分
2401
发表于 2025-1-6 10:56:15 | 显示全部楼层
打卡!跟着冲天哥学习AI8051U的第Day 8!

学习AI8051定时器任务调度方法!

1.周期性任务介绍





2.(.c/.h)文件创建



3.结构体数组的周期性任务调度(重点!)



Task.c
  • static TASK_COMPONENTS Task_Comps[]=
  • {
  • //状态  计数  周期  函数
  •     {0, 1,   1,   Sample_Display},      /* task 1 Period: 1ms */
  •     {0, 10,  10,  Sample_MatrixKey},    /* task 2 Period: 10ms */
  •     {0, 10,  10,  Sample_adcKey},       /* task 3 Period: 10ms */
  •     {0, 300, 300, Sample_NTC},          /* task 4 Period: 300ms */
  •     {0, 500, 500, Sample_RTC},          /* task 5 Period: 500ms */
  •     /* Add new task here */
  • };
  • u8 Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps[0]);
  • //========================================================================
  • // 函数: Task_Handler_Callback
  • // 描述: 任务标记回调函数.
  • // 参数: None.
  • // 返回: None.
  • // 版本: V1.0, 2012-10-22
  • //========================================================================
  • void Task_Marks_Handler_Callback(void)
  • {
  •     u8 i;
  •     for(i=0; i<Tasks_Max; i++)
  •     {
  •         if(Task_Comps.TIMCount)      /* If the time is not 0 */
  •         {
  •             Task_Comps.TIMCount--;   /* Time counter decrement */
  •             if(Task_Comps.TIMCount == 0) /* If time arrives */
  •             {
  •                 /*Resume the timer value and try again */
  •                 Task_Comps.TIMCount = Task_Comps.TRITime;
  •                 Task_Comps.Run = 1;      /* The task can be run */
  •             }
  •         }
  •     }
  • }
  • //========================================================================
  • // 函数: Task_Pro_Handler_Callback
  • // 描述: 任务处理回调函数.
  • // 参数: None.
  • // 返回: None.
  • // 版本: V1.0, 2012-10-22
  • //========================================================================
  • void Task_Pro_Handler_Callback(void)
  • {
  •     u8 i;
  •     for(i=0; i<Tasks_Max; i++)
  •     {
  •         if(Task_Comps.Run) /* If task can be run */
  •         {
  •             Task_Comps.Run = 0;      /* Flag clear 0 */
  •             Task_Comps.TaskHook();   /* Run task */
  •         }
  •     }
  • }


复制代码
Task.h
  • #ifndef __TASK_H_
  • #define __TASK_H_
  • #include "config.h"
  • //========================================================================
  • //                               本地变量声明
  • //========================================================================
  • typedef struct
  • {
  •         u8 Run;               //任务状态:Run/Stop
  •         u16 TIMCount;         //定时计数器
  •         u16 TRITime;          //重载计数器
  •         void (*TaskHook) (void); //任务函数
  • } TASK_COMPONENTS;
  • //========================================================================
  • //                             外部函数和变量声明
  • //========================================================================
  • void Task_Marks_Handler_Callback(void);
  • void Task_Pro_Handler_Callback(void);
  • #endif

STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-6 22:03 , Processed in 0.117645 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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