当前位置: 首页 > news >正文

51单片机入门(LED篇)

LED闪烁

当我们需要LED不断闪烁且有一个闪烁间隔时间时,可在STC.ISP上设置,如图:

软件延时计算器

但对于图中的_nop_加上一个头文件:#include<INTRINS.H>

并且要调用生成代码的主函数,即:Delay500ms

独立按键介绍

原有结构

按下时:中间的弹片被压扁,三个接触点就会被连接,四个引脚也全部被连接

松手时:中间的弹片不会被压扁

原理图:

第一个按键用P3_1表示;第二个按键用P3_0表示;第三个按键用P3_2表示;第四个按键用p3_3表示

当P3_1用0表示时说明按键按下,用1表示时说明松开;

例:if(P3_1==0) { Delay(20); while(P3_1==0); Delay(20); }

其中Delay是一个自己编写的延时函数,用来确定独立按键的状态(按下或松开)

这么做的理由:独立按键中间有个弹片,按下时弹片会在按下和松开两种状态下来回切换,20mm后弹片会趋于稳定。

数码管显示

静态

从单片机的左向右LED灯的序列依次减小(8>7>6----)

用代码使其亮灭的原理:先选中LED灯的序号,再控制abcdefg区域的亮灭

  1. 选中序号:

    当选中LED6时,如图所示对应Y5(选中LED4时,对应Y3)

    再用二进制表示5,即:101。

    用P2_2,P2_3,P2_4来对应三位数(规则;高位对高位)

    P2_4=1; P2_3=0; P2_2=1;

    当选中LED4时

    此时P2_4=0;P2_3=1;P2_2=1;

  2. 选中区域:

用P0来表示选中LED

当该区域亮时用1来表示,不亮时用0来表示

上图是LED灯表示为6时的示意图

分析:从下往上依次排开

0111 1101

转化为16进制:7 D

P0=0x7D;此时LED表示为6;

下图为0-9的断码

动态

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F} int Nixie(unsigned char Location,Number) { switch(Location) { case 1:P2_4=1;P2_3=1;P2_2=1;break; case 2:P2_4=1;P2_3=1;P2_2=0;break; case 3:P2_4=1;P2_3=0;P2_2=1;break; case 4:P2_4=1;P2_3=0;P2_2=0;break; case 5:P2_4=0;P2_3=1;P2_2=1;break; case 6:P2_4=0;P2_3=1;P2_2=0;break; case 7:P2_4=0;P2_3=0;P2_2=1;break; case 8:P2_4=0;P2_3=0;P2_2=0;break; } P0=NixieTable[Number]; return 0; } int main() { while(1) { Nixie(1,1); Nixie(2,2); Nixie(3,3); } }

上图是实现LED灯显示数字的代码,但是上图代码并不正确

若用上图代码会使LED灯发生错乱,所以应进行消影或者使用延时函数(Delay)使其呈动态

消影:先关闭前一位显示、再更新下一位数据

int Nixie(unsigned char Location,Number) { switch(Location) { case 1:P2_4=1;P2_3=1;P2_2=1;break; case 2:P2_4=1;P2_3=1;P2_2=0;break; case 3:P2_4=1;P2_3=0;P2_2=1;break; case 4:P2_4=1;P2_3=0;P2_2=0;break; case 5:P2_4=0;P2_3=1;P2_2=1;break; case 6:P2_4=0;P2_3=1;P2_2=0;break; case 7:P2_4=0;P2_3=0;P2_2=1;break; case 8:P2_4=0;P2_3=0;P2_2=0;break; } P0=NixieTable[Number]; 在此处加上;Delay(1);(这是为了让其稳定的显示,否则显示后立即熄灭,在人眼中会感觉到暗 P0=0x00; return 0; }
http://www.jsqmd.com/news/463540/

相关文章:

  • 2024年地级市间交通距离、高铁火车、通勤最短时间
  • 如何用Audiogrep实现智能音频剪辑:语音搜索技术的终极指南
  • 如何快速掌握React Native SVG:从零基础到高性能应用开发全指南
  • 南北阁Nanbeige 4.1-3B惊艳效果展示:CoT折叠面板+流式光标动画+响应延迟实测
  • Sponge框架:从零构建微服务的智能代码生成利器
  • 2026 年度行业观察:品牌出海咨询机构 Top 5 实力解析
  • 如何构建高可靠MQTT消息桥接系统:Mosquitto完整配置指南
  • mlua-rs v0.9:三大革命性特性重塑Rust与Lua交互体验
  • 索尼耳机跨平台控制神器:解锁桌面端音频体验新境界
  • Qwen3-32B人力资源应用:简历筛选助手部署教程
  • Python3.8+Scikit-learn机器学习:快速建模部署教程
  • 智能数据库管理平台:Archery企业级权限管控与自动化运维解决方案
  • 比录屏清晰10倍:微信视频号原画质下载工具
  • daily_stock_analysis镜像CI流水线:模型变更自动触发WebUI回归测试
  • 终极指南:如何使用Java Native Access轻松实现Java与本地代码交互
  • Qwen3-VL-30B部署备份策略:模型快照保存实战教程
  • 【计算机网络——IP地址相关计算】
  • Gemma-3-12B-IT镜像免配置教程:开箱即用的指令微调LLM Web界面
  • 终极指南 | 如何用Toggl Track浏览器扩展实现自动化时间管理
  • Clawdbot汉化版入门指南:无需编程基础,30分钟完成企业微信AI助手上线
  • Llama Factory实战案例:企业知识库微调全流程详细步骤
  • Lychee多模态重排序模型高性能实践:梯度检查点+序列并行降低显存峰值
  • 终极C++并发编程指南:从入门到精通的实战秘籍
  • 如何快速入门在线字体编辑器:让字体设计变得触手可及
  • VibeThinker-1.5B多轮对话测试:上下文保持能力评估教程
  • Stable-Diffusion-v1-5-archive开源大模型:v1.5归档版长期维护与安全更新
  • GPT-SoVITS常用命令汇总:CLI模式部署实战手册
  • 手把手教你在GISBox中添加GeoJSON数据并发布矢量服务
  • C++学习过程中的零散知识
  • Qwen3-ASR-0.6B实战教程:美式/英式/印度式英语口音识别效果对比分析