wu-jia-x 发表于 2024-12-16 21:48:00

AI8051U学习打卡

<h1>AI8051Uapp-translate-content AI8051Uapp-translate-config-button</h1>
<h2>第一集打卡app-translate-content</h2>
<p><img src="data/attachment/forum/202412/16/214322gcqqzqqm4qkqo595.png" alt="image.png" title="image.png" /></p>
<h3>感悟</h3>
<p>不得不说,这个频谱仪真的让我眼前一亮,还有flash传输图片的工具,试验箱的功能太多了。app-translate-content</p>
<p>第一集主要烧录了一些项目的代码,flash功能让我想起了很久以前玩的迪文屏幕,虽然区别很大,但雏形有了。</p>

wu-jia-x 发表于 2024-12-16 22:46:38

<h1>第二集 实验箱介绍、资料下载、环境安装</h1>
<h2>一、试验箱介绍</h2>
<h3>试验箱资源 大体如下图两图所示,资源很齐全,像OLed还考虑到SPI和IIC两种接口,太细心了。</h3>
<p><img src="data/attachment/forum/202412/16/222721z218516266rr6566.png" alt="Pastedimage20241216215414.png" title="Pasted image 20241216215414.png" /></p>
<p><img src="data/attachment/forum/202412/16/222709u08w0m43vvw7g78e.png" alt="Pastedimage20241216220724.png" title="Pasted image 20241216220724.png" /></p>
<h2>二、资源下载app-translate-content</h2>
<h3>手册地址:</h3>
<p><a href="https://www.stcai.com/cp_ai8051uxl">深圳国芯人工智能有限公司-产品_AI8051U系列</a></p>
<p><img src="data/attachment/forum/202412/16/223450r66fz4235f2s4jlj.png" alt="image.png" title="image.png" /></p>
<h3>工具软件以及试验箱:</h3>
<p><a href="https://www.stcai.com/gjrj">深圳国芯人工智能有限公司-工具软件</a>app-translate-content</p>
<p><a href="https://www.stcai.com/syx">深圳国芯人工智能有限公司-实验箱</a>app-translate-content</p>
<p><img src="data/attachment/forum/202412/16/223339ah27lxwbo7t2w2q2.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202412/16/223312gwd5lm3epr00pjpm.png" alt="image.png" title="image.png" /></p>
<h2>三、环境安装</h2>
<p>嘻嘻,偷个懒,我比较推荐安装顺序是</p>
<h3><strong>C51--&gt;C251--&gt;MDK</strong></h3>
<p>这样就可以又玩51单片机也玩STC家32位单片机(兼容C251架构),还可以玩Arm架构的单片机了。</p>

wu-jia-x 发表于 2024-12-17 00:36:34

<h1>第三集 点亮LED灯app-translate-content</h1>
<h2>一、电路基础知识app-translate-content</h2>
<h3>三极管</h3>
<table>
<thead>
<tr>
<th>浅谈三极管</th>
<th>PNP</th>
<th>NPN</th>
</tr>
</thead>
<tbody>
<tr>
<td>符号</td>
<td><img src="https://www.stcaimcu.com/data/attachment/forum/202412/17/001233jwt22cvtamwzmf6q.png" alt="image.png" title="image.png" /></td>
<td><img src="https://www.stcaimcu.com/data/attachment/forum/202412/17/001312nbwrjbw8f5wzz6bj.png" alt="image.png" title="image.png" /></td>
</tr>
<tr>
<td>驱动方法</td>
<td>B极低电平CE两端导通,反之CE截至</td>
<td>B极高电平CE两端导通,反之CE截至</td>
</tr>
</tbody>
</table>
<h3>实验箱LED电路图</h3>
<p><img src="data/attachment/forum/202412/17/001555f7u7yujn489jj4hk.png" alt="image.png" title="image.png" /></p>
<p>由上图可知,P40给低电平,所有LED阳极连接至SYS-VCC,这个时候只需要将阴极所对应的端口(P00~P07)给低电平,即可点亮与其所对应的LED灯。</p>
<h2>二、浅谈 STC AI8051U IO 口app-translate-content</h2>
<p>具体可以详细看一下STC AI8051U 的手册,不得不说,STC家的手册写得真的是很详细,差点爱上了。什么时候出蓝牙、Wifi的,看不懂别人家的蓝牙手册[┭┮﹏┭┮]。</p>
<h3>GPIO口的四种模式</h3>
<p><img src="data/attachment/forum/202412/17/002355aqvlrl3olaj4vn3p.png" alt="image.png" title="image.png" /></p>
<h2>三、代码编写app-translate-content</h2>
<pre><code>#include &lt;stcai8051u.h&gt;

void main(void)
{
    P0M0 = 0; P0M1 = 0; //设置 P0 (P00 ~ P07) 为准双向口
    P4M0 = 0; P4M1 = 0; //设置 P4 (P40 ~ P47) 为准双向口

    P40 = 0;// P40 低电平 三极管CE连接
    P00 = 0;// P00 低电平 LED点亮
    for(;;)
    {
    }
}
</code></pre>
<h2>四、心得app-translate-content</h2>
<p>嗯.......感觉,怎么跟写学校的实验报告一样,不过半夜自己一个人写这些还挺好玩的。写到一个点的时候就会想:“如果我是初学者,我应该不会哪里呢”忍住了长篇大论的心(其实是因为太久没接触忘记得差不多了,只留下了个大概印象,这个是啥,能做啥这样子)于是乎,这个帖子出来了(还有想要实验箱的私心嘿嘿)</p>

wu-jia-x 发表于 2024-12-17 02:15:33

<h1>第四集 USB不掉电下载</h1>
<h2>一、下载所需文件、了解相关下载方式</h2>
<p><a href="https://www.stcai.com/khs">下载地址:深圳国芯人工智能有限公司-库函数</a></p>
<p>首先先下载下面这个库文件包</p>
<p><img src="data/attachment/forum/202412/17/020203e94hod42vz0nr4dm.png" alt="image.png" title="image.png" /></p>
<p>CDC、HID两个都是USB标准的一部分。app-translate-content</p>
<p>CDC(communication device class):主要用于串行通信,模拟传统的串行端口。app-translate-content<br />
CDC(communication device class):主要用于串行通信,模拟传统的串行端口。app-translate-config-button</p>
<p>HID(Human Interface Device):主要用于人机交互,键盘、鼠标等。app-translate-content</p>
<p>不仅可以通过官方提供的这两种方式下载,,还可以通过软复位的方式实现不断电下载,具体查看手册,又得夸一下这手册写得是真好。app-translate-content</p>
<h2>二、移植关键部分到工程实现不断电下载app-translate-content</h2>
<h3>1、首先是这两个文件app-translate-content</h3>
<p><img src="data/attachment/forum/202412/17/020513uttptwp6zeg5dunx.png" alt="image.png" title="image.png" /></p>
<h3>2、其次添加头文件以及相关代码app-translate-content</h3>
<pre><code class="language-c">#include &quot;stcai8051u.h&quot;
#include &quot;stc32_stc8_usb.h&quot;

char *USER_DEVICEDESC = NULL;
char *USER_PRPDUCTDESC = NULL;
char *USER_STCISPCMD = &quot;@STCISP#&quot;;

void main(void)
{
    P_SW2 |= 0x80; //使能访问SFR

    P0M0 = 0; P0M1 = 0; //设置 P0 (P00 ~ P07) 为准双向口
    P4M0 = 0; P4M1 = 0; //设置 P4 (P40 ~ P47) 为准双向口

    P40 = 0;// P40 低电平 三极管CE连接
    P00 = 0;// P00 低电平 LED点亮

    usb_init();            // USB CDC 接口配置
    IE2 |= 0x80;             // 使能USB中断
    EA = 1;

    while(DeviceState != DEVSTATE_CONFIGURED);//等待USB完成配置

    for(;;)
    {
    }
}
</code></pre>
<p>至此,就可通过点击ISP的下载按钮实现不断电下载。app-translate-content</p>
<h1>心得</h1>
<p>懒是推动人类发展的一大动力</p>

wu-jia-x 发表于 2024-12-17 02:50:05

<h1>第五集 C语言基础app-translate-content</h1>
<h2>一、数据类型</h2>
<table>
<thead>
<tr>
<th>类型</th>
<th>位数</th>
<th>字节</th>
<th>值的范围app-translate-content</th>
</tr>
</thead>
<tbody>
<tr>
<td>bit</td>
<td>1</td>
<td></td>
<td>0 or 1app-translate-content 0 或 1app-translate-config-button</td>
</tr>
<tr>
<td>charapp-translate-content 煳app-translate-config-button</td>
<td>8</td>
<td>1</td>
<td>-128 ~ 127app-translate-content -128 ~ 127app-translate-config-button</td>
</tr>
<tr>
<td>unsigned charapp-translate-content 无符号字符app-translate-config-button</td>
<td>8</td>
<td>1</td>
<td>0 ~ 255app-translate-content 0 ~ 255app-translate-config-button</td>
</tr>
<tr>
<td>int</td>
<td>16</td>
<td>2</td>
<td>-32768 ~ 32767app-translate-content -32768 ~ 32767app-translate-config-button</td>
</tr>
<tr>
<td>unsigned intapp-translate-content 无符号整数app-translate-config-button</td>
<td>16</td>
<td>2</td>
<td>0 ~ 65535app-translate-content 0 ~ 65535app-translate-config-button</td>
</tr>
<tr>
<td>floatapp-translate-content 浮app-translate-config-button</td>
<td>32</td>
<td>4</td>
<td>±1.17549435E-38 ~ ±3.4028235E+38app-translate-content ±1.17549435E-38~±3.4028235E+38app-translate-config-button</td>
</tr>
<tr>
<td>doubleapp-translate-content 双app-translate-config-button</td>
<td>64</td>
<td>8</td>
<td>±2.2250738585072014E-308 ~ ±1.7976931348623158E+308app-translate-content<br/>±2.2250738585072014E-308~±1.7976931348623158E+308app-translate-config-button</td>
</tr>
</tbody>
</table>
<p>注意:short = intapp-translate-content 注意:short = intapp-translate-config-button</p>
<h2>二、运算符app-translate-content</h2>
<h3>1、算术运算符app-translate-content</h3>
<table>
<thead>
<tr>
<th>运算符</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>+</td>
<td>相加</td>
</tr>
<tr>
<td>-</td>
<td>相减</td>
</tr>
<tr>
<td>*</td>
<td>相乘</td>
</tr>
<tr>
<td>/</td>
<td>相除</td>
</tr>
<tr>
<td>%</td>
<td>取余</td>
</tr>
<tr>
<td>++</td>
<td>自增,参数加一app-translate-content</td>
</tr>
<tr>
<td>--</td>
<td>自减,参数减一app-translate-content</td>
</tr>
</tbody>
</table>
<h3>2、逻辑运算符</h3>
<p>1为真 0为假,A &amp;&amp; B</p>
<table>
<thead>
<tr>
<th>运算符</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>&amp;&amp;</td>
<td>称为逻辑与运算符。如果两个操作数都非零,则条件为真。app-translate-content</td>
</tr>
<tr>
<td>II</td>
<td>称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。app-translate-content</td>
</tr>
<tr>
<td>!</td>
<td>称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。app-translate-content</td>
</tr>
</tbody>
</table>
<h3>3、关系运算符</h3>
<table>
<thead>
<tr>
<th>运算符</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>==</td>
<td>检查两个操作数是否相等,相等则为真</td>
</tr>
<tr>
<td>!=</td>
<td>检查两个操作数是否相等,不相等则为真</td>
</tr>
<tr>
<td>&gt;</td>
<td>检查左操作数的值是否大于右操作数,是则为真</td>
</tr>
<tr>
<td>&lt;</td>
<td>检查左操作数的值是否小于右操作数,是则为真</td>
</tr>
<tr>
<td>&gt;=</td>
<td>检查左操作数的值是否大于或等于右操作数,是则为真</td>
</tr>
<tr>
<td>&lt;=</td>
<td>检查左操作数的值是否小于或等于右操作数,是则为真app-translate-content</td>
</tr>
</tbody>
</table>
<h2>三、判断、循环app-translate-content</h2>
<h3>1、判断</h3>
<pre><code class="language-c">
if(条件)
{
    满足条件则进到大括号里运行大括号里的程序,反之跳出
}

if(条件)
{
    满足条件则进到大括号里运行大括号里的程序,反之进入else
}
else
{
    不满足if中的条件则进到大括号里运行大括号里的程序
}

多重分支判断
if(条件)
{
    满足条件则进到大括号里运行大括号里的程序,反之进入进入下一个if判断
}
else if(条件)
{
    不满足上一个if,若满足这个if 条件,则进入,反之进入else
}
else
{
    不满足上面两个if 的条件则会执行到这里
}
</code></pre>
<h3>2、循环app-translate-content</h3>
<pre><code class="language-c">
while(条件)
{

}

for(初始化语句;条件;完成一次循环后执行的语句)
{

}
// 区别于while\for的是do{}while()先执行一遍再判断
do
{

}while(条件)

break 可以跳出循环,终止循环
continue 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
</code></pre>

wu-jia-x 发表于 2024-12-17 12:37:41

<h1>第六集 IO口输入输出app-translate-content</h1>
<h2>一、GPIOapp-translate-content</h2>
<p>GPIO(General Purpose Input/Output Ports)通用输入输出端口,能输出高低电平或者读取引脚状态(高低电平)。</p>
<h3>1、STC AI8051U GPIO 模式介绍</h3>
<p><img src="data/attachment/forum/202412/17/120756z0djvmx50hbgv5ee.png" alt="image.png" title="image.png" /></p>
<p>灌电流:电流从外部进入(灌入)IO口</p>
<p>拉电流:电流从IO口被拉出</p>
<p><img src="data/attachment/forum/202412/17/121002rnqxzqgqjyzq0zac.png" alt="image.png" title="image.png" /></p>
<h2>二、按键电路基础知识app-translate-content</h2>
<h3>1、实验箱电路</h3>
<p><img src="data/attachment/forum/202412/17/121313htaz967hjk0a7daj.png" alt="image.png" title="image.png" /></p>
<p>由图可知,按下按键后,引脚被拉至低电平。app-translate-content</p>
<h3>2、按键消抖app-translate-content</h3>
<p>机械按键由于自身结构,按下和松开瞬间都有有一定的抖动,为了避免误触发,所以需要消除抖动,达到确认按键按下的目的。app-translate-content</p>
<p><img src="data/attachment/forum/202412/17/121812gqhuv0n5scoss99v.png" alt="image.png" title="image.png" /></p>
<p>按键消抖一般有两种方法,一种是通过并联电容实现硬件消抖,一种是软件定时检测实现消抖,软件消抖一般时间在20ms以内。app-translate-content</p>
<p>由图可知,实验箱木有满足硬件消抖的条件。app-translate-content</p>
<h2>三、课后任务app-translate-content</h2>
<h3>1、题目 按一下亮一颗灯,在按一下亮两颗灯,直到全亮app-translate-content</h3>
<h3>2、实现</h3>
<pre><code class="language-c">#include &quot;stcai8051u.h&quot;
#include &quot;stc32_stc8_usb.h&quot;
#include &quot;intrins.h&quot;

char *USER_DEVICEDESC = NULL;
char *USER_PRPDUCTDESC = NULL;
char *USER_STCISPCMD = &quot;@STCISP#&quot;;

void Delay20ms(void)      // 24.000Mhz
{
    unsigned long edata i;

    __nop_();
    __nop_();

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

void main(void)
{

    unsigned char i = 0;

    WTST = 0;   //设置程序指令延时参数,
    EAXFR = 1;//扩展寄存器(XFR)访河使能
    CKCON = O;//提高访问XRAM速度

    P0M0 = 0; P0M1 = 0; //设置 P0 (P00 ~ P07) 为准双向口
    P3M0 = 0; P3M1 = 0; //设置 P3 (P30 ~ P37) 为准双向口
    P4M0 = 0; P4M1 = 0; //设置 P4 (P40 ~ P47) 为准双向口

    P40 = 0;// P40 低电平 三极管CE连接
    P0 = 0xff;

    usb_init();            // USB CDC 接口配置
    IE2 |= 0x80;             // 使能USB中断
    EA = 1;

    while(DeviceState != DEVSTATE_CONFIGURED);//等待USB完成配置

    for(;;)
    {
       if(P32 == 0)
       {
          Delay20ms();
          while(P32 == 0);
          if(i &gt;= 8)
          {
             i = 0;
             P0 = 0xff;
          }
          else
          {
             P0 |= (1 &lt;&lt; i);
             i++;
          }
       }
    }
}
</code></pre>
<h2>四、心得</h2>
<p>嗯......还行,视频里教得很详细。</p>

soma 发表于 2024-12-17 12:46:01

这个while(P32 == 0);用的好啊,只有按键释放才执行后面任务,但是这样的话按键不释放就一直是之前的动作。

wu-jia-x 发表于 2024-12-17 14:43:40

<h1>第七集 定时器中断app-translate-content</h1>
<h2>一、定时器介绍app-translate-content</h2>
<p>定时器,可以简单理解成一个沙漏,沙子的数量、漏孔的大小决定了什么时候沙子会漏完。</p>
<h3>1、STC AI 8051U 定时器资源</h3>
<p><img src="data/attachment/forum/202412/17/141933kv6u1n33et1utrrt.png" alt="image.png" title="image.png" /></p>
<p>查看手册第十六章可以看到一共有六个定时器,都支持24位模式。</p>
<h3>2、定时器模式</h3>
<p>以定时器1举例,共有4种模式(具体各定时器所拥有的模式需要查看手册,这里简单举例)</p>
<p><img src="data/attachment/forum/202412/17/142241i8q00o00hit8lm8m.png" alt="image.png" title="image.png" /></p>
<h4>对于模式0,如下图所示:app-translate-content</h4>
<p>GATE 门控位,TR1启动定时器,AUXR的第六位选择时钟分频,C/T选择脉冲来源,TH1、TL1是计数寄存器,RL_TH1、RL_TL1是TH1和TL1的影子寄存器,TF1是中断标志位,发生中断时TF1 = 1,需要手动清零。</p>
<p><img src="data/attachment/forum/202412/17/142350etntgjjeglnptanr.png" alt="image.png" title="image.png" /></p>
<p>对于模式1,如下图所示:app-translate-content</p>
<p><img src="data/attachment/forum/202412/17/142453oql5q8v7a765qw65.png" alt="image.png" title="image.png" /></p>
<p>对于模式2,如下图所示:</p>
<p><img src="data/attachment/forum/202412/17/142506bnt4kkgkorz8jxxt.png" alt="image.png" title="image.png" /></p>
<h3>3、定时器计算方式app-translate-content</h3>
<p><img src="data/attachment/forum/202412/17/142608gmjimizjfnjf6qjz.png" alt="image.png" title="image.png" /></p>
<p>通过上图的同时可以很方便算出TH1和TL1的具体值。app-translate-content</p>
<h2>二、工具介绍 STC-ISPapp-translate-content</h2>
<p>STC家提供了很方便的工具 --&gt; STC-ISP,像IO口、定时器、串口、CAN等都可以直接生成,间接屏蔽了底层,我们只需要处理程序的主要逻辑即可。</p>
<p><img src="data/attachment/forum/202412/17/144050aq03g2uz6of3wiwr.png" alt="image.png" title="image.png" /></p>
<h2>三、心得app-translate-content</h2>
<p>虽然有STC-ISP这样方便的工具使用,但最好还是明白他的基本原理,出问题的时候也知道该从哪里排查起。</p>
<p>支持国产,国产winwinwin</p>

wu-jia-x 发表于 2024-12-17 14:44:08

soma 发表于 2024-12-17 12:46
这个while(P32 == 0);用的好啊,只有按键释放才执行后面任务,但是这样的话按键不释放就一直是之前的动作。 ...

嗯嗯是的

wu-jia-x 发表于 2024-12-18 16:59:44

已经收到实验箱啦,这几天考完试继续打卡😘
页: [1]
查看完整版本: AI8051U学习打卡