查看: 133|回复: 3

[天问STC8]单片机学习笔记(RGB灯控制)

[复制链接]

6

主题

40

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2021-7-22 11:47:00 | 显示全部楼层 |阅读模式
好多天没有写笔记了,老师给了个任务让写一个rgb灯小程序。当然,这个程序太简单了,所以我的想法是怎么给他做出花来。

目录
1、RGB控制 V1.0.
2、RGB控制 V2.0.
3、RGB控制 V3.0。




回复

使用道具 举报

6

主题

40

帖子

112

积分

注册会员

Rank: 2

积分
112
 楼主| 发表于 2021-7-22 12:07:36 | 显示全部楼层
RGB控制1.0

在最初构想rgb小灯时,我研究了rgb小灯的原理,它采用的就是3个灯,1个红灯,1个绿灯,1个蓝灯,用这三个灯的亮度来控制颜色的变化。


而且,在天问Block已经把rgb灯亮起做成了一个函数 rgb_show(),函数内三个变量分别是R、G、B的值。所以,如何控制rgb小灯,就是如何利用开发板中的其他模块控制R、G、B的值。


第一版,我打算利用矩阵键盘控制数值,用key1-key3来选择控制的是R、G还是B,key4清零。


程序如下:







loop()函数



在编程时遇到了一个难题,就是如何保证一次按键只输入一个数字。在电平中断控制模块无法被矩阵键盘控制的情况下,我选择了两个定时器,一个定时器定时长度为50000微秒,给矩阵键盘使用,一个定时长度为1000微秒,控制数码管。



我利用上图来做到每次按键只输入一次,并且把输入在数码管上显示。

我用下图来完成rgb灯的输出。


5.PNG
4.PNG
3.PNG
2.PNG
1.PNG
回复

使用道具 举报

6

主题

40

帖子

112

积分

注册会员

Rank: 2

积分
112
 楼主| 发表于 2021-7-22 12:49:45 | 显示全部楼层
RGB控制V2.0

我在想,对于rgb小灯,用数值控制的方式对于不了解rgb灯的人来说可能不够直观,所以干脆用电位器来控制吧。
还有如果通过数码管来显示RGB的数值,同一时间只能显示一个数值,干脆用OLED来吧,再辅助以点阵告诉你现在控制的是R,G还是B。


程序如下:





OLED只能输入一个字符串,所以使用连接文本函数把RGB和数值连接成一个字符串。

*有一点天问Block需要改进的地方,是连接文本功能是通过定义一个dest[50]数组字符串来完成的,可是它的最大长度只有50,不方便使用。


8.PNG
7.PNG
6.PNG
回复

使用道具 举报

6

主题

40

帖子

112

积分

注册会员

Rank: 2

积分
112
 楼主| 发表于 2021-7-22 17:04:29 | 显示全部楼层
RGB控制V3.0
3.0 的程序我打算用红外模块来完成,远程操控灯光。
使用红外遥控器的上下左右ok这4个按键,上下用来调亮度,左右用来调哪盏灯亮,ok调颜色。





在这一次的3个版本的RGB控制程序中,我发现了一个非常好的工具,就是读写寄存器中的外部代码模块,使用图形模块和代码的结合,既方便我不用记大量的头文件、函数名,又可以在一些复杂的逻辑上用c语言简洁的表达。

岂不美哉。
9.PNG
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2021-9-27 00:19 , Processed in 0.297321 second(s), 25 queries .

Powered by Discuz!

© 2001-2021 Comsenz Inc.

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