找回密码
 立即注册
查看: 465|回复: 7

AI8051U单片机学习打卡记录

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-12-24 12:25:32
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2024-12-24 12:41:38 | 显示全部楼层 |阅读模式

第一集-芯片性能概况

这是一款功能非常先进的单片机,与早期的型号相比较,已有了质的飞跃,

1、具有高刷新率的图像处理能力;

2、可以使用8位指令集的C51编译器;

3、也可以用32位指令集的C251编译器;

4、体积也大为缩小,功耗也将更低;

5、管脚数也有增加,适应更多的应用场合;

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-12-24 12:25:32
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2024-12-24 15:23:58 | 显示全部楼层

AI8051U单片机学习打卡记录

第一集-芯片性能概况

这是一款功能非常先进的单片机,与早期的型号相比较,已有了质的飞跃,

1、具有高刷新率的图像处理能力;

2、可以使用8位指令集的C51编译器;

3、也可以用32位指令集的C251编译器;

4、体积也大为缩小,功耗也将更低;

5、管脚数也有增加,适应更多的应用场合;
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-12-24 12:25:32
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2024-12-24 15:31:17 | 显示全部楼层
第二集 硬件情况与相关软件以及如何下载程序

XANG.jpg
该实验箱,体积小巧,功能模块齐全,函盖了绝大多数单片机编程的功能,是学习51单片机的不二选择。
1、8位发光二极管,入门级的流水灯实验;
2、8位八段数码管,时钟实验;
3、TFT彩屏,图像处理与显示;
4、音频处理,语音识别与处理;
5、矩阵键盘与独立键盘,方便各种数据的的输入;
6、完善的数据通讯接口,方便与计算机数据交换,USB、TYPE-C等接口;
7、TF卡插槽,放便数据的贮存与交换;
在软件方面,使用目前流行的C语言编译软件KEIL,配合自已公司开发的ISP软件,

ISP.jpg
使得下载程序非常方便和简单:1、通过USB口直接下载程序,无需用TX、RX串口下载;
2、按压P3.3键,重启单片机(断电)使单片机进入 HID1模式,即可下载程序;
3、输入用户程序动行时的IRC频率,应根据编程说明中的频率一致;
4、下载第一个流水灯程序,选择32位(默认)文件夹中的*.hex文件。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-12-24 12:25:32
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2024-12-24 19:46:01 | 显示全部楼层
第三集  点亮一个LED发光二极管

单片机的学习,都是从点亮一个发光管开始的,看似一个简单的动作,但它函盖了从硬件到软件的整个过程。
1、打开KEIL软件;
2、点击文件菜单:Project/New uVision Project...
3、选择工程文件的保存路径,并为工程文件命名;
4、在弹出的对话框中,选择单片机的型号;
5、新建一个C语言文件并保存,一般的文件名为main.c;
6、添加新建的的文件到当前的工程中;“Add Existing Files to Group1';
空工程.jpg
一个空工程,到此就建立完成。
7、对当前工程进行相关设置:
SZ.jpg
勾选:"Create HEX File HEX Fomat"  HEX-80
8、添加头文件到C程序中:右键,点选
insert'#include<AI8051U.H>'
9、C程序基本框架结构为:
#include <AI8051U.H>
main()
{
        
       while(1)
        {
        }
        
}


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-12-24 12:25:32
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2024-12-25 10:15:16 | 显示全部楼层
第四集 USB不停电下载
下载、调试程序是单片机学习中,最频繁的操作,为简化操作,可使用“USB不停电下载”的方法,即无需按压P3.3与电源开关。
USB下停电下载有三种方式:
1、USB-HID方式,PC发送指令,触发MCU复位并自动下载;
2、USB-CDC方式,PC发送指令,触发MCU复位并自动下载;
3、按键触发方式,按键触发MCU复位,进入ISP下载模式,PC端再点击下载;
一、USB-HID方式
1、添加 usb_hid_32.lib、USB.h这二个文件到项目文件中,库文件可以STC官网下载,
2、在C程序中,添加头文件includ"usb.h";
3、添加调试程序
    //USB调试复位所需定义
   char *USER_DEVICESC=NULL;
   char*USER_PRODCTDESC=NULL;
  char*USER_STCISPCMD="@STCISP#";//设置自动复位到ISP区的用户接口命令;
4、在初始化程序中,添加USB初始化以及时钟源启动程序;
     //---------USB调试复位所需代码 -------------------
  P3M0 &=~0x3;
  P3M1 |=0x03;
  while( !C(IRC48MCR&0x01));
  USB_init();
  //-----------------------------
5、在主函数中
    while(1)
   {

   }
添加USB初始化以复位所需代码

  //---------USB调试复位所需代码 -------------------  if(bUSBOUTReady)
{
  USB_OUT_done();
}

//-----------------------------

6、在STI-ISP软件中,对相关内容进行设置:
自动下载.jpg
需要注意的是:第一次下载程序,仍需手动操作,完成后,下次即可自动下载。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-12-24 12:25:32
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2024-12-25 13:18:45 | 显示全部楼层
第五集 C语言基础
一、printf函数,是C语言中最为常用输出语句,它可以让计算的结果直接显示出来,以方便程序的调试,
一般的格式为:printf("<格式化字符串>“,<参量表>);
例一:
          printf("Hello Word!\r\n");
输出的结果是:
Hello Word!
上面的\r\n是回车的作用,计算机打印完成后,光标另起一行;
例 二:
int abc=999;
printf("The value of abc is %d !", abc);
输出的结果是:
The value of abc is 999 !
例 三:
int a=100; int b=200; int c=300;
printf("a=%d, b=%d, c=%d", a, b, c);
输出的结果是:
a=100, b=200, c=300
//后面的为注释。注释用来说明代码是什么意思,起到提示的作用,可以帮助我们理解代码。注释虽然也是代码的一部分,但是它并不会给程序带来任何影响,编译器在编译阶段会忽略注释的内容,或者说删除注释的内容。
二、变量类型
C语言的基本变量类型主要包括以下几种:

1. char:字符类型,通常占用一个字节(8位)的存储空间。它可以表示一个字符(如 'A'、'a' 等),也可以作为小整数(-128到127)使用。

2. int:整数类型,其大小依赖于具体的编译器和平台。在许多系统中,一个int通常占用两个字节(16位),表示的数值范围在-32768到32767之间。但也有很多系统上的int可能是32位或64位。

3. float:单精度浮点数类型,占用32位存储空间。一个float变量包含一个符号位,8位指数和23位尾数。其数值范围大约在-3.4e-38到3.4e38之间,并且通常具有6到7位的十进制数精确度。

4. double:双精度浮点数类型,通常占用64位存储空间。double类型的变量拥有更高的精确度,大约为14到15位十进制数。它的数值范围在-1.7e-308到1.7e308之间。
  #define u8 unsigned char //用字母“u8“来代替”unsigned char“这一长串字符
同样,也可以定义整型变量:
#define u16 unsigned int //用字母“u16“来代替”unsigned int“这一长串字符
十 进  制:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
十六进制:1 2 3 4 5 6 7 8 9 10  A   B   C  D   E   F
   例:十六进制与十进制互换:   0xC=12
                                                0x9=9   (0x9表示十六进制数中的9)
打开“计算器”: 数学计算器.jpg

选择“</>Programmer"(程序员)
                      进制计算.jpg
三、各种运算符及运算方法:
1、算术运算
+(加法)、-(减法)、*(乘法)、/(除法)、% (取模)、++(加1)、--(减1)
2、逻辑运算
逻辑与(&&),逻辑或(||),逻辑非(!)
3、其它运算
==(真假)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)
=(赋值)、+=(加且赋值)、-=(减且赋值)、*=(乘且赋值)、%=(除且赋值)、
<<=(小于等于) 、 >>=(大于等于)、&=、 ^=、|=
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-12-24 12:25:32
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2024-12-25 14:41:08 | 显示全部楼层
第六集 I/O输入、输出
‌GPIO(General Purpose Input/Output)‌是一种通用输入输出端口的缩写。
I/O是“Input/Output”的缩写,意为“输入/输出”,是单片机系统与外界交流的关键概念,涵盖了所有形式的数据接收(输入)和数据发送(输出)过程。
高电平:电源正极电压VCC即为高电平,在51单片机中,电源电压为5V;
低电平:电源负极GND即为低电平,在51单片机中,电源电压为0V;
在实际应用中;2-5V都可认为是高电平,小于0.99V即可认为是低电平;
与5V单片机相比,3.3V单片机的电压范围更窄。在3.3V单片机中,高电平电压范围一般是2.2V以上,低电平电压范围一般是0.8V以下。
AI8051单片机四种工作模式:
‌1、准双向端口模式‌:在这种模式下,端口既可以作为输入也可以作为输出。当负载电阻小于82kΩ时,电压随着负载电阻线性上升;超过82kΩ后,电压突然上升到4.6V以上。在此状态下,端口表现出恒流特性,电流约为16.2微安‌
‌2、推挽输出模式‌:在这种模式下,端口的输出电压能力与负载电阻有关。当负载电阻从100欧姆变化到10k欧姆时,输出电压随着负载电阻的增加而上升。特别地,当负载电阻超过1k欧姆后,输出电压出现波动。关闭LED后,输出电压变得平稳,说明LED闪烁会影响其他端口的电压输出‌
‌3、开漏输出模式‌:在这种模式下,端口提供开漏输出,需要外部上拉电阻才能实现高电平输出。这种模式适用于需要灵活配置I/O口的应用场景‌
‌4、模拟功能模式‌:在这种模式下,端口可以作为模拟信号输入或输出使用。具体应用包括测量外部信号的电压或电流,以及输出模拟信号控制外部设备‌
一般情况下,都设置成准双向端口模式。
AI8051UI单片机端口设置格式:
    P0M1 =0x00;  P0M0=0xff;
    P1M1 =0x00;  P1M0=0xff;
    P2M1 =0x00;  P2M0=0xff;
    P3M1 =0x00;  P3M0=0xff;
    P4M1 =0x00;  P4M0=0xff;
    P5M1 =0x00;  P5M0=0xff;
    P6M1 =0x00;  P6M0=0xff;
    P7M1 =0x00;  P7M0=0xff;

实验一 :点亮一个发光管(闪亮)

#include <AI8051U.h>
#include <stdio.h>
#include <intrins.h>
typedef     unsigned char    u8;
typedef     unsigned int    u16;
#define MAIN_Fosc        24000000UL

void  delay_ms(u8 ms);
void main(void)
{
    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M1 = 0x00;   P0M0 = 0xff;   //设置为推挽输出
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口

    while(1)
    {
        P00 = 0;        //LED On
        Delay1000us(1000);
        P00 = 1;        //LED Off
        Delay1000us(1000);   
       }

void Delay1000us(void)    //@11.0592MHz
{
    unsigned long edata i;
    _nop_();
    _nop_();
    i = 2763UL;
    while (i) i--;
}

延时程序,可用STC- ISP中的“软件延时计算器“来获得:
延时程序.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-12-24 12:25:32
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2024-12-25 20:23:56 | 显示全部楼层
第七集 定时器与中断
一、定时器的作用:
1、用于计时系统,可实再软件计时或者使程序每隔一固定时间完成一项操作。
2、替代长时间的Delay, 提高程序的运行效率和处理速度(可以打断主循环);
二、中断的概念
中断是一种事件驱动的机制,允许单片机在执行程序的过程中暂时中断当前的任务,转而处理来自外部的优先级更高的事件。
当中断事件发生时,单片机会立即跳转到中断服务程序(ISR),执行相关的处理代码,然后返回到原来的程序继续执行。
三、51单片机的中断
1. 51单片机的中断源
51单片机中的中断源可以是外部硬件引脚的电平变化(外部中断),也可以是单片机内部的定时器/计数器溢出、串口接收等(内部中断)。
不同的51单片机中断源可能有所不同。一般51单片机至少有 5个中断:外部中断0、定时器0中断、外部中断1、定时器1中断、串口中断。
四、函数的定义与调用
函数定义1.jpg
函数定义2.jpg

/*************  本地函数声明    **************/
void  delay_ms(u8 ms);
//========================================================================
// 函数: void  delay_ms(unsigned char ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
//========================================================================
void  delay_ms(u8 ms)
{
     u16 i;
     do{
          i = MAIN_Fosc / 6000;
          while(--i);
     }while(--ms);
}

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-7 03:44 , Processed in 0.147331 second(s), 90 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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