51单片机快速入门之按键应用拓展

news2024/9/22 6:55:40

51单片机快速入门之按键应用拓展

LED的点动控制:

循环检测,当key 为0 时 led 亮 反之为熄灭

while(1){

if(key!=1)

{

led=0;

}else

{

led=1;

}

}

LED的锁定控制:

当按钮按下,led取反值 

while(1)

{

if(key!=1)

{

led=!led;

}

}

LED的4路抢答控制: 

bz默认为0 !bz 取反值,循环启动  key默认为1 取反值 0 if不执行

按钮按下key变为0 反值为1 执行操作并退出检测循环

bit bz;

while(!bz)

{

if(!key)

{

 ...........//执行led点亮操作

bz=1;//跳出循环

}

else if(!key1){...}

else if(!key2){...}

else if(!key3){...}

}

while(bz){

if(!rekey)

{

bz=0;

}

}//复位

LED数码管控制:

数码管一般都是这样界定的

   

            搭建仿真电路     

 

这里使用的是共阳数码管,之所以用74HC和本次电路没什么大的关系! 

我们要显示数字1就需要点亮B C 

八位二进制应该为1001 1111 转换成十六进制 0x9F

这里要注意的是 单片机 最高位(MSB)(对应P2.7),最低位(LSB)(对应P2.0)

图片来源于STC官方数据手册:


在二进制表示中,最高位(MSB)位于最左边,最低位(LSB)位于最右边。

所以八位二进制会颠倒过来,为1111 1001 转换成十六进制 0xF9

小知识:在C、C++、Java等语言中,按位取反操作符是波浪线 ~

编写程序代码测试:

模拟效果:

下面是数码管通用表格:

(图片来源于网络)

这里的"H"是一个常见的习惯用法,用来表示后面的数是以十六进制表示的

实际程序编写中为了,兼容性推荐使用0x明确表示这是一个数值常量

所以我们可以通过一个字符型表格来操作

以下是详细代码:

#include <STC89C5xRC.H>


	 int LED=0XF9;//声明一个变量
			 unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

void delay(unsigned int t);//延时函数声明


void main()
{          int i;
			 for(i=0;i<10;i++){
			 	P2=table[i];//P2已经在STC89C5xRC.H文件中被 声明
				 delay(183);//延迟1s
				  delay(183);//延迟1s
				  delay(183);//延迟1s

			 }
	
			



}
void delay(unsigned int t){
	unsigned int x,y;
for(x=0;x<t;x++){ 
	for(y=0;y<1000;y++);  } 

}

uchar就是unsigned char ,意思就是定义一个无符号字符型数据 8位数,,范围是 0-255 占用一个字节。
正解: code的作用就是告诉单片机,定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,

因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器)

所以在软件中添加了这一个语句起到代替汇编指令的作用

对应的还有data是存入RAM的意思。

其他关键词的意思:
code :程序存储区(64KB),
data :可直接寻址的内部数据存储区(128B)
idata:不可直接寻址的内部数据存储区(256B)
bdata:可位寻址内部数据存储区(16B)
xdata:外部数据存储区(64KB)
pdata:分页的外部数据存储区                    
原文链接:icon-default.png?t=O83Ahttps://blog.csdn.net/qq_44419614/article/details/107002333

code:
通常用于表示程序存储区,这是用来存放程序代码的地方。
在某些微控制器中,比如8051,程序存储空间是64KB的地址空间,
这个区域的变量需要用code关键字修饰,表明这些数据是在程序存储器中,
而不是在数据存储器中。

data:指的是可以直接寻址的内部数据存储区,
一般对应于微控制器内部的RAM(随机存取存储器),
大小通常为128字节(有些变体会更多)。
这个区域的数据访问速度最快,因为它们在CPU的内部。

idata:间接寻址的内部数据存储区,
通常是指内部RAM中不能直接通过寄存器寻址的部分,
大小可能是256字节。这部分内存需要通过间接寻址的方式来访问。

bdata:位寻址的内部数据存储区,
通常是内部RAM中的特定部分,允许对存储单元中的位进行单独操作。
在8051中,这个区域通常是可位寻址的16字节(即128位)。

xdata:扩展数据存储区,通常指的是外部RAM(相对于内部RAM),
可以是64KB的地址空间。这个区域的数据访问速度比内部RAM慢,
因为需要通过外部总线访问。

pdata:分页的外部数据存储区,
当系统的外部数据存储空间被组织成分页结构时使用。
pdata访问通常需要使用额外的寻址指令,以指定当前要访问的页面。

这些关键字在标准C语言中并不标准,
而是针对特定嵌入式环境的扩展,比如在KEIL C51编译器中用于8051微控制器的编程。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git快熟

Git版本控制 内容背景集中式与分布式版本控制安装git代码托管服务Git必要配置公钥和私钥注册gitee配置ssh公钥实现远程仓库与本地仓库免密登录git常用命令git|全局设置获取git仓库工作区&#xff0c;暂存区&#xff0c;版本库 概念本地仓库操作远程仓库提交git分支操作idea集成…

<Linux> 进程间通信

目录 一、进程间通信介绍 1. 进程间通信概念 2. 进程间通信目的 3. 进程间通信的本质 4. 进程间通信发展 5. 进程间通信分类 管道&#xff08;文件缓冲区&#xff09; System V IPC POSIX IPC 二、管道 1. 匿名管道 1.1 匿名管道原理 1.2 pipe系统调用 1.3 匿名管道的使用 1.4…

vue3 透传 Attributes

前言 Vue 3 现在正式支持了多根节点的组件&#xff0c;也就是片段&#xff01; Vue 2.x 遵循单根节点组件的规则&#xff0c;即一个组件的模板必须有且仅有一个根元素。 为了满足单根节点的要求&#xff0c;开发者会将原本多根节点的内容包裹在一个<div>元素中&#x…

【MySQL】基础部分——DDL,DML,DQL,DCL,函数,约束,多表查询,事务

个人学习记录&#xff0c;供以后回顾和复习 ubuntu下安装使用1.DDL&#xff0c;DML&#xff0c;DQL&#xff0c;DCLDDL数据库表 DML增改删 DQL条件查询分组查询排序查询分页查询 DCL管理用户权限控制 2.函数字符串函数数值函数日期函数流程函数 3.约束4.多表查询多表关系内连接…

学习大数据DAY58 增量抽取数据表

作业 1 SQL 优化的常见写法有哪些 - 面试经常被问 使用索引&#xff1a;合理创建和使用索引是提高查询效率的关键。索引可以加速数据的检 索速度&#xff0c;但是索引也会占用额外的存储空间&#xff0c;并且在插入、删除和更新操作时会 有额外的开销。 避免全表扫描&…

Git+Jenkins 基本使用(Basic Usage of Git+Jenkins)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Linux命令分享 四 (ubuntu 16.04)(vi操作文件)

1、su 切换用户 su - 用户名 切换到该用户并将目录切换至该用户的主目录 **注意该语句执行后需要输入密码&#xff0c;输入密码时终端不回显&#xff08;不会显示你输入的密码&#xff09;&#xff0c;输完直接回车即可 su 用户名 切换用户但不切换目录 su - root su root **注…

你可能遗漏的一些C#/.NET/.NET Core知识点

前言 在这个快速发展的技术世界中&#xff0c;时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节&#xff0c;以帮助大家更全面地了解这些技术栈的特性和发展方向。 拾遗补漏Git…

NISP 一级 | 5.3 电子邮件安全

关注这个证书的其他相关笔记&#xff1a;NISP 一级 —— 考证笔记合集-CSDN博客 0x01&#xff1a;电子邮件安全威胁 电子邮件&#xff08;Electronic mail&#xff0c;Email&#xff09;是一种用电子手段提供信息交换的服务方式&#xff0c;是因特网上应用最为广泛的服务之一。…

【原创 架构设计】多级缓存的应用、常见问题与解决方式

1. 简介 多级缓存是一种常见的性能优化手段&#xff0c;对于多级缓存一般意义上的理解具体主要实现其实指的就是本地缓存和分布式缓存。 本地缓存一般采用Caffeine或者Guava Cache来进行实现&#xff0c;而分布式缓存一般采用Redis来进行实现。 2. 业务流程 业务线程先在本…

聚类_K均值

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs1.数据预处理 #创建基于高斯分布的样本点, x是点的坐标&#xff0c;y是所属聚类值 x, y make_blobs(n_samples100, centers6, random_state100, cluster_std0.6) # 设置图形尺寸…

整数在内存中的存储原码反码补码

目录 1.整数在内存中以二进制的形式存在 1.1&#xff08;正数存储情况&#xff09; 1.2 负数存储情况 1.3整数的补码如何得到原码 2.无符号整数的原反补码 小心&#xff01;VS2022不可直接接触&#xff0c;否则&#xff01;没这个必要&#xff0c;方源面色淡然一把抓住&am…

Linux网络——守护进程、会话、进程组

文章目录 会话守护进程编写守护进程的注意事项编写样例 会话 会话是session&#xff0c;代表的是客户端与服务器的一次交互过程&#xff0c;我们可以简单理解为&#xff0c;当我们打开一个终端&#xff0c;在用户登录时&#xff0c;就是创建了一个会话 一般来说会话都与各自的…

62. 不同路径、64. 最小路径和

思路 dp&#xff1a;代表到达当前位置的总方式 初始化&#xff1a;第一行的位置dp[0][j]&#xff1a;当前位置只能由左边的位置向右移动得到 所以只有1种方式 d[0][j]1, d[0][0]1 第一列的位置 dp[i][0]&#xff1a;当前位置只能由上一个位置向下移动得到 除此之外的位置可以由…

python画图|同时输出二维和三维图

前面已经学习了如何输出二维图和三维图&#xff0c;部分文章详见下述链接&#xff1a; python画图|极坐标下的3D surface-CSDN博客 python画图|垂线标记系列_如何用pyplot画垂直x轴的线-CSDN博客 有时候也需要同时输出二位和三维图&#xff0c;因此有必要学习一下。 【1】…

三明儿童自闭症寄宿制学校:关爱、教育、成长一站式服务

三明儿童自闭症寄宿制学校的启示&#xff1a;广州星贝育园——自闭症儿童的一站式成长乐园 在探讨自闭症儿童教育的道路上&#xff0c;寄宿制学校以其独特的优势&#xff0c;为孩子们提供了集关爱、教育、成长于一体的全方位服务。虽然文章开头提及了“三明儿童自闭症寄宿制学…

AI预测体彩排3采取888=3策略+和值012路或胆码测试9月15日升级新模型预测第81弹

经过80多期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;已到达90%的命中率&#xff0c;这给喜欢打私菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大部…

请求响应-05.请求-日期参数JSON参数

一.日期参数 当浏览器发起的请求参数类型是日期参数时&#xff0c;我们通常使用LocalDateTime对象来接收&#xff0c;前面使用DateTimeFormat注解来完成日期的格式转换&#xff08;日期时间格式有多种&#xff0c;需要哪种就设置为哪种&#xff1a;如yyyy-MM-dd HH:mm:ss&…

C++比大小游戏

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> #include <Windows.h> using namespace std; int main() {int ir 1;char chparr[2] { 0 };int ip1 0;int ip2 0;int i 1;c…

【ARM】Cache深度解读

Cache的基本概念和使用场景 不同的Master硬件共享数据时—invalid cache 外设和DDR之间没有cache&#xff0c;所以外设直接把数据写入DDR中&#xff0c;但是cpu和DDR之间有cache&#xff0c;cpu会首先访问cache&#xff0c;如果命中直接从cache中拿数据&#xff0c;但是此时的…