第一集 序言
在视频的第一章了解了ai8051u的强悍性能,包括屏幕显示、视屏播放、录放音、pwm、频谱分析仪、手写计算器以及其它硬件知识。
由于没有接触过硬件知识,所以对于视频中下载时选择频率有疑问,为什么有时候是选择40,有的时候又不选择40,这是我的盲点,在后面的学习中会去理解为什么。对于演示的功能我有了其它的应用idea,比如在自己的研究中能否使用频谱分析仪导出频谱判断一个人的情感,收音功能能否作为采集文本模态信息,这都值得思考,总的来说,8051u值得进一步深入学习应用,嵌入式,我来了!
第二集 软硬件及工具介绍
正式看完了第二集,并且做了笔记,虽然在后面的步骤中发现原来直接有说明文档。
1.在这一节视频中,对ai8051u的开发板有了认识,了解了PCB和PCBA的区别。
2.完成了软件下载,keil由于版权作者没有给出直接的程序,但是直接搜索关键词,看到类似官网的直接下载就可以了,没有壁垒。
另外,催更!催更!催更!
第三集 点亮一颗LED灯
- #include "ai8051u.h"
- void main(void)
- {
- // P0端口为准双向口
- P0M0 = 0x00;
- P0M1 = 0x00;
- // P4端口为准双向口
- P4M0 = 0x00;
- P4M1 = 0x00;
- while(1)
- {
- // P40、P00、P01端口输出为0V
- P40 = 0;
- P00 = 0;
- P01 = 0;
- }
- }这一章的难度对于计算机科班生来说没有什么问题,对于c语言有了解就能很快入门,在这里我写代码用了工具,因为工具会自动补全,也更智能。学到的新知识点是端口设置为准双向口,也就是允许电压差通过,使得led灯亮起来,案例中使用了while死循环,如果设置延迟函数,可能形成走马灯的效果,值得尝试!
-
- 重要的事情说三遍!速更、速更、速更。一两集根本不够看,一学就上瘾
复制代码
第四集 USB不停电下载
催更!催更!催更!
超哥讲的非常详细,很适合0基础入门,不仅计算机知识0基础入门,甚至ctrl+f查询功能都会教给我们,非常认真的在教学,哭死!
- //第四集 USB不停电下载
- // note:
- //|=或等于:不会覆盖最初的1
-
- //调用头文件
- #include "ai8051u.h"
- #include "stc32_stc8_usb.h"
-
- char *USER_DEVICEDESC = NULL;
- char *USER_PRODUCTDESC = NULL;
- CHAR *USER_STCISPCMD = "@STCISP#";
-
- void main(void)
- {
-
- //功能脚切换控制,B7位代表EAXFR,1代表能访问,1000 0000转换成十六进制为80
- P_SW2 |= 0x80;
-
-
- // P0端口为准双向口
- P0M0 = 0x00;
- P0M1 = 0x00;
- // P4端口为准双向口
- P4M0 = 0x00;
- P4M1 = 0x00;
- // 所有口设置为准双向口
- P1M0 = 0x00;
- P1M1 = 0x00;
- P2M0 = 0x00;
- P2M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P5M0 = 0x00;
- P5M1 = 0x00;
- P6M0 = 0x00;
- P6M1 = 0x00;
- P7M0 = 0x00;
- P7M1 = 0x00;
-
- // USB DC接口初始化
- usb_init();
- // 使能USB中断
- IE2 |= 0x80;
- // 打开总开关
- EA = 1;
- // 等待USB完成配置
- while(DeviceState != DEVSTATE_CONFIGURED);
-
- while(1)
- {
-
- if(bUsbOutReady)
- {
- // 发送数据缓冲区,长度
- USB_SendData(UsbOutBuffer,OutNumber);
- usb_OUT_done();
- }
-
- // P40、P00、P01端口输出为0V
- P40 = 0;
- P00 = 0;
- P01 = 0;
- }
- }
复制代码
第五集 C语言基础
本章对于科班生来说,还是很容易的。
第六集 I/O输入输出
催更!催更!催更!每次都会催更,一两集根本不够学,冲哥赶紧录,驴歇了冲哥也不许歇
本节学习了I/O输入输出,包括if else,while判断语句、函数定义和调用等软件知识,还学习了电平抖动、高低电平的硬件知识
- //第6集 I/O输入输出
- // note:
- //|=或等于:不会覆盖最初的
- //换行\r\n
- //#define printf printf_hid
- //define 替换名 被替换名
- //*fmt格式控制字符串
- //调用头文件
- #include "ai8051u.h"
- #include "stc32_stc8_usb.h"
- #include "intrins.h"
- //宏定义,定义8位无符号变量(0-255)
- define u8 unsigned char
- //定义16位无符号变量(0-65536)
- //define u16 unsigned int
- //定义一个变量,用于记录状态,初始状态为0;
- u8 state = 0;
- char *USER_DEVICEDESC = NULL;
- char *USER_PRODUCTDESC = NULL;
- CHAR *USER_STCISPCMD = "@STCISP#";
- //24.000MHZ延时20ms
- void Delay20ms(void)
- {
- unsigned long edata i;
- _nop_();
- _nop_();
- i = 119998UL;
- while (i) i--;
- }
- void main(void)
- {
- //功能脚切换控制,B7位代表EAXFR,1代表能访问,1000 0000转换成十六进制为80
- // P_SW2 |= 0x80;
- //设置程序指令延时参数,赋值为0可将cpu执行指令的速度设置为最快
- WTST = 0;
- // 扩展寄存器(XFR)访问使能
- EAXFR = 1;
- // 提高访问XRAM的速度
- CKCON = 0;
- // P0端口为准双向口
- P0M0 = 0x00;
- P0M1 = 0x00;
- // P4端口为准双向口
- P4M0 = 0x00;
- P4M1 = 0x00;
- // 所有口设置为准双向口
- P1M0 = 0x00;
- P1M1 = 0x00;
- P2M0 = 0x00;
- P2M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P5M0 = 0x00;
- P5M1 = 0x00;
- P6M0 = 0x00;
- P6M1 = 0x00;
- P7M0 = 0x00;
- P7M1 = 0x00;
- // USB DC接口初始化
- usb_init();
- // 使能USB中断
- IE2 |= 0x80;
- // 打开总开关
- EA = 1;
- // 打开P40,8颗灯的开关,
- P40 = 0;
- // 等待USB完成配置
- while(DeviceState != DEVSTATE_CONFIGURED);
- while(1)
- {
- if(bUsbOutReady)
- {
- // 发送数据缓冲区,长度
- // USB_SendData(UsbOutBuffer,OutNumber);
- usb_OUT_done();
- }
- // task1:按下P32按钮灯亮,松开P32按钮灯灭
- // 判断p32按钮是否按下
- if(P32 == 0)
- {
- P00 = 0;
- }
- else
- {
- P00 = 1;
- }
- // task2:按下P32按钮灯灭,松开P32按钮灯亮
- // 判断p32按钮是否按下
- if(P32 == 1)
- {
- P00 = 0;
- }
- else
- {
- P00 = 1;
- }
- // task3:按下P32按钮灯亮,再按一下P32灯灭,以此循环
- // if(P32 == 0)
- // {
- // state取反后赋值给state
- // state = !state
- // P00 = state;
- // 等待P32松开
- // while(P32 == 0);
- // }
- // task3:按下P32按钮灯亮,再按一下P32灯灭,以此循环
- if(P32 == 0)
- {
- // 调用函数延迟20ms,消除抖动
- Delay20ms();
- if(P32 == 0)
- {
- state = !state
- P00 = state;
- printf("state:%d\r\n",(int)state);
- // 等待P32松开
- while (P32 == 0)
- }
- }
- else
- {
- P00 = 1;
- }
- // P40、P00、P01端口输出为0V
- P40 = 0;
- P00 = 0;
- P01 = 0;
- }
- }
第七集 定时器中断
因为MCU是单核的,同一时间只能执行一个事情,没有特殊情况不能被打断,所以这里就要引入一个特殊情况,定时器中断;
定时器作用:(1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作(2)替代长时间的Delay;提高程序的运行效率和处理速度(可以打断主循环) 复制代码
|