| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 嵌入式 -> 基于STC89C52单片机的霓虹灯 -> 正文阅读 |
|
|
[嵌入式]基于STC89C52单片机的霓虹灯 |
|
基于STC89C52单片机的霓虹灯 1、设计要求? ? ? ??使用PWM驱动8个LED灯 ????????人眼不能观察到灯光全灭 ????????灯光要有动画效果 2、设计概述? ? ? ? 本实验所用芯片为STC89C52,所用硬件是由华清远见基于STC89C52开发的智能小车,该小车具有流水灯模块、蜂鸣器模块、独立键盘模块、矩阵键盘模块等。这里着重介绍流水灯模块,流水灯模块共有八个不同颜色的LED灯,由主控芯片STC89C52的P1端口八个引脚分别控制。此外,STC89C52不具备PWM的硬件模块,所以需要自己写程序模拟PWM方波,PWM就是脉冲宽度调制的缩写,方波高电平时间跟周期的比例叫占空比,例如1s钟内高电平占0.5s,占空比就是50%。 3、原理图以及线路连接? ? ? ? 本实验只需要用到智能小车的核心板,不需要连接线。下图为流水灯模块的原理图
4、要求分析和参考代码? ? ? ? 首先是第一、二条要求?:使用PWM驱动8个LED灯 ????????????????????????????????????????????????人眼不能观察到灯光全灭 ? ? ? ? 由于没有PWM的硬件模块,要用软件实现PWM的话首先就得用到定时器,所以先把定时器要用到的功能设置好。下面是参考代码,首先先把led灯全部灭掉,然后是设置定时器,这里用到的是STC89C52的定时器0,因为方式2的定时是最精准的,在这里也够用,所以设置定时器0的工作方式为方式2;然后就是初值的设置,这里我们设置的周期为100us,也就是每100us进入一次中断,由方式2的初值计算公式 256 - X = 100 解得初值X为156;然后就是将定时器0的中断允许位以及总中断的中断允许位置1,开启总中断以及定时器0中断,最后TR0置1,开启定时器。
? ? ? ? 定时器功能设置好之后就是中断函数了,同样对照参考代码,逐条解释 ? ? ? ? 这里time就是一个无符号变量,每进入一次中断函数就+1,当time==99时,我们就将P1口全部置0,也就是开启LED灯,当time等于100时,我们将P1口全部置1,也就是关闭LED灯,同时将time清0,这样就能实现循环,每进入100次中断,就是一个周期,由于定时器设置的进入中断时间是100us,进入100次的时间也就是100us × 100 = 10ms,由于时间是极短的,人眼不能察觉到它的变化,这样我们就实现使用PWM驱动8个LED灯以及人眼不能观察到灯光全灭的要求。
最后的要求就是?灯光要有动画效果 ? ? ? ? 首先,要有动画效果的话,八个灯的亮度就不能是一致的,不然就看不到灯光的变化,这里,就只要把上面代码中的?P1 = 0xff?改为?P1 = 0xfe ,这样,在P1口置1的时候,P1.0口就不会置1,led0也就不会灭,而其他的led1~led7都会灭掉,这样就静态的显示了一盏灯亮,其他灯相对较暗的效果,但这样还是静态的,要有动画效果,就要让相对较亮的这盏灯不断地移动,要达到这个效果,就只要动态的改变P1口的值就行了,这里设置一个变量t,对应P1口的值,然后动态改变t的值,同时设置一个变量i,表示较亮的灯在当前位置停留的时间。当停留时间足够,即i==10,以后,首先将i清0,然后将i左移,由原先的0000 0001变为0000 0010,然后取反,变成1111 1101,这样较亮的灯,就从led0,变成了led1,然后不断左移,当t==0x80,也就是 1000 0000之后,将t重新置1,不断循环,这样就达到了动态的效果。。
? |
|
|
| 嵌入式 最新文章 |
| 基于高精度单片机开发红外测温仪方案 |
| 89C51单片机与DAC0832 |
| 基于51单片机宠物自动投料喂食器控制系统仿 |
| 《痞子衡嵌入式半月刊》 第 68 期 |
| 多思计组实验实验七 简单模型机实验 |
| CSC7720 |
| 启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
| STM32初探 |
| STM32 总结 |
| 【STM32】CubeMX例程四---定时器中断(附工 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/22 3:09:59- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |