找回密码
 立即注册
查看: 580|回复: 5

Ai8051U学习之旅(1) - 从学习开始

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-02-28 11:44:43
已绑定手机

4

主题

21

回帖

100

积分

注册会员

积分
100
发表于 2025-2-14 16:41:19 | 显示全部楼层 |阅读模式
第一讲笔记

       因为遇见,所以学习,因为学习,所以喜欢,先学习一下
       不得不说,这款MCU还是挺强悍的
截图202502141626259535.jpg 截图202502141627261461.jpg 截图202502141628247209.jpg

第二讲笔记
      不得不说,这个平台做的还是蛮全面的,适合快速评估原型机,也适合验证一下想法,挺好的
      开发环境可以用我们熟悉的keil
截图202502141629299616.jpg 截图202502141630157168.jpg
安装工具/开发环境这一块一定要按着这个方法处理,不然会走弯路


截图202502141640223006.jpg
测试了一个简单的工程
  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. }
复制代码
编译通过,下一步,等板子来了,就可以开干了
截图202502171722575956.jpg



虽然板子还没有申请到,为了兼容自己以前的程序,把数据类型稍微修改一下
  1. /*----------------------------------------------------------------------------------------------------------------------
  2. * Copyright(c) 2025, Mark Xu Work Studio R&D Department. All rights reserved.
  3. * 文件名称 : DataTypes.h
  4. * 文件版本 : V1.0.0
  5. * 功能描述 : typedef the datas
  6. * 编辑人员 : Mark
  7. * 编辑日期 : 2025/02/16
  8. ----------------------------------------------------------------------------------------------------------------------*/
  9. #ifndef __DATATYPES_H__
  10. #define __DATATYPES_H__
  11. //----------------------------------------------------------------------------------------------------------------------
  12. // 宏定义
  13. //----------------------------------------------------------------------------------------------------------------------
  14. #define        TRUE                                (1)
  15. #define        FALSE                                (0)
  16. #ifndef NULL        
  17.         #define        NULL                        (0)
  18. #endif
  19. #define ENABLE                                (1)
  20. #define DISABLE                                (0)
  21. #define SUCCESS                                (0)
  22. #define FAIL                                (-1)
  23. #define        Priority_0                        0        //中断优先级为 0 级(最低级)
  24. #define        Priority_1                        1        //中断优先级为 1 级(较低级)
  25. #define        Priority_2                        2        //中断优先级为 2 级(较高级)
  26. #define        Priority_3                        3        //中断优先级为 3 级(最高级)
  27. #define        I2C_Mode_Master                (1)
  28. #define        I2C_Mode_Slave                (0)
  29. #define        PIE                                        (0x20)        //1: 比较结果由0变1, 产生上升沿中断
  30. #define        NIE                                        (0x10)        //1: 比较结果由1变0, 产生下降沿中断
  31. #define        PWMA                                (128)
  32. #define        PWMB                                (129)
  33. //----------------------------------------------------------------------------------------------------------------------
  34. // 类型定义
  35. //----------------------------------------------------------------------------------------------------------------------
  36. typedef unsigned char           u8;     //  8 bits
  37. typedef unsigned int            u16;    // 16 bits
  38. typedef unsigned long           u32;    // 32 bits
  39. typedef signed char             int8;   //  8 bits
  40. typedef signed int              int16;  // 16 bits
  41. typedef signed long             int32;  // 32 bits
  42. typedef unsigned char           uint8;  //  8 bits
  43. typedef unsigned int            uint16; // 16 bits
  44. typedef unsigned long           uint32; // 32 bits
  45. typedef signed char             int8_t;
  46. typedef signed int              int16_t;
  47. typedef signed long             int32_t;  // 32 bits
  48. typedef unsigned  char                 uint8_t;
  49. typedef unsigned  int                 uint16_t;
  50. typedef unsigned  long                 uint32_t;
  51. typedef bit                                 BOOL;
  52. typedef unsigned char                 BYTE;
  53. typedef unsigned int                 WORD;
  54. typedef unsigned long                 DWORD;
  55. typedef unsigned char                 uchar;
  56. typedef unsigned int                 uint;
  57. typedef unsigned int                 ushort;
  58. typedef unsigned long                 ulong;
  59. //兼容自己的老程序
  60. typedef unsigned char                 U8;
  61. typedef unsigned int                 U16;
  62. typedef unsigned long                 U32;
  63. typedef signed char             S8;
  64. typedef signed int              S16;
  65. typedef signed long             S32;  // 32 bits
  66. #endif        //#ifndef __DATATYPES_H__
复制代码


第三讲笔记
      万事开头难,有了第一个工程,可以点亮一颗灯,点亮了一颗灯,可以搞定一个数码管,搞定一个数码管,可以驱动LCD……
      走路嘛,总是从爬开始,然后坚持,坚持 再坚持才能健步如飞,才能跨越山海
截图202502141633083519.jpg 截图202502141633383692.jpg

看到这里迫不及待的想写个工程试一下,可是发现出现下面问题:
截图202502171624004395.jpg
这说明KEIL的插件没有安装完成,说明视频没有看仔细,再看一遍,发现需要安装C256版本,目前电脑中只安装了c51与arm,
下载安装

Keil C251简介
Keil C251是美国Keil公司(该公司2005年被ARM公司收购)出品的针对251微控制器系列兼容单片机C语言软件开发系统。
与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil C251是支持251微控制器体系结构的Keil开发工具,适合每个阶段的开发人员,不管是专业的应用工程师,还是刚学习嵌入式软件开发的学生。
扩展:Keil公司开发的ARM开发工具MDK(Microcontroller Development Kit),是用来开发基于ARM核的系列微控制器的嵌入式应用程序。
打开的界面如下:

截图202502171632591586.jpg
至于安装与C51类似,这里就不重复叙述了,不会的可以网上查一下
单个附件只能是20M,分了个包
c251v560.7z.001 (20 MB, 下载次数: 32)


c251v560.7z.002 (18.92 MB, 下载次数: 27)




第四讲笔记
     STC的特点可能就是稳定,下载方便
截图202502141634174490.jpg 截图202502141634527337.jpg

第五讲笔记
      作为MCU的支柱编程语言,C一定要学好,能精通是最好,然后数据结构,算法
截图202502141636154501.jpg 截图202502141636417378.jpg

第六讲笔记
     这个可能是每一位MCU编程者入门的必经之路,致敬每一位第一次点亮LED的时刻
截图202502141637113734.jpg 截图202502141638143946.jpg

第七讲笔记
      大部分电子产品都可以以时间做状态机完成,定时器是控制逻辑的核心,所以一定要知道怎么用
截图202502141640019656.jpg

第八讲笔记
       定时器的应用
截图202502141640519714.jpg 截图202502141641078670.jpg



第八讲学习笔记
       本节主要是定时器调度,对于MCU开发者来说,学会了 定时器的妙用,可以开发出很多有趣的好玩意



第九讲学习笔记
      数码管是消费电子及家电产品常用的器件






第十讲学习笔记
      输入动作的获取,输出信息的显示,这是电子类产品基本的操作




第十一讲学习笔记
      对于IO口少,按键多的产品,矩阵键盘是一个不错的选择,作为软件开发,一定要知道矩阵扫描的原理



第十二讲学习笔记
      为什么要复位系统?可能是为了恢复初始状态,也可能是因部分异常导致


第十三讲学习笔记
      什么是中断?就是我正在学MCU视频,妈妈让我倒垃圾,于是我先暂停视频,然后去倒垃圾,倒完回来继续学


第十四讲学习笔记
      IO口的中断对于捕获信号,唤醒系统,编写通讯协议都有用处


第十五讲学习笔记
      这是定时器的一个用法


第十六讲学习笔记
      单片机调试的法宝之一,就是用串口打印信息











截图202502171721096326.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-02-28 11:44:43
已绑定手机

4

主题

21

回帖

100

积分

注册会员

积分
100
发表于 2025-2-17 17:55:50 | 显示全部楼层
二、实操
      作为有强迫症的小电工,看了代码,为了不与自己的习惯对抗,把工程稍微改装了一下
      1)每一个C文件对应一个h文件。例如:main.c,会对应有一个main.h
       截图202502171752591094.jpg
      2)  对于注释也进行了更新,如下:
      mian.h
   
  1. /*----------------------------------------------------------------------------------------------------------------------
  2. * Copyright(c) 2025, Mark Xu Work Studio R&D Department. All rights reserved.
  3. * 文件名称 : main.h
  4. * 文件版本 : V1.0.0
  5. * 功能描述 : 主程序头文件
  6. * 创建人员 : Mark Xu
  7. * 创建日期 : 2025/02/17
  8. ----------------------------------------------------------------------------------------------------------------------*/
  9. #ifndef        __MAIN_H__
  10. #define        __MAIN_H__
  11. #include "includes.h"
  12. //----------------------------------------------------------------------------------------------------------------------
  13. // 常量、宏  
  14. //----------------------------------------------------------------------------------------------------------------------
  15. //----------------------------------------------------------------------------------------------------------------------
  16. // 类型重定义                                      
  17. //----------------------------------------------------------------------------------------------------------------------
  18. //----------------------------------------------------------------------------------------------------------------------
  19. // 全局变量
  20. //----------------------------------------------------------------------------------------------------------------------
  21. //----------------------------------------------------------------------------------------------------------------------
  22. // 全局函数
  23. //----------------------------------------------------------------------------------------------------------------------
  24. #endif //#ifndef        __MAIN_H__
复制代码


     3) 对文件夹也进了部分更改,如下:
      截图202502171755457733.jpg
      
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-02-28 11:44:43
已绑定手机

4

主题

21

回帖

100

积分

注册会员

积分
100
发表于 2025-2-17 18:01:02 | 显示全部楼层
三、实操2
    1)对工程的工件夹结构也进行了小调整,方便归类与查看
         截图202502171758109576.jpg
    2)对于源文件的命名也进行了跟随了自己的习惯
       >> 应用层的文件命名:以app_开关, app_disp.c/app_disp.h  //显示相关的应用
       >> 驱动类的文件命名:以drv_开关,例如:drv_timer.c/drv_timer.h
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-02-28 11:44:43
已绑定手机

4

主题

21

回帖

100

积分

注册会员

积分
100
发表于 2025-2-17 18:12:54 | 显示全部楼层
四、mdk, keil c51, keil c251安装在一个文件夹的方法
       C51与MDK安装共存方法.pdf (868.63 KB, 下载次数: 44)
      参考这个教程,然后,把C251按C51的方法再操作一遍就可以了
截图202502171811363067.jpg
截图202502171812336646.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-02-28 11:44:43
已绑定手机

4

主题

21

回帖

100

积分

注册会员

积分
100
发表于 2025-2-18 10:42:20 | 显示全部楼层
五、增加图形配置文件
       关于圈形配置文件的编写可以搜索Keil Configuration Wizard
      直接上简单的代码:
  1. /*----------------------------------------------------------------------------------------------------------------------
  2. * Copyright(c) 2025, Mark Xu Work Studio R&D Department. All rights reserved.
  3. * 文件名称 : SysConfig.h
  4. * 文件版本 : V1.0.0
  5. * 功能描述 : 系统配置文件
  6. * 创建人员 : Mark Xu
  7. * 创建日期 : 2025/02/17
  8. ----------------------------------------------------------------------------------------------------------------------*/
  9. #ifndef __SYSCONFIG_H__
  10. #define __SYSCONFIG_H__
  11. // <<< Use Configuration Wizard in Context Menu >>>
  12. //----------------------------------------------------------------------------------------------------------------------
  13. //<h> The Project information
  14. // <s> The Hardware Version
  15. #define HW_PCBA_VERSION             "R00"
  16. // <s> The Firmware Version
  17. #define FW_FIRMWARE_VERSION         "R00"
  18. //</h>
  19. //----------------------------------------------------------------------------------------------------------------------
  20. //<h> The mcu peripheral config
  21. // <q> The timer0 config
  22. //  <i> Enable or Disable
  23. #define DRV_TIMER0_EN                                        (0)                //定时器0,0-禁用,1-使能
  24. // <q> The timer1 config
  25. //  <i> Enable or Disable
  26. #define DRV_TIMER1_EN                                        (0)                //定时器1,0-禁用,1-使能
  27. // <q> The timer2 config
  28. //  <i> Enable or Disable
  29. #define DRV_TIMER2_EN                                        (1)                //定时器2,0-禁用,1-使能
  30. // <q> The pwm config
  31. //        <i> enable or disable
  32. #define DRV_PWM_EN                                                (0)                //PWM模块,0-禁用,1-使能
  33. // <q> The comparor config
  34. //        <i> enable or disable
  35. #define DRV_CMP_EN                                                (0)                //比较器, 0-禁用,1-使能
  36. // <q> The uart1 config
  37. //  <i> Enable or Disable
  38. #define DRV_UART1_EN                                        (0)                //串口,   0-禁用,1-使能
  39. // <q> The uart2 config
  40. //  <i> Enable or Disable
  41. #define DRV_UART2_EN                                        (0)                //串口,   0-禁用,1-使能
  42. // <q> The uart3 config
  43. //  <i> Enable or Disable
  44. #define DRV_UART3_EN                                        (0)                //串口,   0-禁用,1-使能
  45. // <q> The uart4 config
  46. //  <i> Enable or Disable
  47. #define DRV_UART4_EN                                        (0)                //串口,   0-禁用,1-使能
  48. // <q> The spi function
  49. //  <i> Enable or Disable
  50. #define DRV_SPI_EN                           (0)                //SPI功能,0-禁止, 1-使能
  51. // <q> The RTC function
  52. //  <i> Enable or Disable
  53. #define DRV_RTC_EN                           (0)                //RTC功能,0-禁止,1-使能
  54. // <q> The watchdog config
  55. //        <i> enable or disable
  56. #define DRV_WDT_EN                                                (0)                //看门狗, 0-禁用,1-使能
  57. // </h>
  58. //应用测试相关
  59. //----------------------------------------------------------------------------------------------------------------------
  60. //<h> The function test module
  61. // <q> The adc sample test
  62. //  <i> Enable or Disable
  63. #define APP_ADC_TEST_EN                                        (0)                //ADC采样测试,0-禁用,1-使能
  64. // <q> The eeprom write and read test
  65. //  <i> Enable or Disable
  66. #define APP_EEPROM_TEST_EN                                (0)                //eeporm测试,   0-禁用,1-使能
  67. // </h>
  68. //调试打印相关
  69. // <e> The debug print function
  70. //         <i> Enable or Disable
  71. #define APP_DEBUG_PRINT_EN                                (0)                //调试打功能, 0-禁用,1-使能
  72. #if (APP_DEBUG_PRINT_EN)
  73.         // <q> The main module debug print function
  74.         //        <i> enable or disable
  75.         #define MAIN_PRINT_EN                                (1)                //主程序模块,打印功能
  76.         // <q> The system module debug print function
  77.         //        <i> enable or disable
  78.         #define SYS_PRINT_EN                                (0)                //SYS模块, 打印功能
  79.         // <q> The charging module debug print function
  80.         //        <i> enable or disable
  81.         #define CHRG_PRINT_EN                                (0)                //充电模块,打印功能
  82.         // <q> The key module debug print function
  83.         //        <i> enable or disable
  84.         #define KEY_PRINT_EN                                (0)                //按键模块,打印功能
  85.         // <q> The led module debug print function
  86.         //        <i> enable or disable
  87.         #define LED_PRINT_EN                                (0)                //显示模块,打印功能
  88.         //如果忘记打开宏“DRV_UART_EN”,在编译时,此处会有提示
  89.         #if (!DRV_UART_EN)       
  90.                 #error Please enable the uart driver (set the macro "DRV_UART_EN" to 1)!!!
  91.         #endif //#if (!DRV_UART_EN)
  92. #else
  93.         #define MAIN_PRINT_EN                                (0)                //主程序模块,打印功能
  94.         #define SYS_PRINT_EN                                (0)                //SYS模块, 打印功能
  95.         #define CHRG_PRINT_EN                                (0)                //充电模块,打印功能
  96.         #define KEY_PRINT_EN                                (0)                //按键模块,打印功能
  97.         #define LED_PRINT_EN                                (0)                //显示模块,打印功能
  98. #endif //#if (APP_DEBUG_PRINT_EN)
  99. // </e>
  100. // <<< end of configuration section >>>
  101. #endif //#ifndef __SYSCONFIG_H__
复制代码


截图202502181042163500.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-02-28 11:44:43
已绑定手机

4

主题

21

回帖

100

积分

注册会员

积分
100
发表于 2025-2-20 17:59:17 | 显示全部楼层
2025年2月20日 板子收到
开发板已收到,从今天起准备开干
从头开始,每天进步一点点,开心多一点
截图202502201759404167.jpg 截图202502201759599739.jpg
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-19 01:38 , Processed in 0.126173 second(s), 74 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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