找回密码
 立即注册
楼主: laozhaoshiwoa

第一次给Ai8051U核心板下载流水灯程序心得

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:45
  • 最近打卡:2025-02-14 13:39:49
已绑定手机

19

主题

273

回帖

2162

积分

金牌会员

积分
2162
QQ
发表于 2025-1-15 11:09:12 | 显示全部楼层
感谢楼主的支持,打卡的很详细,今天给您免费包邮送AI8051U实验箱,一起分享!一起学习!为中华之崛起而奋斗不息
QQ:1638975601
手机:19952583876(微信同号)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-13 18:11:19
已绑定手机

2

主题

16

回帖

82

积分

注册会员

积分
82
发表于 2025-1-15 14:22:47 | 显示全部楼层
芯*** 发表于 2025-1-15 11:09
感谢楼主的支持,打卡的很详细,今天给您免费包邮送AI8051U实验箱,期待您更多的分享!
...

谢谢你们,我会继续努力学习的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-13 18:11:19
已绑定手机

2

主题

16

回帖

82

积分

注册会员

积分
82
发表于 2025-1-17 12:22:46 | 显示全部楼层
第八节课:定时器周期性调度任务。

一、排查和解决项目中的错误。
在项目代码写完以后,点击编译按钮会对代码进行编译,并在最下面区域显示编译结果,有几个错误,几个警告等,以及那一行有什么错误,警告可以看情况处理,它能执行,错误必须处理结束了才可以运行。
截图202501171907101152.jpg
在上面的图中可以看到有好几个错误,错误从上往下解决,提示内容是第20行有语法错误,一般错误就在这一行或者这一行前面那一行,经过检查是第19行缺少了一个分号结尾,加上后就正常编译了。
截图202501171907522562.jpg
现在是0错误0警告,可以正常执行了。错误的原因多种多样,根据提示信息排查处理就行。
二、在ISP下载软件的CDC/HID-串口助手里可以看到接收缓冲区里显示的内容是:[11:11:14.955]接收←功德+1 当前功德:1,视频上没有[11:11:14.955]接收←这一段,这时候只需要在更多设置里把显示分包数据的收发时间和数据分包显示前面的勾选去掉就行了。
截图202501171224419718.jpg
原来的效果
截图202501171224585144.jpg
修改后的效果。如果去掉这两个勾选后,printf函数里的末尾要加上\r\n才会换行,否则内容不会换行都显示在一起了,如果不去掉这两个勾选,printf函数的末尾不用加\r\n,结果也会换行。
三、周期性任务介绍:
任务一:用一个定时器实现LED灯1每隔300毫秒亮灭切换,LED灯2每隔600毫秒亮灭切换,LED灯3每隔900毫秒切换。
截图202501171225156083.jpg
截图202501171225598682.jpg

3.2、使用数组:
数组是将一组类型一样的变量放到一块儿来使用,用索引来访问数组中指定位置的值。
定义:类型 变量名[长度]={元素1,元素2,元素3……};  例如:int number[6]={1,2,3,4,6,9};
如果已经直接赋值,就不用填写长度,此时值里有几个元素,数组的长度就是几。
赋值:变量名[索引值]=值。如:number[2]=5;
获取:变量名[索引值]。如:int a=number[2];
3.3、for循环:
示例:
for(int i=0;i<5;i++)
{
    printf("i的值是:%d\r\n",i);
}
这里的int i=0是初始条件,可以不写但分号必须有。i<5是每次都要判断的条件,不符合条件时就不会进入循环体中。i++是一个自增操作,每次执行完循环体中的代码后会执行这个,然后再次判断条件是否满足。
{}之间的内容是循环体,每次循环都会执行这里的代码,可以结合break和continue进行特殊处理。
使用数组加for循环实现任务一的效果,代码如下:
截图202501171226143673.jpg
任务二:使用数组实现流水灯效果,灯为1时是灭,为0时是亮,一个P2口上是8个端口,值为0或1,所以这里用两个十六进制来表示。
初始8位都是1,也就是P2=11111111;用十六进制表示是P2=0xFF;现在让第一个灯亮,也就是最后一位值为0,其它位保持0,所以结果是11111110,用十六进制表示是0xFE;让第二个灯亮的时候,8位的值是11111101,这个值用十六进制表示是0xFD;把所有的情况的值都放到数组中,时间到了就切换到下一个数组,这样实现流水灯效果,代码如下:
截图202501171226318901.jpg
任务三:按一下按钮后流水灯切换一位。在这里不能再使用while(P32==0);了,用了这个以后当按下按钮不松开时,代码会阻塞在这里,此时后面的代码就不执行了,所以要换一种方式放一个每10毫秒统计一次的变量,然后当到达10毫秒时如果按键是按下状态,就记录按下的时长,如果按下的时长达到50毫秒,就说明按键是按下状态,此时再让索引增加,以此来解决阻塞代码的问题,代码如下:
截图202501171226486125.jpg
截图202501171227082424.jpg
效果:
截图202501171227198949.jpg
四、文件的创建(.c和.h)
创建程序文件需要三步:
1、新建文件并保存。
2、添加到工程。
3、添加引用路径。
可以把硬件需要的初始化弄一个config.c。一般一个.c文件和一个.h文件,执行一个外设或一个任务或功能。这样可以让代码看起来简洁明了。
新建***.c和***.h文件代表一个功能块,它俩的名字最好一样,容易分清功能。
***.h文件格式:
    #ifndef __***_h
    #define __***_h
    调用头文件
    函数声明……
    #endif
***.c文件格式:
    #include "***.h"
    函数定义
添加文件一定要记得引用路径和添加到工程里。
举例:
1、现在项目里创建一个文件夹,名字是user,所有用户创建的.c文件和.h文件都可以放进这里。
2、然后在keil软件中新建config.c和config.h文件,保存到刚刚创建的user文件夹里。
3、按照格式给config.h文件中写入内容。
截图202501171227364485.jpg
4、把config.c文件添加到工程里,和添加main.c文件的方式一样。
5、在config.c文件中添加引入config.h头文件,代码:#include "config.h"
6、在main.c文件中添加引入config.h文件,代码:#include "config.h"
7、把main.c文件中的那些引入头文件的代码都放到config.h文件中。
8、把数据类型替换的代码页放到config.h文件中。
9、把main.c文件中功能性的代码都放到config.c文件中,并包裹在一个函数中,然后在config.h文件中进行声明,在main.c文件中用到的地方直接调用这个函数就行。
10、把main.c文件中初始化定时器的函数也放到config.c文件中,然后在config.h文件中进行声明。
截图202501171227526005.jpg
截图202501171229507551.jpg

截图202501171229116326.jpg
此时执行编译会发现报错了,提示信息是无法打开config.c文件,那是因为没有添加到工程路径。
截图202501171228437022.jpg
打开魔术棒,按照图上的步骤将创建的那个用户文件夹user添加到里面就可以了。
截图202501171228308544.jpg
处理过后重新编译,可以看到没有错误了,执行效果也是正常的。
截图202501171735216824.jpg
五、结构体数组和周期性任务调度
从任务一中可以看到LED1是0.3秒亮一次,LED2是0.6秒亮一次,LED3是0.9秒亮一次,它们都有一个共同点:
1、有固定的时间(有的0.3秒,有的0.6秒,有的0.9秒);
2、有自己的状态(是亮的状态还是灭的状态);
3、有一个要执行的功能(亮一次);
4、有相同的条件(时间到了才会执行);
这种有多个共同点的东西可以使用一个结构体来处理。
截图202501171734257664.jpg
5、创建task.h和task.c文件用来处理任务的调度,当条件达到就进行判断,判断成立就执行对应的函数。
截图202501171742252691.jpg
task.h文件中的内容,里面定义变量信息。
截图202501171743331426.jpg
task.c文件中的内容,里面存放功能信息。
为了实现代码的功能更清晰有条理,这里再创建io.h文件和io.c文件,这两个文件用来处理IO口的一些操作,比如这里点亮灯的操作。
截图202501171746219063.jpg

io.h文件中的内容,存放一些函数声明。
截图202501171747175150.jpg
io.c文件中的内容,用来放一些要执行的函数。
截图202501171748149009.jpg
main.c文件中的内容。
以上就是这节课的所有内容。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:45
  • 最近打卡:2025-02-14 13:39:49
已绑定手机

19

主题

273

回帖

2162

积分

金牌会员

积分
2162
QQ
发表于 2025-2-6 14:18:20 | 显示全部楼层
加油!期待收到实验箱后更多的测评!
QQ:1638975601
手机:19952583876(微信同号)
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-1 01:58 , Processed in 0.112240 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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