找回密码
 立即注册
楼主: jdgcxyprm

8051U深度入门到32位51大型实战教学视频学习体会

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-19 09:25:08
已绑定手机

5

主题

19

回帖

149

积分

注册会员

积分
149
发表于 2025-3-31 07:14:27 | 显示全部楼层
第6课使用AiCube作业
  1. ////////////////////////////////////////
  2. // 文件名称: main.c
  3. // 文件描述: GPIO
  4. // 文件版本: V1.0
  5. // 修改记录:
  6. //   1. (2025-03-30) 创建文件
  7. ////////////////////////////////////////
  8. #include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
  9. ////////////////////////////////////////
  10. // 项目主函数
  11. // 入口参数: 无
  12. // 函数返回: 无
  13. ////////////////////////////////////////
  14. void main(void)
  15. {
  16.         u8 Key_Num = 0;
  17.         u8 Led_State = 0xff;
  18.     SYS_Init();
  19.         P40 = 0;
  20.     while (1)
  21.     {
  22.         USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  23.                 if(P32 == 0)
  24.                 {
  25.                         delay_ms(10);
  26.                         if(P32 == 0)
  27.                         {
  28.                                 Led_State = Led_State << 1;
  29.                                 while(P32 == 0);
  30.                                 P0 = Led_State;
  31.                                 Key_Num++;
  32.                                 if(Key_Num == 8)
  33.                                 {
  34.                                         Key_Num = 0;
  35.                                         Led_State = 0xff;
  36.                                 }
  37.                                
  38.                         }
  39.                 }
  40.        
  41.     }
  42. }
  43. ////////////////////////////////////////
  44. // 系统初始化函数
  45. // 入口参数: 无
  46. // 函数返回: 无
  47. ////////////////////////////////////////
  48. void SYS_Init(void)
  49. {
  50.     EnableAccessXFR();                  //使能访问扩展XFR
  51.     AccessCodeFastest();                //设置最快速度访问程序代码
  52.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  53.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  54.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  55.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  56.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  57.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  58.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  59.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  60.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  61.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  62.     CLK_Init();                         //时钟模块初始化
  63.     USBLIB_Init();                      //USB库初始化
  64.     EnableGlobalInt();                  //使能全局中断
  65. }
  66. ////////////////////////////////////////
  67. // 毫秒延时函数
  68. // 入口参数: ms (设置延时的毫秒值)
  69. // 函数返回: 无
  70. ////////////////////////////////////////
  71. void delay_ms(uint16_t ms)
  72. {
  73.     uint16_t i;
  74.     do
  75.     {
  76.         i = MAIN_Fosc / 6000;
  77.         while (--i);
  78.     } while (--ms);
  79. }
  80. ////////////////////////////////////////
  81. // 时钟初始化函数
  82. // 入口参数: 无
  83. // 函数返回: 无
  84. ////////////////////////////////////////
  85. void CLK_Init(void)
  86. {
  87.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  88.     HIRC_40M();                         //选择内部预置的频率
  89.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  90.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  91.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  92.     CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
  93.     CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数
  94.     CLK_SPICLK_Divider(1);              //设置SPI时钟预分频系数
  95.     CLK_I2SCLK_Divider(1);              //设置I2S时钟预分频系数
  96.     CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
  97.     CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
  98.     CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
  99. }
  100. ////////////////////////////////////////
  101. // USB库初始化函数
  102. // 入口参数: 无
  103. // 函数返回: 无
  104. ////////////////////////////////////////
  105. void USBLIB_Init(void)
  106. {
  107.     usb_init();                         //初始化USB模块
  108.     USB_SetIntPriority(0);              //设置中断为最低优先级
  109.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  110. }
  111. ////////////////////////////////////////
  112. // 等待USB配置完成函数
  113. // 入口参数: 无
  114. // 函数返回: 无
  115. ////////////////////////////////////////
  116. void USBLIB_WaitConfiged(void)
  117. {
  118.     while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
  119. }
  120. ////////////////////////////////////////
  121. // USB设备接收数据处理程序
  122. // 入口参数: 无
  123. // 函数返回: 无
  124. // bUsbOutReady:USB设备接收数据标志位
  125. // OutNumber:USB设备接收到的数据长度
  126. // UsbOutBuffer:保存USB设备接收到的数据
  127. ////////////////////////////////////////
  128. void USBLIB_OUT_Done(void)
  129. {
  130.     if (bUsbOutReady)                   //查询是否有接收到数据
  131.     {
  132.         USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
  133.         usb_OUT_done();                 //当前包的数据处理完成
  134.     }
  135. }
复制代码
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 18:21 , Processed in 0.107141 second(s), 44 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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