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

51单片机学习(五)数码管显示

如有大佬发现我文章里的错误,希望多多指出,或者有缺少的也欢迎告诉我,我会尽快补充上去的,感谢各位的支持,要互三的d我哦!

一.数码管

数码管显示屏和U4 74HC245

U574H138译码器

一位数码管引脚定义

一个数码管由八个LED组成

连接方式:共阴:阴角都连在一起

共阳:阳极都接在一起

就近原则

如何显示数字

假设需要显示6

共阴极:

则需要将AFEDGC点亮

首先公共端接地

10111110为段码

共阳极

公共端选中,位选段给相应数字

四位一体数码管

每一位的公共端分别引出来

所有相同的位选段连在一起

在第三位上显示数字1,如何驱动

共阴:

首先确定位码,共阴接1不通,接0导通

再给段码,要点亮一,就是点亮BC段

共用引脚(静态数码管显示)的缺点:节省了引脚,但是在同一时刻,只有位数码管被点亮,就算点亮多个,显示的也是相同的数字

这边就是数电的知识

C51数组

超过范围有可能不会报错,但是结果不对

C51子函数

二.程序编写

数码管显示任意数字

让第三个数码管显示6

注意顺序从下往上读

#include <REGX52.H> void main() { //第三个是LED6接在Y5上 P2_4=1; P2_3=0; P2_2=1; //5的二进制为101 P0=0x7D;//acdefg亮则对应0111 1101转为十六进制就是0x7D while(1) { } }

如果要换成第四位显示6,改成P2_2=0即可

运用子函数

数组大括号后面的分号别忘了(我就是因为忘了,报了一堆错,找了半天原因)

#include <REGX52.H> unsigned char SgnTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F}; void Sgn(unsigned char Location,unsigned char 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=SgnTable[Number]; } void main() { Sgn(7,2); while(1) { } }

结果就是第7个数码管显示2

动态数码管显示

需要加消影

因为数码管在工作时是先位选再段选之后就是循环,先选位置,但是位置还残留着上一个函数的数字,上一个段选通过新的段选数据改变,但在改变之前先进行了位选

所以需要在段选之后加一个清零步骤,对下一位就没有影响了

#include <REGX52.H> unsigned char SgnTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F}; typedef unsigned int u16; void delay(u16 i) { while(i--); } void Sgn(unsigned char Location,unsigned char 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=SgnTable[Number]; delay(1000); P0=0x00; //清0 } void main() { while(1) { Sgn(1,1); delay(20000); Sgn(2,2); delay(20000); Sgn(3,3); delay(20000); } }

右下角74h595

http://www.cnnetsun.cn/news/1598351.html

相关文章:

  • Win + 字母快捷键
  • 保姆级教程:用ZCANPRO和USBCANFD-200U从零开始玩转CAN总线数据收发与DBC解析
  • Linux命令:update
  • 用Python验证微积分公式:从泰勒展开到积分计算(SymPy实战)
  • mkdir 命令文档 - Linux 目录创建命令详解
  • 3步实现网易云音乐插件自由:BetterNCM Installer全场景安装指南
  • 仅限前500位开发者获取:20年MCP协议老兵手写《Python服务器模板源码认知地图》PDF+可执行调试镜像
  • 用Python和Bluez 5.50在Ubuntu 20.04上,手把手教你做个能被手机发现的BLE广播设备
  • WebSocket C扩展加速:speedups模块性能优化终极指南
  • 知识库邮件通知系统终极指南:5分钟配置自动订阅和提醒功能
  • 如何通过InstantClick事件回调实现精准的性能监控:开发者必备指南
  • zynq7020 u-boot 外设配置实战指南
  • Dism++开源工具:企业与个人用户的系统优化全指南
  • Z-Image-Turbo开箱即用体验:访问8080端口,开启你的极速创作之旅
  • PDF安全保护指南:常用加密方式有哪些?怎么选?
  • 新能源储能必看:BMU主控与从控单元在光伏电站中的典型应用案例
  • 终极指南:如何用115proxy-for-kodi插件在电视上流畅播放115云盘视频
  • 3个步骤+7大模块:Win11Debloat帮你彻底清理Windows 11臃肿问题
  • FFT算法实战:用Python手写Cooley-Tukey蝴蝶变换(附完整代码)
  • Dify+MCP Server避坑指南:从零开始构建企业级AI智能体的完整流程
  • 手把手教你用VMware Workstation单机部署华为VRM管理节点(含gandalf账户密码重置教程)
  • 终极指南:如何构建现代化微服务架构 - Zend Framework Expressive完整教程
  • 手把手教你用Python脚本调用Xinference的Rerank API,打造你的本地RAG排序引擎
  • 像素特工实战案例:上传店铺照片,5分钟拿到陈列优化建议
  • 快速上手SAM 3:记住这3个关键步骤,分割图片视频不求人
  • 区域高亮标注:革新PDF文档交互体验解决非文本标注痛点
  • [CrewAI] 第15课|构建一个多代理系统来实现自动化简历定制和面试准备
  • Apache HBase异步文件系统实现原理:提升IO性能的终极指南
  • 5个维度教你选择付费墙绕过工具:从入门到精通的开源工具决策指南
  • 数字人部署从未如此简单:lite-avatar形象库小白友好教程