找回密码
 立即注册
查看: 448|回复: 6

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

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:124
  • 最近打卡:2025-05-06 14:35:58

13

主题

431

回帖

2374

积分

超级版主

积分
2374
发表于 2024-12-30 11:18:08 | 显示全部楼层 |阅读模式
擎天柱学习记录,第3集:点亮LED灯

程序如下:
  1. #include "ai8051u.h"                //调用头文件
  2. //注意:擎天柱的LED端口在P2,且没有三极管的电源控制,所以只要控制P2端口即可
  3. void main(void)
  4. {
  5.         P2M0 = 0;                //P2端口(P20-P27)为准双向口
  6.         P2M1 = 0;
  7.        
  8.         while(1)
  9.         {
  10.                 P20 = 0;        //P20端口输出0V
  11.                 P21 = 0;        //P21端口输出0V
  12.         }
  13. }
复制代码
截图202412301112487134.jpg
擎天柱学习第3集:点亮LED灯.zip (30.83 KB, 下载次数: 24)

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:124
  • 最近打卡:2025-05-06 14:35:58

13

主题

431

回帖

2374

积分

超级版主

积分
2374
发表于 2024-12-31 10:05:45 | 显示全部楼层
擎天柱学习记录,第4集:USB不停电下载

程序如下:
  1. #include "ai8051u.h"                //调用头文件
  2. #include "AI_usb.h"
  3. char *USER_DEVICEDESC = NULL;
  4. char *USER_PRODUCTDESC = NULL;
  5. char *USER_STCISPCMD = "@STCISP#";
  6. //注意:擎天柱的LED端口在P2,且没有三极管的电源控制,所以只要控制P2端口即可
  7. void main(void)
  8. {
  9.     P_SW2 |= 0x80;                //B7位写1,使能访问XFR
  10.        
  11.     P0M1 = 0x00;   P0M0 = 0x00;
  12.     P1M1 = 0x00;   P1M0 = 0x00;
  13.     P2M1 = 0x00;   P2M0 = 0x00;
  14.     P3M1 = 0x00;   P3M0 = 0x00;
  15.     P4M1 = 0x00;   P4M0 = 0x00;
  16.     P5M1 = 0x00;   P5M0 = 0x00;
  17.     P6M1 = 0x00;   P6M0 = 0x00;
  18.     P7M1 = 0x00;   P7M0 = 0x00;
  19.        
  20.         usb_init();                                     //USB CDC 接口配置
  21.     IE2 |= 0x80;                                    //使能USB中断
  22.     EA = 1;                                                                                        //IE |= 0X80;
  23.        
  24.         while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  25.        
  26.         while(1)
  27.         {               
  28.         if (bUsbOutReady)
  29.         {
  30.             USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  31.             
  32.             usb_OUT_done();
  33.         }
  34.                
  35.                 P20 = 0;                                        //P00端口输出0V
  36.                 P21 = 0;                                        //P01端口输出0V
  37. //                P22 = 0;                                    //P02端口输出0V
  38.         }
  39. }
复制代码
截图202412311003333974.jpg
擎天柱学习第4集:USB不停电下载.zip (79.85 KB, 下载次数: 36)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:124
  • 最近打卡:2025-05-06 14:35:58

13

主题

431

回帖

2374

积分

超级版主

积分
2374
发表于 2024-12-31 13:44:56 | 显示全部楼层
擎天柱学习记录,第5集:C语言基础

程序如下:
  1. #include "ai8051u.h"                //调用头文件
  2. #include "AI_usb.h"
  3. #define u8 unsigned char      //8位无符号变量(0-255)
  4. #define u16 unsigned int      //16位无符号变量(0-65535)
  5. u8 X = 20;
  6. //u8 Y = 11;
  7. //u8 Y = 10;
  8. //u8 Y = 0;
  9. u8 Y = 10;
  10. char *USER_DEVICEDESC = NULL;
  11. char *USER_PRODUCTDESC = NULL;
  12. char *USER_STCISPCMD = "@STCISP#";
  13. //注意:擎天柱的LED端口在P2,且没有三极管的电源控制,所以只要控制P2端口即可
  14. void main(void)
  15. {
  16.     P_SW2 |= 0x80;                //B7位写1,使能访问XFR
  17.        
  18.     P0M1 = 0x00;   P0M0 = 0x00;
  19.     P1M1 = 0x00;   P1M0 = 0x00;
  20.     P2M1 = 0x00;   P2M0 = 0x00;
  21.     P3M1 = 0x00;   P3M0 = 0x00;
  22.     P4M1 = 0x00;   P4M0 = 0x00;
  23.     P5M1 = 0x00;   P5M0 = 0x00;
  24.     P6M1 = 0x00;   P6M0 = 0x00;
  25.     P7M1 = 0x00;   P7M0 = 0x00;
  26.        
  27.         usb_init();                                     //USB CDC 接口配置
  28.     IE2 |= 0x80;                                    //使能USB中断
  29.     EA = 1;                                                                                        //IE |= 0X80;
  30.        
  31.         while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  32.        
  33.         while(1)
  34.         {               
  35.         if (bUsbOutReady)
  36.         {
  37. //           USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  38.             
  39. //                        printf("STC YYDS\r\n");                  //串口打印——STC YYDS
  40.                        
  41. //                        printf("X / Y =%u\r\n",(u16)(X/Y));      //串口打印——X/Y=
  42. //                        printf("X %% Y =%u\r\n",(u16)(X%Y));     //串口打印——X%Y=
  43.                        
  44.                         if(X && Y)                               //如果条件为真,输出什么
  45.                         {                               
  46.                                 printf("条件为真\r\n");               
  47.                         }
  48.                         else
  49.                         {
  50.                                 printf("条件为假\r\n");       
  51.                         }
  52.             usb_OUT_done();
  53.         }
  54.         }
  55. }
复制代码
串口打印——STC YYDS
截图202412311343298783.jpg
串口打印——X/Y=和X%Y=
截图202412311343496773.jpg
截图202412311344059494.jpg
擎天柱学习第5集:C语言基础.zip (80.4 KB, 下载次数: 27)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:124
  • 最近打卡:2025-05-06 14:35:58

13

主题

431

回帖

2374

积分

超级版主

积分
2374
发表于 2024-12-31 15:05:29 | 显示全部楼层
擎天柱学习记录,第6集:IO输入输出

程序如下:
  1. #include "ai8051u.h"                //调用头文件
  2. #include "AI_usb.h"
  3. #include "intrins.h"
  4. #define u8 unsigned char      //8位无符号变量(0-255)
  5. #define u16 unsigned int      //16位无符号变量(0-65535)
  6. u8 state = 0;                 //初始状态
  7. char *USER_DEVICEDESC = NULL;
  8. char *USER_PRODUCTDESC = NULL;
  9. char *USER_STCISPCMD = "@STCISP#";
  10. void Delay20ms(void)        //@24.000MHz   Delay20ms();
  11. {
  12.         unsigned long edata i;
  13.         _nop_();
  14.         _nop_();
  15.         i = 119998UL;
  16.         while (i) i--;
  17. }
  18. //注意:擎天柱的LED端口在P2,且没有三极管的电源控制,所以只要控制P2端口即可
  19. void main(void)
  20. {
  21.     WTST = 0;                                  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  22.     EAXFR = 1;                                 //扩展寄存器(XFR)访问使能
  23.     CKCON = 0;                                 //提高访问XRAM速度
  24.         
  25.     P0M1 = 0x00;   P0M0 = 0x00;
  26.     P1M1 = 0x00;   P1M0 = 0x00;
  27.     P2M1 = 0x00;   P2M0 = 0x00;
  28.     P3M1 = 0x00;   P3M0 = 0x00;
  29.     P4M1 = 0x00;   P4M0 = 0x00;
  30.     P5M1 = 0x00;   P5M0 = 0x00;
  31.     P6M1 = 0x00;   P6M0 = 0x00;
  32.     P7M1 = 0x00;   P7M0 = 0x00;
  33.         
  34.         usb_init();                                     //USB CDC 接口配置
  35.     IE2 |= 0x80;                                    //使能USB中断
  36.     EA = 1;                                                                                        //IE |= 0X80;
  37.         
  38.         while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  39.         
  40.         while(1)
  41.         {               
  42.         if (bUsbOutReady)
  43.         {
  44. //           USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  45.             
  46.             usb_OUT_done();
  47.         }
  48. //                //任务1:按下P32按钮灯亮,松开P32按钮灯灭
  49. //                if(P32==0)
  50. //                {
  51. //                        P20=0;
  52. //                }
  53. //                else
  54. //                {
  55. //                        P20=1;
  56. //                }
  57. //                //任务2:按下P32按钮灯灭,松开P32按钮灯亮
  58. //                if(P32==0)
  59. //                {
  60. //                        P20=1;
  61. //                }
  62. //                else
  63. //                {
  64. //                        P20=0;
  65. //                }
  66. //                //任务3:按一下灯亮,按一下灯灭
  67. //                if(P32==0)
  68. //                {
  69. //                        Delay20ms();                       //延时20ms消抖
  70. //                        if(P32==0)
  71. //                        {
  72. //                                state =!state;                      //变量取反 0 1 0 1 0 1
  73. //                            P20=state;
  74. //                            printf("state:%d\r\n",(int)state);
  75. //                                while(P32==0);                      //等待P32松开
  76. //                        }                  
  77. //                }
  78.                 //课后任务1:按一下P32按钮灯亮,按一下P33按钮灯灭
  79.                 if(P32==0)
  80.                 {
  81.                         P20=0;
  82.                 }
  83.                 if(P33==0)
  84.                 {
  85.                         P20=1;
  86.                 }
  87.         }
  88. }
复制代码
任务1:按下P32按钮灯亮,松开P32按钮灯灭

任务2:按下P32按钮灯灭,松开P32按钮灯亮

任务3:按一下灯亮,按一下灯灭

课后任务1:按一下P32按钮灯亮,按一下P33按钮灯灭


擎天柱学习第6集:IO输入输出.zip (81.73 KB, 下载次数: 29)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:124
  • 最近打卡:2025-05-06 14:35:58

13

主题

431

回帖

2374

积分

超级版主

积分
2374
发表于 2025-1-2 15:12:04 | 显示全部楼层
擎天柱学习记录,第7集:定时器

程序如下:
  1. #include "ai8051u.h"                //调用头文件
  2. #include "AI_usb.h"
  3. #include "intrins.h"
  4. #define u8 unsigned char      //8位无符号变量(0-255)
  5. #define u16 unsigned int      //16位无符号变量(0-65535)
  6. u8 state = 0;                   //初始状态
  7. u8 Run_State = 0;                                //运行状态
  8. char *USER_DEVICEDESC = NULL;
  9. char *USER_PRODUCTDESC = NULL;
  10. char *USER_STCISPCMD = "@STCISP#";
  11. void Delay20ms(void)        //@24.000MHz   Delay20ms();
  12. {
  13.         unsigned long edata i;
  14.         _nop_();
  15.         _nop_();
  16.         i = 119998UL;
  17.         while (i) i--;
  18. }
  19. void Timer0_Init(void);                //3秒@24.000MHz                //函数声明
  20. void main(void)
  21. {
  22.         int count=1;                        //按键计数变量
  23.     WTST = 0;                                  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  24.     EAXFR = 1;                                 //扩展寄存器(XFR)访问使能
  25.     CKCON = 0;                                 //提高访问XRAM速度
  26.        
  27.     P0M1 = 0x00;   P0M0 = 0x00;
  28.     P1M1 = 0x00;   P1M0 = 0x00;
  29.     P2M1 = 0x00;   P2M0 = 0x00;
  30.     P3M1 = 0x00;   P3M0 = 0x00;
  31.     P4M1 = 0x00;   P4M0 = 0x00;
  32.     P5M1 = 0x00;   P5M0 = 0x00;
  33.     P6M1 = 0x00;   P6M0 = 0x00;
  34.     P7M1 = 0x00;   P7M0 = 0x00;
  35.        
  36.         usb_init();                                     //USB CDC 接口配置
  37.     IE2 |= 0x80;                                    //使能USB中断
  38. //        Timer0_Init();
  39.     EA = 1;                                                                                        //IE |= 0X80;
  40.        
  41.         while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  42.        
  43.         while(1)
  44.         {               
  45.         if (bUsbOutReady)
  46.         {
  47. //           USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  48.             
  49.             usb_OUT_done();
  50.         }
  51.                 //任务1:LED灯三秒取反一次,这期间任意时刻按下按钮,串口打印按键次数
  52. //                if( P32 == 0 )                                                                //判断P32按钮是否按下
  53. //                {
  54. //                        Delay20ms();                                                        //延时20ms消抖
  55. //                        if( P32 == 0 )
  56. //                        {
  57. //                                printf("按键按下次数\xfd:%d 次\r\n",(int)count);
  58. //                                count++;
  59. //                               
  60. //                                while( P32 == 0 );                                        //等待P32松开                               
  61. //                        }
  62. //                }
  63.                 //任务2:灯按一下点亮三秒后熄灭
  64. //                if( P32 == 0 )                                                                //判断P32按钮是否按下
  65. //                {
  66. //                        Delay20ms();                                                        //延时20ms消抖
  67. //                        if( P32 == 0 )
  68. //                        {
  69. //                                P20 = 0;
  70. //                                Timer0_Init();
  71. //                                while( P32 == 0 );                                        //等待P32松开                               
  72. //                        }
  73. //                }               
  74.                 //任务3:救护车灯控制器,按下报警按钮,红蓝交替闪烁(LED1和LED2表示红和蓝灯),再按一下报警按钮,红蓝灯停止
  75.                 if( P32 == 0 )                                                                //判断P32按钮是否按下
  76.                 {
  77.                         Delay20ms();                                                        //延时20ms消抖
  78.                         if( P32 == 0 )
  79.                         {
  80.                                 Run_State = !Run_State;                                //运行状态取反
  81.                                
  82.                                 if( Run_State==1 )                                        //运行
  83.                                 {
  84.                                         Timer0_Init();
  85.                                 }
  86.                                 else
  87.                                 {
  88.                                         TR0 = 0;                                                //关闭定时器
  89.                                         P20 = 1;
  90.                                         P21 = 1;
  91.                                 }
  92.                                 while( P32 == 0 );                                        //等待P32松开                               
  93.                         }
  94.                 }                               
  95.         }
  96. }
  97. //void Timer0_Init(void)                //3秒@24.000MHz        函数定义
  98. //{
  99. //        TM0PS = 0x5B;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
  100. //        AUXR &= 0x7F;                        //定时器时钟12T模式
  101. //        TMOD &= 0xF0;                        //设置定时器模式
  102. //        TL0 = 0x3F;                                //设置定时初始值
  103. //        TH0 = 0x01;                                //设置定时初始值
  104. //        TF0 = 0;                                //清除TF0标志
  105. //        TR0 = 1;                                //定时器0开始计时
  106. //        ET0 = 1;                                //使能定时器0中断
  107. //}
  108. void Timer0_Init(void)                //500毫秒@24.000MHz
  109. {
  110.         TM0PS = 0x0F;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
  111.         AUXR &= 0x7F;                        //定时器时钟12T模式
  112.         TMOD &= 0xF0;                        //设置定时器模式
  113.         TL0 = 0xDC;                                //设置定时初始值
  114.         TH0 = 0x0B;                                //设置定时初始值
  115.         TF0 = 0;                                //清除TF0标志
  116.         TR0 = 1;                                //定时器0开始计时
  117.         ET0 = 1;                                //使能定时器0中断
  118. }
  119. void Timer0_Isr(void) interrupt 1                //3秒执行一次
  120. {
  121.         state = !state;               
  122.        
  123. //        P20 = 1;
  124. //        TR0 = 0;                            //定时器0关闭计时
  125.        
  126.         P20 = state;
  127.         P21 = !state;       
  128. }
复制代码
任务1:LED灯三秒取反一次,这期间任意时刻按下按钮,串口打印按键次数
截图202501021506468589.jpg

任务2:灯按一下点亮三秒后熄灭

任务3:救护车灯控制器,按下报警按钮,红蓝交替闪烁(LED1和LED2表示红灯和蓝灯),再按一下报警按钮,红蓝灯停止


擎天柱学习第7集:定时器.zip (5.08 MB, 下载次数: 22)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:124
  • 最近打卡:2025-05-06 14:35:58

13

主题

431

回帖

2374

积分

超级版主

积分
2374
发表于 2025-1-3 15:14:26 | 显示全部楼层
擎天柱学习记录,第8集:定时器周期性调度任务
程序如下:
  1. #include "ai8051u.h"                //调用头文件
  2. #include "AI_usb.h"
  3. #include "intrins.h"
  4. #define u8 unsigned char      //8位无符号变量(0-255)
  5. #define u16 unsigned int      //16位无符号变量(0-65535)
  6. u8 State1 = 0;                 //led1初始状态
  7. u8 State2 = 0;                 //led2初始状态
  8. u8 State3 = 0;                 //led3初始状态
  9. u8 State[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  10. u8 i;
  11. u8 Run_State = 0;                                //运行状态
  12. u8 num = 0;
  13. //u16 Count_300 = 0;              //计数300ms变量
  14. //u16 Count_600 = 0;              //计数600ms变量
  15. //u16 Count_900 = 0;              //计数900ms变量
  16. u16 Count_ms[3] = {0,0,0};
  17. u16 Key_Vol = 0;
  18. char *USER_DEVICEDESC = NULL;
  19. char *USER_PRODUCTDESC = NULL;
  20. char *USER_STCISPCMD = "@STCISP#";
  21. void Delay10ms(void)        //@24.000MHz
  22. {
  23.         unsigned long edata i;
  24.         _nop_();
  25.         _nop_();
  26.         _nop_();
  27.         i = 59998UL;
  28.         while (i) i--;
  29. }
  30. void Timer0_Init(void);                //3秒@24.000MHz                //函数声明
  31. void main(void)
  32. {
  33.         int count=1;                        //按键计数变量
  34.     WTST = 0;                                  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  35.     EAXFR = 1;                                 //扩展寄存器(XFR)访问使能
  36.     CKCON = 0;                                 //提高访问XRAM速度
  37.         
  38.     P0M1 = 0x00;   P0M0 = 0x00;
  39.     P1M1 = 0x00;   P1M0 = 0x00;
  40.     P2M1 = 0x00;   P2M0 = 0x00;
  41.     P3M1 = 0x00;   P3M0 = 0x00;
  42.     P4M1 = 0x00;   P4M0 = 0x00;
  43.     P5M1 = 0x00;   P5M0 = 0x00;
  44.     P6M1 = 0x00;   P6M0 = 0x00;
  45.     P7M1 = 0x00;   P7M0 = 0x00;
  46.         
  47.         usb_init();                                     //USB CDC 接口配置
  48.     IE2 |= 0x80;                                    //使能USB中断
  49.         Timer0_Init();
  50.     EA = 1;                                                                                        //IE |= 0X80;
  51.         
  52.         while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  53.         
  54.         while(1)
  55.         {               
  56.         if (bUsbOutReady)
  57.         {
  58. //           USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  59.             
  60.             usb_OUT_done();
  61.         }
  62. /*任务1:用一个定时器实现这个任务。LED1实现0.3秒取反一次,LED2实现0.6秒取反一次,LED30.9秒取反一次        
  63.                 if(Count_300 >= 300)
  64.                 {
  65.                         Count_300 = 0;
  66.                         State1 = !State1;
  67.                         P20 = State1;                          //led1取反
  68.                 }
  69.                 if(Count_600 >= 600)
  70.                 {
  71.                         Count_600 = 0;
  72.                         State2 = !State2;
  73.                         P21 = State2;                          //led2取反
  74.                 }
  75.                 if(Count_900 >= 900)
  76.                 {
  77.                         Count_900 = 0;
  78.                         State3 = !State3;
  79.                         P22 = State3;                          //led3取反
  80.                 }
  81. */               
  82. /*任务2:数组点亮LED,实现流水灯
  83.                 if(Count_ms[0]>=500)
  84.                 {
  85.                         Count_ms[0]=0;
  86.                         P2 = ~State[num];
  87.                         num++;
  88.                         if(num>7)
  89.                                 num = 0;
  90.                 }
  91. */                        
  92.                
  93. /*---------任务3:按键1按一下,LED通过数组移动一下---------*/
  94.                 P2 = ~State[num];
  95.                 if(P32==0)
  96.                 {
  97.                         Delay10ms();
  98.                         if(P32==0)
  99.                         {
  100.                                 while(P32==0);
  101.                                         num++;
  102.                         }
  103.                 }
  104.                 if(Count_ms[1]>=1000)
  105.                 {
  106.                         Count_ms[1]=0;
  107.                         printf("AI8051U\r\n");
  108.                 }
  109.                 if(Count_ms[2]>=10)
  110.                 {
  111.                         Count_ms[2]=0;
  112.                         if(P32==0)
  113.                         {
  114.                                 Key_Vol++;
  115.                                 if(Key_Vol==5)
  116.                                 {
  117.                                         num++;                                       
  118.                                 }
  119.                         }
  120.                         else
  121.                         {
  122.                                 Key_Vol=0;
  123.                         }
  124.                 }
  125.         }
  126. }
  127. void Timer0_Init(void)                //1毫秒@24.000MHz
  128. {
  129.         TM0PS = 0x00;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
  130.         AUXR &= 0x7F;                        //定时器时钟12T模式
  131.         TMOD &= 0xF0;                        //设置定时器模式
  132.         TL0 = 0x30;                                //设置定时初始值
  133.         TH0 = 0xF8;                                //设置定时初始值
  134.         TF0 = 0;                                //清除TF0标志
  135.         TR0 = 1;                                //定时器0开始计时
  136.         ET0 = 1;                                //使能定时器0中断
  137. }
  138. void Timer0_Isr(void) interrupt 1                //1毫秒执行一次
  139. {        
  140. //        Count_300++;
  141. //        Count_600++;
  142. //        Count_900++;
  143.         
  144. /*数组定义+for循环实现任务1        
  145.         for(i=0;i<3;i++)
  146.         {
  147.                 Count_ms[i]++;
  148.                 if(Count_ms[0]>=300)
  149.                 {
  150.                         Count_ms[0]=0;
  151.                         State1 = !State1;
  152.                         P20 = State1;
  153.                 }
  154.                 if(Count_ms[1]>=600)
  155.                 {
  156.                         Count_ms[1]=0;
  157.                         State2 = !State2;
  158.                         P21 = State2;
  159.                 }        
  160.                 if(Count_ms[2]>=900)
  161.                 {
  162.                         Count_ms[2]=0;
  163.                         State3 = !State3;
  164.                         P22 = State3;
  165.                 }
  166.         }
  167. */
  168. //    Count_ms[0]++;
  169.         for(i=0;i<3;i++)
  170.         {
  171.                 Count_ms[i]++;
  172.     }
  173. }
复制代码
任务1:用一个定时器实现这个任务。LED1实现0.3秒取反一次,LED2实现0.6秒取反一次,LED30.9秒取反一次

任务2:数组点亮LED,实现流水灯

任务3:按键1按一下,LED通过数组移动一下,每隔1秒串口打印AI8051U
截图202501031512585332.jpg

擎天柱学习第8集-1:定时器周期性调度任务.zip

4.7 MB, 下载次数: 26

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:124
  • 最近打卡:2025-05-06 14:35:58

13

主题

431

回帖

2374

积分

超级版主

积分
2374
发表于 2025-1-3 17:12:53 | 显示全部楼层
擎天柱学习记录,第8集:定时器周期性调度任务

主要程序如下:
  1. #include "io.h"
  2. u8 State1 = 0;                                        //LED1初始状态
  3. u8 State2 = 0;                                        //LED2初始状态
  4. u8 State3 = 0;                                        //LED3初始状态
  5. u16 Key_Vol[3] ;                                //按键按下持续时间
  6. void LED0_Blink(void)
  7. {
  8.         State1 = !State1;
  9.         P20 = State1;
  10. }
  11. void LED1_Blink(void)
  12. {
  13.         State2 = !State2;
  14.         P21 = State2;
  15. }
  16. void LED2_Blink(void)
  17. {
  18.         State3 = !State3;
  19.         P22 = State3;
  20. }
  21. void KEY_Task(void)
  22. {
  23.         if( P32 == 0 )
  24.         {
  25.                 Key_Vol[0]++;
  26.                 if( Key_Vol[0]==5 )
  27.                 {
  28.                         //按键按下的任务
  29.                         printf( "按键单击\r\n" );
  30.                 }
  31.         }
  32.         else
  33.         {
  34.                 Key_Vol[0] = 0;
  35.         }
  36.        
  37. }
复制代码
截图202501031711155024.jpg

擎天柱学习第8集-2:定时器周期性调度任务.zip (1.12 MB, 下载次数: 25)
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-6 21:52 , Processed in 0.126488 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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