单片机基础知识

一、单片机基础认知

什么是单片机?
单片机是一种集成电路芯片。单片机又称单片微控制器,是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。一块芯片就成了一台计算机。采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
特点:
单片机的特点是体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
什么是单片机开发板?
基于单片机设计一些外接电路,模块以满足学习,日常调研等工作需求
单片机的命名规则?
封装协议、LQFP44、特性、定时器、计数器、串口、看门狗、IO
在这里插在这里插入图片描述
入图片描述

二、IO口输入和输出

1、对单片机来讲,IO口的输入(把外面的东西拿回来)输出(给东西到外面)

out:指向外输出数据

in: 指向内输入数据

sbit IFfire = P1^0;
 
int main(){
 
    int io_data;
    //什么情况叫输入
    io_data = IFfire;  //给变量赋值,就是输入-----或者理解为,这个针脚有数据啦,拿个变量来保存
    if(io_data == 0){
        
    }
  
    //什么情况叫输出
    IFfire = 1;        //被给予一个值,引起IO口变化(一般1代表输出高电平、0代表输出低电平)
                         此时为输出,来影响外接的电路
    return 0}

三、点亮一个LED

LED:代表二极管

KEY:代表按键

GND:就是0,代表低电平,上电状态

#include "reg52.h"
 
sbit ledOne = P3^7;
sbit ledTwo = P3^6;
void main()
{
	
	ledOne = 0;
	ledTwo = 0;
	
}

1.编程实现LED闪烁

软件延时器的使用

在这里插入图片描述

#include "reg52.h"
 
sbit ledOne = P3^7;
 
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()
{	
	while(1){
	//灯亮,给P3.7一个低电平
	ledOne = 0;
	//数数,数的期间,维持低电平,灯亮,延迟
	Delay500ms();
	//灯灭,给一个高电平
	ledOne = 1;
	//数数,数的期间,维持低电平,灯灭,延迟
	Delay500ms();
	}			
}

2.按下按键点亮灯

如何知道sw1按键被按下?
KEY1位置和GND接通,表现为低电平,值为0
sw1按键没有被按下?
KEY1位置通过上拉电阻到5V,表现为高电平,值为1
由电路图分析可知:
KEY1接到STC89C52的P2.1口,我们只要不断的检测P2.1口的值(0按下,1松开)就能知道按键是否被按下

3.按键的消抖

#include "reg52.h"
#include <intrins.h>
 
sbit key1   = P2^1;
sbit key2   = P2^0;
sbit ledOne = P3^7;
 
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){               //KEY1位置和GND接通,表现为低电平,值为0
					Delay500ms();        //给一个延时处理
					if(key1 == 0){				
							ledOne = 0;  //灯亮,给P3.7一个低电平
					}
			}	
			if(key2 == 0){               //KEY2位置和GND接通,表现为低电平,值为0
					ledOne = 1;          //灯灭,给P3.7一个高电平
			}
	}
}

4.记录状态位来控制LED

#include "reg52.h"
#include <intrins.h>
 
#define ON_STATUS  1
#define OFF_STATUS 0
 
sbit key1   = P2^1;
sbit key2   = P2^0;
sbit ledOne = P3^7;
 
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;
	ledOne = 1;
	while(1){		
			if(key1 == 0){    
					Delay500ms(); 
					if(key1 == 0){
							ledMark = ON_STATUS;  //记住,key1被按下,记住,在其他地方点灯
					}
			}
			if(key2 == 0){    
					ledMark = OFF_STATUS;
			}
			if(ledMark == OFF_STATUS){
					ledOne = 1;
			}else{
					ledOne = 0;
			}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值