C51点灯学习

devtools/2025/3/16 21:12:16/

#点灯环节

点亮第一个灯

原理:从VCC正极电极过来,若碰到的组件是 1,那么就会不亮(因为两个都是高电平),若碰到的组件是 0,则会通过高低电平来促使灯发亮

#include <REGX52.H>void main()
{P2 = 0xFE;//由高往低数(从P27 ~ P20)1111 1110
}


让灯交互闪烁

#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms()		//@12.000MHz
{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);
}void main()
{while(1){P2 = 0xFE;Delay500ms();P2 = 0xFF;Delay500ms();}
}
/*P2 = 0x49;Delay500ms();P2 = 0xB6;Delay500ms();
*/


流水灯实现

#include <REGX52.H>
void Delay1ms(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void main()
{while(1){P2 = 0xFE;Delay1ms(100);P2 = 0xFD;Delay1ms(100);P2 = 0xFB;Delay1ms(100);P2 = 0xF7;Delay1ms(100);P2 = 0xEF;Delay1ms(100);P2 = 0xDF;Delay1ms(100);P2 = 0xBF;Delay1ms(100);P2 = 0x7F;Delay1ms(100);}
}


独立按键控制灯

#include <REGX52.H>
void main()
{//P3_1 == 0表示按下if(P3_1 == 0)//注意这里的独立按键串口,第一个独立按键是P3_1的串口,第二个独立按键是P3_0的串口{P2_0 = 1;//表示寄存器中8位中的一位}else P2_0 = 0;
}


独立按键控制灯状态

注意:单片机上电后所有串口默认是高电平(1)

#include <REGX52.H>
void Delay1ms(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms){i = 12;j = 169;do{while (--j);} while (--i);xms--;}
}void main()
{while(1){//P2_0 = 0;if(!P3_1){Delay1ms(20);while(!P3_1);Delay1ms(20);P2_0 = ~P2_0;}}
}


实现二进制点灯方式

用需要定义一个字符去表示对应的二进制数,不断累加

#include <REGX52.H>void Delay1ms(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void main()
{unsigned char erjinzhi = 0;while(1){if(P3_1 == 0){Delay1ms(20);while(P3_1 == 0);Delay1ms(20);erjinzhi++;P2 = ~erjinzhi;}}
}


实现按键操控灯移向

单键操控

#include <REGX52.H>
void Delay1ms(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms){i = 2;j = 239;do{	while (--j);} 	while (--i);xms--;}
}void main()
{unsigned char Num = 0;P2 = ~(0x01);//需要初始化P2的第一位,因为不初始化会直接跳过第一位while(1){if(P3_1 == 0){Delay1ms(20);while(P3_1 == 0);Delay1ms(20);Num++;if(Num == 8)Num = 0;P2 = ~(0x01<<Num);}}
}

双键操控

#include <REGX52.H>
void Delay1ms(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms){i = 2;j = 239;do{	while (--j);} 	while (--i);xms--;}
}void main()
{unsigned char Num = 0;P2 = ~(0x01);//ÐèÒª³õʼ»¯P2´®¿ÚµÄÖµ£¬ÒòΪÈç¹û²»³õʼ»¯»áÌø¹ýµÚһλwhile(1){if(P3_1 == 0){Delay1ms(20);while(P3_1 == 0);Delay1ms(20);Num++;if(Num == 8)Num = 0;P2 = ~(0x01<<Num);}if(P3_0 == 0){Delay1ms(20);while(P3_0 == 0);Delay1ms(20);if(Num == 0)Num = 7;else Num --;P2 = ~(0x01 << Num);//这里为什么继续用左移//因为你的Num在执行K1按键的时候,Num自增了1,然后你在决定按K2的时候,Num又自减了1,相当于在K1的基础上右移了一位}}
}

http://www.ppmy.cn/devtools/167646.html

相关文章

网络空间安全(32)Kali MSF基本介绍

前言 Metasploit Framework&#xff08;简称MSF&#xff09;是一款功能强大的开源安全漏洞检测工具&#xff0c;被广泛应用于渗透测试中。它内置了数千个已知的软件漏洞&#xff0c;并持续更新以应对新兴的安全威胁。MSF不仅限于漏洞利用&#xff0c;还包括信息收集、漏洞探测和…

【Rust】枚举和模式匹配——Rust语言基础14

文章目录 1. 枚举类型1.2. Option 枚举 2. match 控制流结构2.1. match 对绑定值的匹配2.2. Option<T> 的匹配2.3. 通配模式以及 _ 占位符 3. if let 控制流4. 小测试 1. 枚举类型 枚举&#xff08;enumerations&#xff09;&#xff0c;也被称作 enums。枚举允许你通过…

【虚幻C++笔记】引擎源码下载及编译步骤

目录 1.在GitHub上访问虚幻引擎源代码2.安装Visual Studio 20223.解压完成以后&#xff0c;打开源码的根目录&#xff0c;选择Setup.bat运行4.选择GenerateProjectFiles.bat运行,生成uE5.sln文件&#xff0c;点击这个文件打开项目5.设置编译的选项&#xff0c;选择DevelopmentE…

XSS跨站脚本攻击

1、什么是XSS攻击 XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击&#xff0c;为了避免与css层叠样式表名称冲突&#xff0c;所以改为xss&#xff0c;是最常见的web应用程序安全漏洞之一。它指的是恶意攻击者往web页面里插入恶意html代码&#xff08;JavaS…

UI-APP---基于HBuilder X的微信小程序

目录 概要 Uni-app 和 HBuilderX 的关系 技术名词解释 ui-app: 概念&#xff1a; 核心特点&#xff1a; 技术细节 基本步骤&#xff1a; 开发流程 项目功能分析&#xff1a; ①首页包括公共头部、导航栏、轮播图、视频列表区域。 ②视频详情页包括公共头部区域、视频详情区域、…

AGI大模型(7):提示词应用

1 生成数据 LLM具有⽣成连贯⽂本的强⼤能⼒。使⽤有效的提示策略可以引导模型产⽣更好、更⼀致和更真实的响应。LLMs还可以特别有⽤地⽣成数据,这对于运⾏各种实验和评估⾮常有⽤。例如,我们可以使⽤它来为情感分类器⽣成快速样本,如下所示: 提示: ⽣成10个情感分析的范…

汽车感性负载-智能高边钳位能量计算

随着汽车电子技术的发展&#xff0c;新的电子电气架构下&#xff0c;越来越多的执行部件在车身出现&#xff0c;比如电磁阀、风机、水泵、油泵、雨刮继电器等常用的执行器&#xff0c; 它们一般都表现为感性特点。驱动这些负载的最简单和最常见的方法是将它们连接到高边侧开关(…

深入解析 TCP/IP 协议:架构、原理与应用

TCP/IP 协议是现代互联网的核心通信协议&#xff0c;它定义了计算机之间如何在网络中传输数据。本文深入解析了 TCP/IP 协议的层次结构&#xff0c;包括应用层、传输层、网络层和链路层的功能与协议。详细介绍了 TCP 和 UDP 的工作原理、IP 地址与路由机制、DNS 的域名解析过程…