当前位置: 首页 > news >正文

初识 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.lryc.cn/news/328535.html

相关文章:

  • 【回溯与邻里交换】纸牌三角
  • 微服务(基础篇-004-Feign)
  • Linux IRC
  • 五、Elasticsearch 集成
  • Qt 完成图片的缩放拖动
  • Linux 内核工具 iptables 配置TCP/UDP端口转发(命令参考)
  • love 2d Lua 俄罗斯方块超详细教程
  • SpringBoot+ElasticSearch实现文档内容抽取、高亮分词、全文检索
  • 利用Redis实现简单的短信登录
  • 在 Linux 中通过 SSH 执行远程命令时,无法自动加载环境变量(已解决)
  • c++使用类的一些注意事项
  • C++蓝桥考级一级到十八级的考点内容整理
  • C++智能指针简单剖析
  • mysql笔记:25. docker环境中mysql主从复制、主主复制实操
  • 大数据面试专题 -- kafka
  • 深度学习入门简单实现一个神经网络
  • win11 环境配置 之 Jmeter(JDK17版本)
  • Windows下载使用nc(netcat)命令
  • istio 设置 istio-proxy sidecar 的 resource 的 limit 和 request
  • flutter弹框
  • 2013年认证杯SPSSPRO杯数学建模B题(第一阶段)流行音乐发展简史全过程文档及程序
  • 代码随想录算法训练营第39天 | 62.不同路径, 63不同路径II
  • Redis 的慢日志
  • 第十四届蓝桥杯第十题:蜗牛分享
  • 不懂技术的老板,如何避免过度依赖核心技术人员
  • Vue系列-el挂载
  • python--os和os.path模块
  • 前端通用命名规范和Vue项目命名规范
  • NTP服务搭建
  • Linux离线安装mysql,node,forever