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

51单片机:发光二极管与动态数码管控制

裸机:脱离操作系统通过代码直接操控硬件本身
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

课上使用单片机型号:HC6800-MS
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

51单片机的四个寄存器:P0,P1,P2,P3

GNC接地:负极,VCC接电源:正极

LED模块:

在这里插入图片描述
左正极,要实现灯亮需要存在电压差,1代表高电位,0代表低电位,例:P20网络编号呈现低电平,D1灯亮,若P20呈现高电平,D1灯灭。

P2:控制LED模块

在这里插入图片描述

P2.0到P2.7对应的LED模块的P20到P27网络编号,8个LED灯对应的从低位到高位的八位二进制编码,例如在该单片机下的全亮编码:000000000,全灭编码:111111111,在编辑代码时要将8位二进制编码转为16进制编码,例如全灭:0xFF

使用编码软件:

在这里插入图片描述
创建工程定义好工程文件名后选择器件部分:
在这里插入图片描述
在这里插入图片描述
工程创建完毕:
在这里插入图片描述
创建文件
在这里插入图片描述
修改文件名:
在这里插入图片描述
在这里插入图片描述
命名为.c后缀文件

编辑代码:
注意包头文件:reg52.h
在这里插入图片描述
需要手动将文件导入项目文件:
在这里插入图片描述
右键选择:
在这里插入图片描述
在这里插入图片描述
生成hex后缀文件:
在这里插入图片描述
勾选output栏的Create HEX File部分:
在这里插入图片描述
编译:第二个图标
在这里插入图片描述

编写好代码后将代码下载到板子上:
连接成功:
在这里插入图片描述
在这里插入图片描述
根据单片机型号选择正确的芯片型号:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下载编程:
在这里插入图片描述
开关机单片机
成功编程:
在这里插入图片描述
在打开一次程序文件后不需要再次打开
在这里插入图片描述

编辑代码部分:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

指定位清零:(指定灯亮)

在这里插入图片描述

指定位置1(指定位灯灭)

在这里插入图片描述

高四位置1,低四位清零

在这里插入图片描述

利用异或:同号为零异号为真实现状态翻转:

在这里插入图片描述

灯闪,但是频率太高了,若要肉眼观察到闪烁需要加入延迟:

在这里插入图片描述

delay函数最高给到2的16次方

注意编写代码时所有变量要放在花括号后一行:

在这里插入图片描述

相关代码:

.c文件

#include"led.h"
#include<reg52.h>
#include"digiter.h"
#include"delay.h"int main(void)
{while(1){int i;//	P2=0xFF;	  //不用定义P2,P2代表的就是八个灯for(i=0;i<8;++i){led_on(~(1<<i));delay(10000);}for(i=6;i>0;i--){led_on(~(1<<i));delay(10000);}}return 0;
}
#include"led.h"
#include<reg52.h>void led_all_on(void)
{P2=0;
}
void led_off(void)
{P2=0xFF;
}
void led_on(unsigned char n)
{P2=n;
}

.h文件:


#ifndef _LED_H_
#define _LED_H_
extern void delay(unsigned int n);
extern void led_all_on(void);
extern void led_off(void);
extern void led_on(unsigned char n);#endif

动态数码管部分

在这里插入图片描述
在这里插入图片描述

若P1部分低电平,三极管导通,若P1部分低电平,则三极管截止,若想让LEDs1亮,需要P10为高电平,三极管此时导通,LEDS1与地线相连,呈现低电平,存在高低电势差则LEDS1灯亮,若想让灯灭,则让P1部分呈低电平

总共四个数码管,让P1的八位二进制数低四位置0,高四位置1,此时为11110000,

在这里插入图片描述

位选:选择点亮第n个数码管
void bit_select(int n)	 //选择点亮的动态数码管
{P1&=~(0x0F<<0);P1|=(1<<n);
}
==位选:==显示单个数码管的数字
将要点亮的a~dp的部分置1,0为灭

在这里插入图片描述

void segment_select(int n)	 //选择数码管显示的数字
{unsigned char t[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};P0=t[n];delay(300);P0=0;delay(100);
}

单个数码管在灯亮后为避免频闪需要将P0清零,并且灯亮的延迟要长于灯灭的延迟

显示0~9999的数字
void shownumber(int n) //0~9999
{int t=0;if(n==0){bit_select(0);segment_select(0);}else if(n>9999){return;}while(n){bit_select(t++);segment_select(n%10);n/=10;}
}
http://www.xdnf.cn/news/1443601.html

相关文章:

  • 迅为RK3568开发板体验OpenHarmony—烧写镜像-安装驱动
  • dumpsys alarm 简介
  • 关于kafka:consumer_offsets日志不能自动清理,设置自动清理规则
  • Trae x Vizro:低代码构建专业数据可视化仪表板的高效方案
  • 小迪web自用笔记25
  • 年成本下降超80%,银行数据治理与自动化应用实录
  • DS1202示波器的使用教程笔记
  • 【C++八股文】数据结构篇
  • 【Python-Day 42】解锁文本处理神技:Python 正则表达式 (Regex) 从入门到实战
  • FPGA离群值剔除算法
  • wpf 自定义输入ip地址的文本框
  • Linux之shell-awk命令详解
  • Jenkins 可观测最佳实践
  • Jenkins和Fastlane的原理、优缺点、用法、如何选择
  • 记录一下node后端写下载https的文件报错,而浏览器却可以下载。
  • nginx配置端口转发(docker-compose方式、包括TCP转发和http转发)
  • C++ 面试高频考点 力扣 162. 寻找峰值 二分查找 题解 每日一题
  • Apache Kafka:现代数据高速公路的设计哲学
  • 嵌入式硬件 - 51单片机2
  • (11)用于无GPS导航的制图师SLAM(二)
  • AI产品经理面试宝典第84天:RAG系统架构设计与优化策略面试指南
  • C#工作流示例(WorkflowCore)
  • 基于Docker和Kubernetes的CI/CD流水线架构设计与优化实践
  • Go语言实战案例-Redis实现用户登录次数限制
  • 基于单片机车内换气温度检测空气质量检测系统Proteus仿真(含全部资料)
  • 02-Media-3-audio.py 音频输入输出,录音、播放、实时回放演示
  • 在 Android MVVM 架构中,获取 ViewModel 的几种方式
  • 微服务的编程测评系统20-虚拟机-nginx-部署
  • 基于Java的瑜伽馆管理系统的设计与实现(代码+数据库+LW)
  • 【LeetCode】21、合并两个有序链表