初识 51

keil的使用: 

具体细节请移步我上一篇博客:创建第一个51文件-CSDN博客
hex -- 汇编语言实现的文件 -- 直接与单片机对接的文件
单片机 -- 一个集成电脑芯片
单片机开发版  -- 基于单片机的集成电路 

stc 89 c52RC  / RD + 系列单片机 命名规则:


89  -- 版本号?
C -- 工作电压: C:3.3 ~5.5V  LE :2.0~3.6 V
51 -- 程序空间大小  51 --4K 52  --8K  
RC --RAM 大小   RC-- RAM位为512  RD+ 1280
工作频率
工作温度范围
封装类型
管脚数

==================================
 


单片机的思维发散:

1.单片机编程是什么 -- 人类要求单片机干具体的活 -- 体现写好纸条贴冰箱-- 提箱女友扫地
2.单片机执行程序怎么理解 -- 女朋友看到纸条后,照做
3.单片机能做什么事 -- IO口供电, 窜口传输
4.引脚: 方便人堆单片机额IO口,窜口接东西
5.冬季CPU怎么找到IO口: 寻址 -- 头文件 

sfr指令 -- 描述硬件地址: sfr P0=Ox8o; P0=0;
sbit 指令 --对应可寻址空间的一个位,可理解为"'一组IO口 "的起始地址中的数据 sbit led2=P3^6;

C语言的一个字节, char 位8位

^ -- 访问 位

IO口 -- 推荐 使用P1~P3,P4  , 不建议使用P0口 -- 开漏输出 -- 可能会弄坏    
封装 -- LQFP44

IO口的输入 -- 把外面的东西传进来
IO口的输出  -- 把数据传到外面 
Such as:

sbit ifFire=P1^0;

int main()
{
int io_data;
//什么情况叫输入
io_data=ifFire; // 给变量赋值 -- 输入 or 这里引脚有数据啦,拿个变量来保存
if(io_idata == 0) {}
//什么情况输出
ifFire=1; // 赋予一个数值,引起IO电压变化,(1--高 0--低电平),此刻为输出来影响外界设备

return 0;
}


==============================================
test1 -- 点亮一盏灯 -- 给低电平即可
#include"reg52.h"


sbit led1=P3^7;
sbit led2=P3^6;

void main()
{
    
led1=0;
led2=0;
while(1);
}


test2 -- 让led 闪烁 -- 让led 高低电平迅速切换 -- 重复执行

#include"reg52.h"


sbit led1=P3^7;
sbit led2=P3^6;

void Delay500ms()        //@11.0592MHz
{
    unsigned char i, j, k;


    i = 4;
    j = 129;
    k = 119;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

void main()
{
    
led2=0; // led2 一直亮 
    
while(1) // led1 一直闪
{
                led1=0; 
    Delay500ms(); // 给个500ms的延迟间隔 -- 方便观察
    led1=1;
    Delay500ms();
}

========================================


按键控制灯 :

查询法while 控制灯:
判断sw1内按下:
KEY1和GND接通 -- 0

sw1没被按下:
未接通 -- 1 

key1 接到P2^1口


#include"reg52.h"


#include"reg52.h"


sbit led1=P3^7;
sbit key1=P2^1;    
sbit key2=P2^0;    

void main()
{
while(1)
{
 if(key1==0)
 {
 led1=0; 
 }
 if(key2==0)
 {
 led1=1; 
}
}    


}

========================================


消除抖动 


方法 -- 给个延时函数-- 判断是不是人按下的,还是抖动导致,人按下有个约50ms的反应时间

用到_nop(); // 添加头文件 #include<intrins.h>

#include"reg52.h"
#include<intrins.h>

sbit led1=P3^7;
sbit key1=P2^1;    
sbit key2=P2^0;    


void Delay500ms()        //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    i = 4;
    j = 129;
    k = 119;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}


void main()
{
while(1)
{
if(key1==0)

    Delay500ms();
    if(key1==0){
      led1=0; 
    }
}
if(key2==0)
{
    Delay500ms();
    if(key2==0)
    led1=1; 
}
}    

}

=========================


通过一个按键控制灯的开关 ! -- 取反


led1 =!led1;

也可以 定义一个 标记变量 ledMark -- 0 1dai 代表led的电平

keil 编译器有点damn ,局部变量的定义要放在第一行

#include"reg52.h"
#include<intrins.h>

#define ON_STATUS 0
#define OFF_STATUS 1

sbit led1=P3^7;
sbit key1=P2^1;    
sbit key2=P2^0;    


void Delay500ms()        //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    i = 4;
    j = 129;
    k = 119;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}


void main()
{
    int LedMark=OFF_STATUS;    

while(1)
{
if(key1==0)

    Delay500ms();
    if(key1==0){
      LedMark=ON_STATUS;    
    }
}
if(key2==0)
{
    Delay500ms();
    if(key2==0)
    LedMark=OFF_STATUS;    
}
if(!LedMark)
   led1=0;    
else 
    led1=1;    
}    


}


 

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

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

相关文章

Dockerfile常用指令以及使用案例

Dockerfile常用指令以及使用案例 1、ADD复制文件 ADD 指令用于复制文件&#xff0c;格式为&#xff1a;* ADD <src>...<dest>* ADD ["<src>",..."<dest>"]从 src 目录复制文件到容器的 dest。其中 src 可以是Dockerfile 所在目录…

C++初阶:string类模拟实现

本节内容主要针对的是在STL之前的string类的实现&#xff0c;通过模拟实现string类的一些功能来更好地使用string。本篇主要针对的是非const对象&#xff0c;如果要实现const的对象的话&#xff0c;只需要在对应的部分增添上const就行了。编者水平有限&#xff0c;如有错误欢迎…

手把手在K210上部署自己在线训练的YOLO模型

小白花了两天时间学习了一下K210&#xff0c;将在线训练的模型部署在K210&#xff08;代码后面给出&#xff09;上&#xff0c;能够识别卡皮巴拉水杯&#xff08;没错&#xff0c;卡皮巴拉&#xff0c;情绪稳定&#xff0c;真的可爱&#xff01;&#xff09;。数据集是用K210拍…

IndexController

目 录 1 IndexController.. 1 1.1 * 后台管理首页... 2 1.2 * 页面跳转... 2 // 取最新的20条日志... 2 1.3 * 个人设置页面... 3 IndexControllerpackage com.my.blog.website.controller.admin;

Java数组填充:Arrays.fill()方法

Arrays.fill()方法 Arrays 类提供了一个 fill() 方法,可以在指定位置进行数值填充。这个方法属于Java标准库中的java.util.Arrays类 1. 方法介绍&#xff1a; 填充到所有位置 Arrays.fill(Type[] array, Type value) 参数&#xff1a; array 是目标数组&#xff0c;可以是…

linux下minio部署和nginx配置

1 下载minio wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio #启动minio&#xff0c;文件数据存放在/data目录 ./minio server /data2 部署minio 下载minio后赋予可执行权限就可以运行了&#xff0c;这里我整理了遇到的坑和解决问题的最终配置…

算法打卡day21(开始回溯)

今日任务&#xff1a; 1&#xff09;77.组合 77.组合 题目链接&#xff1a;77. 组合 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;带你学透回溯算法-组合问题&#xff08;对应力扣题目&#xff1a;77…

Java多线程学习(概念笔记)

面试题&#xff1a;并行和并发有什么区别&#xff1f; 现在都是多核CPU&#xff0c;在多核CPU下 并发是同一时间应对多件事情的能力&#xff0c;多个线程轮流使用一个或多个CPU 并行是同一时间动手做多件事情的能力&#xff0c;4核CPU同时执行4个线程 面试题&#xff1a;创建线…

JavaScript编写评分控件

编写一个评分控件&#xff0c;用一个单行5列的Table做评分控件&#xff0c;监听td的click事件&#xff0c;点击一个td的时候&#xff0c;将这个td及之前的td背景色变为红色&#xff0c;之后的td背景色变为白色。 关键代码&#xff1a; <!DOCTYPE html> <html lang&q…

HeidiSQL导出SQL文件

目前开发阶段的数据库可视化工具逐渐转为了HeidiSQL&#xff0c;本文讲一讲导出到sql文件的小细节&#xff0c;给自己做个记录补充。 安装或数据库可视化工具比较可参考&#xff1a; windows下全免费手动搭建php8mysql8开发环境及可视化工具安装 导出 原来用Navicat的时候&am…

对象数组与指针与引用

一.对象指针的使用 #include<iostream> using namespace std; class A{ public:A(int a){xa;}void show_a(){cout<<x<<endl;}private:int x; }; int main() { A ob&#xff08;2&#xff09;,*p;//声明A的对象和对象指针 ob.show_a();//利用对象名访问对象的…

什么是面向对象【大白话Java面试题】

什么是面向对象 同样是解决一个问题&#xff0c;面向对象的角度是将问题抽象成对象的形式。通过分类的思维方式&#xff0c;将问题分成几个解决方案的对象。给每个对象赋值属性和方法&#xff0c;对每个对象的细节进行面向过程的思维&#xff0c;执行自己的方法来解决问题。 …

接口测试vs功能测试

接口测试和功能测试的区别&#xff1a; 本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什…

[2023] 14届

1.日期统计 题意 1.日期统计 - 蓝桥云课 (lanqiao.cn) 思路 用dfs扫 对每一个位进行限制 花了一个小时 注意把答案枚举出来 对应一下看到底对不对 code #include<iostream> #include<cstdio> #include<stack> #include<vector> #include<al…

鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

随后迎来了不少互联网公司与华为鸿蒙原生应用达成了合作&#xff0c;像我们常见的阿里、京东、小红书、得物……等公司&#xff0c;还有一些银行也都与华为鸿蒙达成了合作。使得一时之间市场紧缺鸿蒙开发人才&#xff0c;不少公司不惜重金争抢人才。 据智联招聘的最新数据显示…

Acwing 2868.子串分值 贡献法

对于一个字符串 S&#xff0c;我们定义 S 的分值 f(S) 为 S 中恰好出现一次的字符个数。 例如 f(“aba”)1&#xff0c;f(“abc”)3, f(“aaa”)0 现在给定一个字符串 S[0…n−1]&#xff08;长度为 n&#xff09;&#xff0c;请你计算对于所有 S 的非空子串 S[i…j](0≤i≤j…

Java使用数组实现栈、队列、堆

数组模拟栈&#xff1a; const int N 10010; // ******************** 栈 int stk[N], tt//tt是下标; // 插入 stk[k] x; // 删除 tt--; // 判断栈是否为空 if (tt > 0) not empty else empty // 栈顶 stk[tt]; // ******************** 队列 // 在队尾插入…

语音合成(TTS)开源调研与测评

2023年作为AI元年,各个领域的技术都有大规模的革新,语音领域的TTS(语音合成)也有很多新技术出现,比如Bert-Vits2、OpenVoice等等,都风靡一时。 笔者由于工作需要,近一个月在调研开源TTS,由于业务需要,主要看合成音频的效果(MOS)和合成速度(RTF)这两个指标,以及克…

关于vue2和vue3

Vue.js 是一个流行的前端框架&#xff0c;用于构建用户界面。Vue2 和 Vue3 是该框架的两个主要版本&#xff0c;它们之间存在一些关键的区别。下面我将详细介绍这两个版本的区别&#xff0c;并提供使用案例来说明这些区别。 响应式系统的底层实现&#xff1a; Vue2&#xff1a;…

nowcoder运维面试题集锦

TCP套接字中不会阻塞的是哪一种操作&#xff1f; 在TCP套接字中&#xff0c;不会阻塞的操作是绑定操作。具体来说&#xff0c;bind函数用于将特定的IP地址和端口号与套接字关联&#xff0c;这个操作本身并不引起阻塞。而其他一些操作&#xff0c;如读操作&#xff08;read、rea…