51单片机第16步_点灯

本章重点学习软件延时和普通IO口输出。

1、delay.c如下:

#include <intrins.h>  //包含头文件intrins.h,要放在stdio.h的头文件之前;

//使能函数如下:

//1 _nop_(); 相当于汇编的NOP指令;

//2 bit  _testbit_( bit bit_value ); 对bit_value进行测试,若bit_value=1,返回1,否则返回0;

//3 _cror_( unsigned char x, unsigned char n ); 将字节型变量x的值,向右循环移动n位,然后将其值返回;

//相当于汇编的RR A命令;

//4 _iror_( unsigned int x,  unsigned char n ); 将双字节型变量x的值,向右循环移动n位,然后将其值返回;

//5 _lror_( unsigned long x, unsigned char n ); 将4字节型变量x的值,向右循环移动n位,然后将其值返回;

//6 _crol_( unsigned char x, unsigned char n ); 将字节型变量x的值,向左循环移动n位,然后将其值返回;

//7 _irol_( unsigned int x,  unsigned char n ); 将双字节型变量x的值,向左循环移动n位,然后将其值返回;

//8 _lrol_( unsigned long x, unsigned char n ); 将4字节型变量x的值,向左循环移动n位,然后将其值返回;

//以上的循环左移和循环右移,同C语言的左移和右移是不同的,使用时要小心

///函数声明//

void delay_x_10us(unsigned char x);  //延时x个10us@12MHz,0<x<256;

void delay_ms(unsigned int x); //延时x毫秒@12MHz,0<x<1024;

void delay_s( unsigned char x ); //延时x秒@12MHz,0<x<256;

//函数功能:延时x个10us@12MHz,0<x<256;

void delay_x_10us(unsigned char x)

{ while(--x)

    { _nop_();_nop_();_nop_();_nop_();}

  _nop_();

}

//函数功能:延时x毫秒@12MHz,0<x<1024,当x>=1024,delay_ms(x)延时存在误差;

void delay_ms( unsigned int x )

{ unsigned char i;

  i=x>>8;

  while(--x)

    { delay_x_10us(99);

}

  if(i==0)     {delay_x_10us(97);_nop_();_nop_();_nop_();_nop_();_nop_();}

  else if(i==1){delay_x_10us(97);_nop_();_nop_();_nop_();_nop_();}

  else if(i==2){delay_x_10us(97);_nop_();_nop_();_nop_();}

  else         {delay_x_10us(97);_nop_();_nop_();}

}

//函数功能:延时x秒@12MHz,0<x<256

void delay_s( unsigned char x )

{ while(--x)

    { delay_ms(999);

  delay_x_10us(99);

  _nop_();_nop_();_nop_();_nop_();

}

  delay_ms(999);

  delay_x_10us(98);

  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

}

2、main.c如下:

#include <REG51.h>  //包含头文件REG51.h,使能51内部寄存器;

#include <delay.h>

sbit  LED = P1^0;

void main(void)

{ delay_1_cycle(); //延时1us@12MHz;

  delay_2_cycle(); //延时2us@12MHz;

  delay_3_cycle(); //延时3us@12MHz;

  delay_4_cycle(); //延时4us@12MHz;

  delay_5_cycle(); //延时5us@12MHz;

  delay_6_cycle(); //延时6us@12MHz;

  delay_7_cycle(); //延时7us@12MHz;

  delay_8_cycle(); //延时8us@12MHz;

  delay_9_cycle(); //延时9us@12MHz;

  delay_x_10us(1);  //延时10us@12MHz;

  delay_ms(1);      //延时1毫秒@12MHz;

  delay_s(1);       //延时1秒@12MHz;

  

  for(;;)

    { LED=0;

  delay_ms(500);  //延时500ms@12MHz;

  LED=1;

  delay_ms(500);  //延时500ms@12MHz;

}

}

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

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

相关文章

ZooKeeper 入门:初学者指南

在分布式系统领域&#xff0c;协调和同步至关重要。Apache ZooKeeper 是一种分布式协调服务&#xff0c;是帮助管理和同步分布式环境中服务的基本组件。本指南旨在深入分析 ZooKeeper、其架构及其在现代分布式系统中的作用。我们还将探索一个示例来展示其实际影响。 ZooKeeper…

Geeker-Admin:现代化的开源后台管理框架

Geeker-Admin&#xff1a;优雅管理&#xff0c;高效开发&#xff0c;尽在Geeker-Admin- 精选真开源&#xff0c;释放新价值。 概览 Geeker-Admin是一个基于Vue 3.4、TypeScript、Vite 5、Pinia和Element-Plus构建的开源后台管理框架。它为开发者提供了一套现代化、响应式的管理…

vue3的配置和使用

vue的使用需要配置node且node版本需要在15以上。管理员方式打开cmd&#xff0c;输入node -v&#xff0c;可以查看node版本。 创建vue有以下两种方式 npm init vuelatestnpm create vuelatest创建后输入项目名&#xff0c;其它的输入否即可&#xff0c;新手可以先不用 按照要求…

【信息系统项目管理师知识点速记】组织通用治理:转型升级

22.3转型升级 当组织面临社会经济发展环境不断变化、社会竞争日趋激烈、客户和服务对象需求日益个性化、发展空间和发展动能被不断挤压等挑战时,积极主动开展深层次的转型升级是组织可持续发展的关键,适时地进行组织优化调整升级是组织谋求健康发展的迫切要求和必然路径。 …

WebKit 简介及工作流程深度解析

WebKit 是一个开源的浏览器引擎&#xff0c;最初由苹果公司为 Safari 浏览器开发&#xff0c;后来被多个浏览器和应用采纳&#xff0c;如早期的 Chrome 和众多移动平台上的浏览器。WebKit 不仅仅是一个渲染引擎&#xff0c;它集成了 HTML、CSS、JavaScript 的解析与渲染能力&am…

代理ip的种类及区别

HTTP 代理ip HTTP 代理ip是最常见的代理ip类型&#xff0c;它们使用与大多数网站非常兼容的 HTTP 协议。HTTP 代理ip在很大程度上已被淘汰&#xff0c;因为 HTTP 发送的数据未加密。这使得黑客或怀有恶意的用户很容易窃取您的所有数据。 即使有很大的缺点&#xff0c;您仍然可…

安全与加密常识(4)证书签名请求(CSR)

文章目录 什么是CSRCSR的作用如何生成CSR什么是CSR 证书签名请求(Certificate Signing Request,简称CSR)是一个由申请证书的实体(如公司或个人)生成的文件,其中包含申请者的公钥和身份信息(如组织名称、通用名、地点等)。CSR主要用于在数字证书认证过程中向证书颁发机…

解决git无法管理idea后端项目文件

看看后端项目中有没有.iml后缀的文件&#xff0c;把它删掉&#xff0c;然后重新加载maven

【01最短路 BFS】1368. 使网格图至少有一条有效路径的最小代价

如果有不明白的&#xff0c;请加文末QQ群。 本文涉及知识点 01最短路 CBFS算法 图论知识汇总 LeetCode 1368. 使网格图至少有一条有效路径的最小代价 给你一个 m x n 的网格图 grid 。 grid 中每个格子都有一个数字&#xff0c;对应着从该格子出发下一步走的方向。 grid[i]…

【redis】redis分片集群基础知识

1、基本概念 1.1定义 分片&#xff1a;数据按照某种规则&#xff08;比如哈希&#xff09;被分割成多个片段&#xff08;或分片&#xff09;&#xff0c;每个片段被称为一个槽&#xff08;slot&#xff09;。槽是Redis分片集群中数据的基本单元。节点&#xff1a;Redis分片集…

DRAM vs. SRAM:了解动静态随机存取存储器的区别

在计算机领域&#xff0c;DRAM&#xff08;动态随机存取存储器&#xff09;和SRAM&#xff08;静态随机存取存储器&#xff09;是两种重要的存储器类型。它们在结构、工作原理、性能和应用上都有显著的不同。本文将详细介绍这两种存储器&#xff0c;帮助基础小白理解它们的区别…

LLama-Factory使用教程

本文是github项目llama-factory的使用教程 注意&#xff0c;最新的llama-factory的github中训练模型中&#xff0c;涉及到本文中的操作全部使用了.yaml配置。 新的.yaml的方式很简洁但不太直观&#xff0c;本质上是一样的。新的readme中的.yaml文件等于下文中的bash指令 PS: …

利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API

谷歌在2024年4月发布了全新一代的多模态模型Gemini 1.5 Pro&#xff0c;Gemini 1.5 Pro不仅能够生成创意文本和代码&#xff0c;还能理解、总结上传的图片、视频和音频内容&#xff0c;并且支持高达100万tokens的上下文。在多个基准测试中表现优异&#xff0c;性能超越了ChatGP…

LeetCode 每日一题 2024/6/24-2024/6/30

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 6/24 503. 下一个更大元素 II6/25 2732. 找到矩阵中的好子集6/26 2741. 特别的排列6/27 2734. 执行子串操作后的字典序最小字符串6/28 2742. 给墙壁刷油漆6/29 2710. 移除字…

【机器学习】Python sorted 函数

目录&#xff1a; 什么是sorted()函数列表降序排序应用到字符串自定义排序规则实际应用 Python中的内置函数——sorted()。 1. 什么是sorted()函数 在Python中&#xff0c;sorted()是一个内置函数&#xff0c;用于对任何可迭代对象&#xff08;如列表、元组、字符串等&…

macos scroll direction

If there is no Trackpad option, we can change it in the Mouse option. How to Change the Scroll Direction on a Mac: 2 Ways

AliyunOS安装Node.js

方法1&#xff1a;dnf软件包安装工具自动安装 最方便的安装方式是通过系统的dnf工具&#xff0c;我测试使用的AliyunOS的版本是Alibaba Cloud Linux 3.2104&#xff0c;具体流程如下&#xff1a; dnf module list nodejs #列出服务器中可以使用的所有nodejs版本确定下来希望安…

【折腾手机】一加6T刷机postmarketOS经历和体验

写在前面 到目前为止&#xff0c;我已经花了非常多的时间去学习和了解x86架构和RISC-V架构&#xff0c;对它们的指令集编程、指令格式的设计、编译套件的使用都亲自去体会和实践过&#xff0c;学到了很多的东西。但是对于离我们最近的arm架构却了解甚少。为什么说离我们最近呢…

2095.删除链表的中间节点

给你一个链表的头节点 head 。删除链表的中间节点 &#xff0c;并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点&#xff08;下标从 0 开始&#xff09;&#xff0c;其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和…

网络==>总论v4

既然是写ICT方面的文章&#xff0c;就要不断更新版本&#xff0c;不是文学&#xff0c;可以一劳永逸&#xff0c;如果不更新&#xff0c;看十年前或者二十年前的书意义不大&#xff0c;这就是为啥看到很多编程书都更新到第十几版了&#xff0c;因为要与时俱进。 在去一个地方旅…