Ai8051U学习之旅(1) - 从学习开始
第一讲笔记因为遇见,所以学习,因为学习,所以喜欢,先学习一下
不得不说,这款MCU还是挺强悍的
第二讲笔记
不得不说,这个平台做的还是蛮全面的,适合快速评估原型机,也适合验证一下想法,挺好的
开发环境可以用我们熟悉的keil
安装工具/开发环境这一块一定要按着这个方法处理,不然会走弯路
测试了一个简单的工程
#include "ai8051u.h" //µ÷ÓÃÍ·Îļþ
//×¢Òâ£ºÇæÌìÖùµÄLED¶Ë¿ÚÔÚP2£¬ÇÒûÓÐÈý¼«¹ÜµÄµçÔ´¿ØÖÆ£¬ËùÒÔÖ»Òª¿ØÖÆP2¶Ë¿Ú¼´¿É
void main(void)
{
P2M0 = 0; //P2¶Ë¿Ú(P20-P27)Ϊ׼˫Ïò¿Ú
P2M1 = 0;
while(1)
{
P20 = 0; //P20¶Ë¿ÚÊä³ö0V
P21 = 0; //P21¶Ë¿ÚÊä³ö0V
}
}编译通过,下一步,等板子来了,就可以开干了
虽然板子还没有申请到,为了兼容自己以前的程序,把数据类型稍微修改一下
/*----------------------------------------------------------------------------------------------------------------------
* Copyright(c) 2025, Mark Xu Work Studio R&D Department. All rights reserved.
* 文件名称 : DataTypes.h
* 文件版本 : V1.0.0
* 功能描述 : typedef the datas
* 编辑人员 : Mark
* 编辑日期 : 2025/02/16
----------------------------------------------------------------------------------------------------------------------*/
#ifndef __DATATYPES_H__
#define __DATATYPES_H__
//----------------------------------------------------------------------------------------------------------------------
// 宏定义
//----------------------------------------------------------------------------------------------------------------------
#define TRUE (1)
#define FALSE (0)
#ifndef NULL
#define NULL (0)
#endif
#define ENABLE (1)
#define DISABLE (0)
#define SUCCESS (0)
#define FAIL (-1)
#define Priority_0 0 //中断优先级为 0 级(最低级)
#define Priority_1 1 //中断优先级为 1 级(较低级)
#define Priority_2 2 //中断优先级为 2 级(较高级)
#define Priority_3 3 //中断优先级为 3 级(最高级)
#define I2C_Mode_Master (1)
#define I2C_Mode_Slave (0)
#define PIE (0x20) //1: 比较结果由0变1, 产生上升沿中断
#define NIE (0x10) //1: 比较结果由1变0, 产生下降沿中断
#define PWMA (128)
#define PWMB (129)
//----------------------------------------------------------------------------------------------------------------------
// 类型定义
//----------------------------------------------------------------------------------------------------------------------
typedef unsigned char u8; //8 bits
typedef unsigned int u16; // 16 bits
typedef unsigned long u32; // 32 bits
typedef signed char int8; //8 bits
typedef signed int int16;// 16 bits
typedef signed long int32;// 32 bits
typedef unsigned char uint8;//8 bits
typedef unsigned int uint16; // 16 bits
typedef unsigned long uint32; // 32 bits
typedef signed char int8_t;
typedef signed int int16_t;
typedef signed long int32_t;// 32 bits
typedef unsignedchar uint8_t;
typedef unsignedint uint16_t;
typedef unsignedlong uint32_t;
typedef bit BOOL;
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned int ushort;
typedef unsigned long ulong;
//兼容自己的老程序
typedef unsigned char U8;
typedef unsigned int U16;
typedef unsigned long U32;
typedef signed char S8;
typedef signed int S16;
typedef signed long S32;// 32 bits
#endif //#ifndef __DATATYPES_H__
第三讲笔记
万事开头难,有了第一个工程,可以点亮一颗灯,点亮了一颗灯,可以搞定一个数码管,搞定一个数码管,可以驱动LCD……
走路嘛,总是从爬开始,然后坚持,坚持 再坚持才能健步如飞,才能跨越山海
看到这里迫不及待的想写个工程试一下,可是发现出现下面问题:
这说明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核的系列微控制器的嵌入式应用程序。
打开的界面如下:
至于安装与C51类似,这里就不重复叙述了,不会的可以网上查一下
单个附件只能是20M,分了个包
第四讲笔记
STC的特点可能就是稳定,下载方便
第五讲笔记
作为MCU的支柱编程语言,C一定要学好,能精通是最好,然后数据结构,算法
第六讲笔记
这个可能是每一位MCU编程者入门的必经之路,致敬每一位第一次点亮LED的时刻
第七讲笔记
大部分电子产品都可以以时间做状态机完成,定时器是控制逻辑的核心,所以一定要知道怎么用
第八讲笔记
定时器的应用
第八讲学习笔记
本节主要是定时器调度,对于MCU开发者来说,学会了 定时器的妙用,可以开发出很多有趣的好玩意
https://www.stcaimcu.com/data/attachment/forum/202502/17/135620j6itvx6gs6t69qst.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/135642e4ojk4bj6gjojlbg.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/135821kt0ud41p066uncoj.jpg
第九讲学习笔记
数码管是消费电子及家电产品常用的器件
https://www.stcaimcu.com/data/attachment/forum/202502/17/135905paagp0866g9j96no.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/140754ce5l2gyessyy5de2.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/140821djzit72d7s3okmtk.jpg
第十讲学习笔记
输入动作的获取,输出信息的显示,这是电子类产品基本的操作
https://www.stcaimcu.com/data/attachment/forum/202502/17/140921yzzay0bzypj6vplz.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141012wvdu7ooaovar3z99.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141028s33bthqf2hx313hg.jpg
第十一讲学习笔记
对于IO口少,按键多的产品,矩阵键盘是一个不错的选择,作为软件开发,一定要知道矩阵扫描的原理
https://www.stcaimcu.com/data/attachment/forum/202502/17/141101n3733j37q4njmv6h.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141154rhxc7crcbbw77wbz.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141209p691dqg0651ayw93.jpg
第十二讲学习笔记
为什么要复位系统?可能是为了恢复初始状态,也可能是因部分异常导致
https://www.stcaimcu.com/data/attachment/forum/202502/17/141317uri71qpp57i3e97b.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141339rm0275vmvdv327cv.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141408gj1d1dgzj30d3j1d.jpg
第十三讲学习笔记
什么是中断?就是我正在学MCU视频,妈妈让我倒垃圾,于是我先暂停视频,然后去倒垃圾,倒完回来继续学
https://www.stcaimcu.com/data/attachment/forum/202502/17/141534lboxygodyegoogbf.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141550pqhz8xxt956ds3p9.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141604zkcqzrkyjee6qee0.jpg
第十四讲学习笔记
IO口的中断对于捕获信号,唤醒系统,编写通讯协议都有用处
https://www.stcaimcu.com/data/attachment/forum/202502/17/141648stumtmdyttyruuau.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141734svxfnmmy1femfe6j.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141751q54hcs3lpzhp1pm4.jpg
第十五讲学习笔记
这是定时器的一个用法
https://www.stcaimcu.com/data/attachment/forum/202502/17/141820hq8drrhnar1vthvi.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141845unbd280kkk4k68we.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/141906akkbub99jb9za3m7.jpg
第十六讲学习笔记
单片机调试的法宝之一,就是用串口打印信息
https://www.stcaimcu.com/data/attachment/forum/202502/17/141938b7b5ttcweidwiidb.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/142013f6vmb9pv0c04c6f7.jpg https://www.stcaimcu.com/data/attachment/forum/202502/17/142027hgfsvm0ripacbdvb.jpg
收藏
二、实操
作为有强迫症的小电工,看了代码,为了不与自己的习惯对抗,把工程稍微改装了一下
1)每一个C文件对应一个h文件。例如:main.c,会对应有一个main.h
2)对于注释也进行了更新,如下:
mian.h
/*----------------------------------------------------------------------------------------------------------------------
* Copyright(c) 2025, Mark Xu Work Studio R&D Department. All rights reserved.
* 文件名称 : main.h
* 文件版本 : V1.0.0
* 功能描述 : 主程序头文件
* 创建人员 : Mark Xu
* 创建日期 : 2025/02/17
----------------------------------------------------------------------------------------------------------------------*/
#ifndef __MAIN_H__
#define __MAIN_H__
#include "includes.h"
//----------------------------------------------------------------------------------------------------------------------
// 常量、宏
//----------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------
// 类型重定义
//----------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------
// 全局变量
//----------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------
// 全局函数
//----------------------------------------------------------------------------------------------------------------------
#endif //#ifndef __MAIN_H__
3) 对文件夹也进了部分更改,如下:
三、实操2
1)对工程的工件夹结构也进行了小调整,方便归类与查看
2)对于源文件的命名也进行了跟随了自己的习惯
>> 应用层的文件命名:以app_开关, app_disp.c/app_disp.h//显示相关的应用
>> 驱动类的文件命名:以drv_开关,例如:drv_timer.c/drv_timer.h
四、mdk, keil c51, keil c251安装在一个文件夹的方法
参考这个教程,然后,把C251按C51的方法再操作一遍就可以了
五、增加图形配置文件
关于圈形配置文件的编写可以搜索Keil Configuration Wizard
直接上简单的代码:
/*----------------------------------------------------------------------------------------------------------------------
* Copyright(c) 2025, Mark Xu Work Studio R&D Department. All rights reserved.
* 文件名称 : SysConfig.h
* 文件版本 : V1.0.0
* 功能描述 : 系统配置文件
* 创建人员 : Mark Xu
* 创建日期 : 2025/02/17
----------------------------------------------------------------------------------------------------------------------*/
#ifndef __SYSCONFIG_H__
#define __SYSCONFIG_H__
// <<< Use Configuration Wizard in Context Menu >>>
//----------------------------------------------------------------------------------------------------------------------
//<h> The Project information
// <s> The Hardware Version
#define HW_PCBA_VERSION "R00"
// <s> The Firmware Version
#define FW_FIRMWARE_VERSION "R00"
//</h>
//----------------------------------------------------------------------------------------------------------------------
//<h> The mcu peripheral config
// <q> The timer0 config
//<i> Enable or Disable
#define DRV_TIMER0_EN (0) //定时器0,0-禁用,1-使能
// <q> The timer1 config
//<i> Enable or Disable
#define DRV_TIMER1_EN (0) //定时器1,0-禁用,1-使能
// <q> The timer2 config
//<i> Enable or Disable
#define DRV_TIMER2_EN (1) //定时器2,0-禁用,1-使能
// <q> The pwm config
// <i> enable or disable
#define DRV_PWM_EN (0) //PWM模块,0-禁用,1-使能
// <q> The comparor config
// <i> enable or disable
#define DRV_CMP_EN (0) //比较器, 0-禁用,1-使能
// <q> The uart1 config
//<i> Enable or Disable
#define DRV_UART1_EN (0) //串口, 0-禁用,1-使能
// <q> The uart2 config
//<i> Enable or Disable
#define DRV_UART2_EN (0) //串口, 0-禁用,1-使能
// <q> The uart3 config
//<i> Enable or Disable
#define DRV_UART3_EN (0) //串口, 0-禁用,1-使能
// <q> The uart4 config
//<i> Enable or Disable
#define DRV_UART4_EN (0) //串口, 0-禁用,1-使能
// <q> The spi function
//<i> Enable or Disable
#define DRV_SPI_EN (0) //SPI功能,0-禁止, 1-使能
// <q> The RTC function
//<i> Enable or Disable
#define DRV_RTC_EN (0) //RTC功能,0-禁止,1-使能
// <q> The watchdog config
// <i> enable or disable
#define DRV_WDT_EN (0) //看门狗, 0-禁用,1-使能
// </h>
//应用测试相关
//----------------------------------------------------------------------------------------------------------------------
//<h> The function test module
// <q> The adc sample test
//<i> Enable or Disable
#define APP_ADC_TEST_EN (0) //ADC采样测试,0-禁用,1-使能
// <q> The eeprom write and read test
//<i> Enable or Disable
#define APP_EEPROM_TEST_EN (0) //eeporm测试, 0-禁用,1-使能
// </h>
//调试打印相关
// <e> The debug print function
// <i> Enable or Disable
#define APP_DEBUG_PRINT_EN (0) //调试打功能, 0-禁用,1-使能
#if (APP_DEBUG_PRINT_EN)
// <q> The main module debug print function
// <i> enable or disable
#define MAIN_PRINT_EN (1) //主程序模块,打印功能
// <q> The system module debug print function
// <i> enable or disable
#define SYS_PRINT_EN (0) //SYS模块, 打印功能
// <q> The charging module debug print function
// <i> enable or disable
#define CHRG_PRINT_EN (0) //充电模块,打印功能
// <q> The key module debug print function
// <i> enable or disable
#define KEY_PRINT_EN (0) //按键模块,打印功能
// <q> The led module debug print function
// <i> enable or disable
#define LED_PRINT_EN (0) //显示模块,打印功能
//如果忘记打开宏“DRV_UART_EN”,在编译时,此处会有提示
#if (!DRV_UART_EN)
#error Please enable the uart driver (set the macro "DRV_UART_EN" to 1)!!!
#endif //#if (!DRV_UART_EN)
#else
#define MAIN_PRINT_EN (0) //主程序模块,打印功能
#define SYS_PRINT_EN (0) //SYS模块, 打印功能
#define CHRG_PRINT_EN (0) //充电模块,打印功能
#define KEY_PRINT_EN (0) //按键模块,打印功能
#define LED_PRINT_EN (0) //显示模块,打印功能
#endif //#if (APP_DEBUG_PRINT_EN)
// </e>
// <<< end of configuration section >>>
#endif //#ifndef __SYSCONFIG_H__
2025年2月20日 板子收到
开发板已收到,从今天起准备开干
从头开始,每天进步一点点,开心多一点
页:
[1]