C51相关实验

C51相关实验

LED

//功能:1.让开发板的LED全亮,2,点亮某一个LED,3.让LED3以5Hz的频率闪动

#include "reg52.h"

#define LED		P2
sbit led1 = LED^1;


void main(void)
{
	LED = 0xff;//LED全灭
    led1 = 0;
	while(1)//保持应用程序不退出
	{

	}
}

LED 输出端是高电平 所以要让LED点亮只需要让MCU输出低电平即可,内置引脚是P2,所以要让哪个亮只需要让哪个引脚为0 例子:LED^3=0;让第三个LED亮起
在这里插入图片描述

蜂鸣器 (P2^5)

对于无源蜂鸣器,通过改变脉冲频率就可以调节蜂鸣器的音调,产生各种不同的音色,音调的声音。
对于无源蜂鸣器,通过改变脉冲占空比(高电平占用脉冲周期的百分比)就可以改变蜂鸣器声音的大小。

在这里插入图片描述

//功能:让蜂鸣器以100HZ频率,50%音量,响10s
#include "reg52.h"

typedef unsigned int 	u16;
typedef unsigned char 	u8;

//定义BEEP的控制引脚
sbit BEEP	=	P2^5;//申明蜂鸣器的控制引脚

//以秒为单位的延时器
void delay_ms(unsigned int ms){
		 unsigned int i,j;
		 for(i=ms;i>0;i--)
		 	for(j=123;j>0;j--);
}						

//u8frequency:蜂鸣器的工作频率,范围2Hz-1KHz
//u8duty:蜂鸣器脉冲占空比,范围0-100;
//times:以秒为单位的时间,范围大于0
void Beep(u8 u8frequency,u8 u8duty,u8 times)
{
	u16 i;
	u16 period ,on_time ,off_time;
	
//参数校验 防止越界
	if(u8frequency>1000) u8frequency = 1000;
	if(u8frequency==0) u8frequency = 10;

	if(u8duty>100)u8duty = 100;
	if(u8duty == 0)u8duty = 1;

	if(times == 0)times = 1;

	 period =  1000/u8frequency;//以毫秒为单位的周期
	 on_time = period/100*u8duty;	//计算高电平的时间,以毫秒为单位 1周期内高电平
	 off_time = period - on_time;
	for(i=0;i<u8frequency*times;i++)//遍历10s内所有的脉冲
	{
		 BEEP = 1;
		 delay_ms(on_time);
		 BEEP = 0;
		 delay_ms(off_time);	
	}
}

void main()
{
		Beep(100,50,10);
	   while(1)	//保持应用程序不退出
	   {  

	   }
}

多频率

//功能:/*	  多频率声音输出:
//需求:蜂鸣器应能够输出不同频率的声音。
//实现:定义一个频率数组u16 frequencies[] = {1000, 1500, 2000, 2500}包含若干个频率值。程序会循环遍历这些频率,产生相应的声音。
#include "reg52.h"

typedef unsigned int 	u16;
typedef unsigned char 	u8;
typedef unsigned long 	u32;

//定义BEEP的控制引脚
sbit BEEP	=	P2^5;//申明蜂鸣器的控制引脚

//u16Frequency:蜂鸣器的工作频率,范围2Hz-5KHz
//u8duty:蜂鸣器脉冲占空比,范围0-100;
//u16durations:以秒为单位的时间,范围大于0
void Beep(u16 u16Frequency,u8 u8duty,u16 u16durations);

//以毫秒为单位的延时
void delay_ms(unsigned int ms){
		 unsigned int i,j;
		 for(i=ms;i>0;i--)
		 	for(j=123;j>0;j--);
}						

//以10微秒为单位的延时
void delay_10us(u16 ten_us)
{
	while(ten_us--);
}

void main()
{
	u16	u16Freqs[] = {1000,1500,2000,3000};//定义一个频率数组
	u8	u8duty = 50;
	u8 i;
	u8 num = sizeof(u16Freqs)/sizeof(u16Freqs[0]);

	for(i=0;i<num;i++)
	{
		Beep(u16Freqs[i],u8duty,2);	
		delay_ms(1000);//每次蜂鸣器在切换频率之间,停1s
	}

	while(1)	//保持应用程序不退出
	{  
	
	}
}

void Beep(u16 u16Frequency,u8 u8duty,u16 u16durations)
{
	u16 i;
	u32 period ,on_time ,off_time;
	
//参数校验
	if(u16Frequency>5000) u16Frequency = 5000;
	if(u16Frequency==0) u16Frequency = 1000;

	if(u8duty>100)u8duty = 100;
	if(u8duty == 0)u8duty = 1;

	if(u16durations == 0)u16durations = 1;

	 period =  1000000/u16Frequency;//以微秒为单位的脉冲周期
	 on_time = period/100*u8duty;	//计算高电平的时间,以微秒为单位
	 off_time = period - on_time;
	for(i=0;i<u16Frequency*u16durations;i++)//遍历所有的脉冲
	{
		 BEEP = 0;
		 delay_10us(on_time/10);//延时是以10us为单位的延时,这里需要除10
		 BEEP = 1;
		 delay_10us(off_time/10);	
	}
}

数码管

数码管是一种半导体发光器件,其基本单元是发光二极管。
按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数 码管。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数 码管。

在这里插入图片描述

共阴或者共阳,a-g+小数点总共8段对应8个引脚,下面是对应显示,a-g从低到高
在这里插入图片描述

LED数码管显示器工作方式有两种:静态显示方式和动态显示方式。
静态显示的特点:每个数码管的段选必须接一个8位数据线来保持显示的字形码。
静态显示:也就是不需要刷新显示写在while外面,反之写在里面

在这里插入图片描述

1.定义数码管的端口的IO。#define SMG_1 P0
2.定义数码管编码数据 u8 smg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//数码管显示
#include "reg52.h"

// 数码管控制引脚别名
#define SMG P0

// 毫秒延时函数
void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for (i = 0; i < ms; i++) {
        for (j = 0; j < 123; j++); // 123 是一个经验值,根据实际情况调整
    }
}

typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;

// 0-F 共阴八段数码管编码
u8 smg_code[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 
                 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

// 数码管位选引脚
sbit SMG_22 = P2^2; // 第一个数码管控制位
sbit SMG_23 = P2^3; // 第二个数码管控制位
sbit SMG_24 = P2^4; // 第三个数码管控制位

void SMG_display(void)
{
	  u8 i;
	   for(i=0;i<8;i++)
	   {
	   		//从高到低
	   		//SMG_22=i%2;
			//SMG_23=(i/2)%2;
			//SMG_24=i/4;
			//从低到高
			SMG_22=!(i%2);
			SMG_23=!((i/2)%2);
			SMG_24=!(i/4);
	   		SMG=smg_code[i];
			delay_ms(1);
			SMG = 0;//消影
	   }
}
void main(void) {
    u16 i;
    while(1) {
       SMG_display();
    }
}

在这里插入图片描述

独立按键

在这里插入图片描述

从上图中可以看出,4个独立按键的控制管脚连接到51单片机的P3.0-P3.3 脚上。其中K1连接在P3.1上,K2连接在P3.0上,K3连接在P3.2上,K4连接 在P3.3上。4个按键另一端全部连接在GND,当按键按下后,对应IO口即为低 电平。
在这里插入图片描述
由于机械按键大概有10ms 的误差

按键控制LED灯亮


//独立按键 按键1LED1亮
#include "reg52.h"

//毫秒延时函数
void delay_ms(unsigned int ms) {
	unsigned int i, j;
    for (i = 0; i < ms; i++) {
        for (j = 0; j < 123; j++); // 123 是一个经验值,可以根据实际情况调整
    }
}
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
//定义独立按键引脚
sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
//定义LED灯引脚
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
//独立按键控制led灯
void key_contralled()
{
	if(KEY1==0)
	{  	
		delay_ms(10);//消抖
		if(KEY1==0)	 LED1=!LED1;
		
		delay_ms(200);
	}
	if(KEY2==0)
	{
		delay_ms(10);//消抖
	 	if(KEY2==0)	LED2=!LED2;
		delay_ms(200);
	}
	if(KEY3==0)
	{
		delay_ms(10);//消抖
	 	if(KEY3==0)	LED3=!LED3;
		delay_ms(200);
	}
	if(KEY4==0)
	{
		delay_ms(10);//消抖
	 	if(KEY4	==0)	LED4=!LED4;
		delay_ms(200);
	}
}
void main(void)
{
	
	while(1)//保持程序不退出
	{
		key_contralled();	
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923082.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【测试工具JMeter篇】JMeter性能测试入门级教程(一)出炉,测试君请各位收藏了!!!

一、前言 Apache JMeter是纯Java的开源软件&#xff0c;最初由Apache软件基金会的Stefano Mazzocchi开发&#xff0c;旨在加载测试功能行为和测量性能。可以使用JMeter进行性能测试&#xff0c;即针对重负载、多用户和并发流量测试Web应用程序。 我们选择JMeter原因 是否测试过…

人工智能(AI)与机器学习(ML)基础知识

目录 1. 人工智能与机器学习的核心概念 什么是人工智能&#xff08;AI&#xff09;&#xff1f; 什么是机器学习&#xff08;ML&#xff09;&#xff1f; 什么是深度学习&#xff08;DL&#xff09;&#xff1f; 2. 机器学习的三大类型 &#xff08;1&#xff09;监督式学…

STM32WB55RG开发(5)----监测STM32WB连接状态

STM32WB55RG开发----5.生成 BLE 程序连接手机APP 概述硬件准备视频教学样品申请源码下载参考程序选择芯片型号配置时钟源配置时钟树RTC时钟配置RF wakeup时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙LED配置设置工程信息工程文件设置参考文档SVCCTL_A…

虚拟机CentOS系统通过Docker部署RSSHub并映射到主机

公告 &#x1f4cc;更新公告 20241124-该文章已同步更新到作者的个人博客&#xff08;链接&#xff1a;虚拟机CentOS系统通过Docker部署RSSHub并映射到主机&#xff09; 一、编辑 YUM 配置文件 1、打开 CentOS 系统中的 YUM 软件仓库配置文件 vim /etc/yum.repos.d/CentOS-Ba…

React(五)——useContecxt/Reducer/useCallback/useRef/React.memo/useMemo

文章目录 项目地址十六、useContecxt十七、useReducer十八、React.memo以及产生的问题18.1组件嵌套的渲染规律18.2 React.memo18.3 引出问题 十九、useCallback和useMemo19.1 useCallback对函数进行缓存19.2 useMemo19.2.1 基本的使用19.2.2 缓存属性数据 19.2.3 对于更新的理解…

【漏洞复现】|百易云资产管理运营系统/mobilefront/c/2.php前台文件上传

漏洞描述 湖南众合百易信息技术有限公司&#xff08;简称&#xff1a;百易云&#xff09;成立于2017年是一家专注于不动产领域数字化研发及服务的国家高新技术企业&#xff0c;公司拥有不动产领域的数字化全面解决方案、覆盖住宅、写字楼、商业中心、专业市场、产业园区、公建、…

远程控制软件:探究云计算和人工智能的融合

在数字化时代&#xff0c;远程控制工具已成为我们工作与生活的重要部分。用户能够通过网络远程操作和管理另一台计算机&#xff0c;极大地提升了工作效率和便捷性。随着人工智能&#xff08;AI&#xff09;和云计算技术的飞速发展&#xff0c;远程控制工具也迎来了新的发展机遇…

漫谈 module caching——PyCharm jupyter notebook 在导入模块被更新后无法及时同步问题

目录 引子&#xff1a;问题的发现何为 module caching见微知著&#xff1a;Python 中的缓存机制参考链接 引子&#xff1a;问题的发现 近日笔者用 PyCharm 创建了一个项目时不经意间发现了这个问题&#xff1a;事情发生在调试 Jupyter Notebook 的过程中。当笔者修改了自己编写…

企业数字化转型现状

国家数字经济战略背景 2018年以来&#xff0c;国家政府不断出台政策规范我国企业数字化治理市场。2018年9月颁布《关于发展数字经济稳定并扩大就业的指导意见》&#xff0c;支持建设一批数字经济创新创业孵化机构。积极推进供应链创新与应用&#xff0c;支持构建以企业为主导。…

《Python基础》之算数、比较、赋值、逻辑、位运算符

目录 简介 Python中常见的运算符 1、算数运算符 2、比较运算符 3、赋值运算符 4、逻辑运算符 5、位运算符 总结 简介 Python 提供了多种运算符&#xff0c;用于执行各种操作&#xff0c;包括算术运算、比较运算、逻辑运算、位运算、赋值运算等。以下是 Python 中常用的…

学习threejs,使用设置bumpMap凹凸贴图创建褶皱,实现贴图厚度效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshPhongMaterial高…

【CSP CCF记录】201809-2第14次认证 买菜

题目 样例输入 4 1 3 5 6 9 13 14 15 2 4 5 7 10 11 13 14 样例输出 3 思路 易错点&#xff1a;仅考虑所给样例&#xff0c;会误以为H和W两人的装车时间是一一对应的&#xff0c;那么提交结果的运行错误就会让你瞬间清醒。 本题关键是认识到H和W的装车时间不一定一一对应&…

道品智能科技移动式水肥一体机:农业灌溉施肥的革新之选

在现代农业的发展进程中&#xff0c;科技的力量正日益凸显。其中&#xff0c;移动式水肥一体机以其独特的可移动性、智能化以及实现水肥一体化的卓越性能&#xff0c;成为了农业领域的一颗璀璨新星。它不仅改变了传统的农业灌溉施肥方式&#xff0c;更为农业生产带来了高效、精…

【PCB设计】AD16教程:分配位号

1、前提条件 确保已经基本画完原理图 2、点击【Tools-Annotate Schematics】 3、依次点击【Reset All】、【Update Changes Lise】、【Close】 最后位号就被自动分配好了

20241125编译友善之臂的NanoPi R3S开发板【RK3566】STEP-BY-STEP版本

20241125编译友善之臂的NanoPi R3S开发板【RK3566】STEP-BY-STEP版本 2024/11/25 15:59 20241125编译友善之臂的NanoPi R3S开发板【RK3566】精简步骤 2024/11/25 19:37 viewproviewpro-ThinkBook-16-G5-IRH:~$ viewproviewpro-ThinkBook-16-G5-IRH:~$ df -h viewproviewpro-T…

uniapp实际开发遇到过的问题(持续更新中....)

1. 在ios模拟器上会出现底部留白的情况 解决方案&#xff1a; 在manifest.json文件&#xff0c;找到开源码视图配置&#xff0c;添加如下&#xff1a; "app-plus" : {"safearea":{"bottom":{"offset" : "none" // 底部安…

计算机网络:应用层知识点概述及习题

网课资源&#xff1a; 湖科大教书匠 1、概述 习题1 1 在计算机网络体系结构中&#xff0c;应用层的主要功能是 A. 实现进程之间基于网络的通信 B. 通过进程之间的交互来实现特定网络应用 C. 实现分组在多个网络上传输 D. 透明传输比特流 2 以下不属于TCP/IP体系结构应用层范畴…

数据治理:在企业数据管理中的关键角色与实现路径——《DAMA 数据管理知识体系指南》读书笔记- 第 3 章

文章目录 1. 数据治理的核心内涵与战略价值2. 数据治理的驱动因素&#xff1a;不仅仅是合规3. 数据治理的组织模型&#xff1a;选择适合企业结构的运营模式4. 实施数据治理的关键步骤&#xff1a;战略、制度和文化5. 数据治理工具的选择&#xff1a;支持业务与流程的高效管理6.…

递推概念和例题

一、什么是递推 递推算法以初始值为基础&#xff0c;用相同的运算规律&#xff0c;逐次重复运算&#xff0c;直至求出问题的解&#xff0c;它的本质是按照固定的规律逐步推出&#xff08;计算出&#xff09;下一步的结果 这种从“起点”重复相同的的方法直至到达问题的解&…

【Android】RecyclerView回收复用机制

概述 RecyclerView 是 Android 中用于高效显示大量数据的视图组件&#xff0c;它是 ListView 的升级版本&#xff0c;支持更灵活的布局和功能。 我们创建一个RecyclerView的Adapter&#xff1a; public class MyRecyclerView extends RecyclerView.Adapter<MyRecyclerVie…