engusizy 发表于 2025-2-17 11:55:20

学习AI8051U试验箱送实验箱=====实验箱已安排发出

第一集知道了实验箱的一些功能,包括能够手写识别,录入视频等

engusizy 发表于 2025-2-17 11:58:48

第二集学习了开发板的硬件模块,包括ai8051芯片以及外围电路,常见的GPIO口,USB下载,USB转串口下载等
还有需要用到keil5工具,通过isp工具,将芯片资料注入到keil5中,方便后续开发。
芯片能够兼容8位的8051,因此在写程序时应当注意,有8位的,有32位的

engusizy 发表于 2025-2-17 12:29:38

第三集开始烧录,不过缺少实验箱,没法做,看看代码
#include "ai8051u.h"                //调用头文件


void main(void)
{
        P0M0 = 0;                //P0端口(P00-P07)为准双向口
        P0M1 = 0;
       
        P4M0 = 0;                //P4端口为准双向口
        P4M1 = 0;       
       
        while(1)
        {
                P40 = 0;        //P40端口输出0V
                P00 = 0;        //P00端口输出0V
                P01 = 0;        //P01端口输出0V
        }
}

代码里面0就是输出0V,while意思是一直循环执行,一直输出0V

engusizy 发表于 2025-2-17 12:34:03

第四集,在写程序时,一定要记得头文件
#include "ai8051u.h"                        //调用头文件
#include "stc32_stc8_usb.h"                //调用头文件

这俩要和main.c文件放在一起
usb_init();这行是配置usb口的,不用管
while (DeviceState != DEVSTATE_CONFIGURED);   等usb程序弄完
char *USER_STCISPCMD = "@STCISP#";后面的@STCISP# 相当于密码,可以自己在isp上设置,就有个独一无二的密码了

engusizy 发表于 2025-2-17 12:41:33

第五集
#define u8unsigned char                这个定义的是8位无符号变量,总共0-255
#define u16 unsigned int                这个定义的是16位无符号变量是0-65535
if( X && Y )
else      if和else是判断语句,选择执行哪个
&& 与符号,前面和后面都必须满足才能算
printf("条件为真\r\n");括号内的直接输出
printf("X / Y = %u \r\n",(u16)(X/Y));       %u用来替换变量,有很多种,什么/n等,都有自己的作用
后面有个u16,加个括号,就是转换位无符号16位的数
常用的运算符 + - */ %等
       

engusizy 发表于 2025-2-17 13:03:59

第六集仍然是点灯,只需要检测到端口被按下,就可以改变电平
代码:
按键按下就是   P32 == 0

还学习了一个消抖方法,延时消抖:
oid Delay20ms(void)        //@24.000MHzDelay20ms();
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 119998UL;
        while (i) i--;
}

延时20ms的话,经过isp计算,i应当= 119998UL
这样正好是20ms

engusizy 发表于 2025-2-17 13:38:53

第七集定时器中断。
单片机是单核,没有办法执行多条命令,就需要想办法控制时间
利用定时器完成时间的计算、延时。
1.采用isp直接生成定时函数,要设置延时时间、定时器选择,通用就行
2. 复制代码到程序中
使用的时候在main函数里面使用
1. 先将定时器初始化   Timer0_Init();
2. 三秒执行一次的函数,也就是三秒钟,状态翻转一次 !的意思是取反
void Timer0_Isr(void) interrupt 1
{
        state = !state;               
       
        P00 = state;
        P01 = !state;
}

定时器原理
系统时钟,1微秒计数24次---24M
可以通过8分频寄存器,放慢速度,或者通过辅助寄存器设置时钟12分频
定时器0的模式0较难:16位的重载模式。通过两个隐藏的寄存器TH0 TL0实现
结合代码看:
TM0PS = 0x0F;               用来分频的 --0x05位15
AUXR &= 0x7F;                      设置定时器时钟模式
TMOD &= 0xF0;               设置定时器模式
TL0 = 0xDC;                      设置定时初始值TL0的
TH0 = 0x0B;                     设置定时初始值TH0的
TF0 = 0;                              清除TF0标志
TR0 = 1;                              定时器0开始计时
ET0 = 1;                              使能定时器0中断

定时器本质上就是从0到65535后,溢出,置一次标志位,就可以中断了
最后,带领我们写了一个救护车灯控制器
任务3:救护车灯控制器,按下报警按钮,红蓝交替闪烁(LED1和LED2              表示红和蓝灯),再按一下报警按钮,红蓝灯停止。
if( P32 == 0 )                                                                //判断P32按钮是否按下
{
        Delay20ms();                                                        //延时20ms消抖
        if( P32 == 0 )
        {
        Run_State = !Run_State;                                //运行状态取反
        if( Run_State==1 )                                        //运行
        {
                Timer0_Init();
        }else{
        TR0 = 0;                                                //关闭定时器
        P00 = 1;
        P01 = 1;
}
P00 = 0;
Timer0_Init();
while( P32 == 0 );等待P32松开
}
}

engusizy 发表于 2025-2-17 13:39:44

七楼最后应该是65536 溢出,不是65535
页: [1]
查看完整版本: 学习AI8051U试验箱送实验箱=====实验箱已安排发出