IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 初识单片机 -> 正文阅读

[嵌入式]初识单片机

使用keil

1.创建项目工程文件夹,可以当作模板template

2.创建文件,取名main.c(要打开拓展名,在文件夹窗口上赵“查看”,勾选“文件拓展名”)

3.进入keil主页面,工具栏project->new uVision project->选择第一步的工程文件夹位置->输入工程名字 ->选择芯片类型AT89c52->会提示是否拷贝STARTUP.A51,选择是->生成了工程目录->在工程目录Source Group1上右键鼠标->add Exiting file to Source Group1...->选择代码文件main.c

1.编程,新手如果看不懂以下代码,可以忽略,这次实验只是强调开发流程

2.编译,选择输出文件有hex

初始单片机

1.什么是单片机

是一种集成电路芯片

把具有数据处理能力的中央处理器CPU,随机存储器RAM,只读存储器ROM

多种I/O口和中断系统,定时器,计数器等功能(可能还包括驱动电路,脉宽调制电路,模拟多路转换器,A/D转换器等电路)

集成到一块硅芯片上构成一个小而完善的计算机系统,在工业控制领域广泛应用

STC89系列单片机

命名规则,封装LQFQ44,特性定时器,计数器,串口,看门狗,I/O口

单片机有外接电路,他会把单片机里面的针脚引出来变成一个插针,想要让一个蜂鸣器连接到单片机上的某个I/O口,查到插针上就可以了

上面有四组I/O口,有p0,p1,p2,p3,一般不推荐用p0口,因为p0口是开漏电路,可能会导致模块的使用产生问题,其他三个口都可以用

单片机编程是什么:人类要求单片机干具体的活,有点像提前写个小纸条,把它贴在冰箱上,告诉npy应该干什么

单片机程序怎么理解:看到纸条之后照做

单片机能做什么事:I/O口供电,数据的传输等等

肉眼可见的引脚是什么:方便人类对I/O口,串口接东西

单片机CPU怎么找到I/O口:通过寻址,说白了有一些地址数据,头文件帮你做很多了

sfr“指令”:用来直接描述硬件地址,小白先理解成“一组I/O口”,的起始地址中数据?

sfr? P0 =0x80 ;

一号89C52有5组这样的输入输出口,分别为P0,P1,P2,P3,每组对应8个针脚,P4是RC系列才有的,7个针脚

怎么才能找到IO口的具体的一个引脚呢?

sbit“指令”:对应可位寻址空间的一个位,可以先理解成“一个IO/针脚”

C语言一个字节,char型就是8位

对于单片机来说
输入(把外面的东西拿回来)输出(把东西给外面)?

给变量赋值就是

sbit IFfire = P1^0;
int main()
{
int io_data;

什么情况就是输入

io_data = IFfire;给变量赋值,就是输入 --或者理解为,这个针脚有数据了,拿个变量来保存

if(io_data == 0){
    
}

什么情况就是输出

IFfire = 1;
被赋予一个数值,引起IO口电压变化(一般1输出高电平,0输出低电平),此时为输出,来影响外接的电路

return 0;
}

点亮一个LED灯,并闪烁

#include "reg52.h"

sbit LEDone = P3^7;

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

	i = 3;
	j = 206;
	k = 43;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
	//μ?áá
	LEDone = 0;
	//êyêy£??ú????3?μíμ???
	Delay400ms();
	//μ??e
	LEDone = 1;
	//êyêy,?ú????3???μ???
	Delay400ms();
	
}

查询法按键控制灯

怎么知道sw1按键被按下

KEY1位置和GND接通,表现为低电平,值为0

怎么知道sw1按键没有被按下

KEY1位置和GND未被接通,通过上拉电阻到5v,表现为高电平,值为1.

接下来,不断检测STC89C52RC的P2.1的值(0-按下,1-松开),即可知道按键是否被按下

KEY的作用是通过读这个位置来判断sw1

I/O口状态翻转

!符号

如:if(key1 == 0)? ? --->? ? if(!key1 == 0)

#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()
{
	ledOne = 1;
	//查询法检测,是否被按下
	while (1)
	{
		if(key1 == 0)//key1位置和GND位置接通,表现为低电平,值为0.
			{
				//感觉按键被按下,不知道是抖动还是人为
				//增加一个延时
				
				//灯亮,给P3.7一个低电平
				Delay500ms();
				if(key1 == 0){
				ledOne = !ledOne;
				}
			}
		
		if(key2 == 0)
		{
			ledOne = 1;
		
		}
	}
}

当软件的逻辑比较复杂,不希望在判断里面去控制外设,这个时候就需要用到标志位,

定义一个变量,这个变量的值可能是0可能是1,用0和1来表示我记住了某个I/O口的状态,然后再需要修改I/O口的位置去改,

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

#define ON_STATUS 0
#define OFF_STATUS 1

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)//key1位置和GND位置接通,表现为低电平,值为0.
			{
				//感觉按键被按下,不知道是抖动还是人为
				//增加一个延时
				
				//灯亮,给P3.7一个低电平
				Delay500ms();
				//通过外部改变
				if(key1 == 0){
					//记住key1被按下,在其他地方点灯
				ledmark = ON_STATUS;
				}
			}
		
		if(key2 == 0)//key2位置和GND位置接通,表现为低电平,值为0.
		{
			ledmark = OFF_STATUS;
		
		}
		//在这里电灯或者关闭
		//进行判断,电灯或者关闭
		if(ledmark == OFF_STATUS){
			ledOne = 1;//维持高电平,无电流流通,熄灭
		}else{
			ledOne = 0;//维持低电平,有电流流通,点亮
		}
	}
}

key == 0表明和GND接通,维持低电平,值为0

ledOne = 0,表明维持低电平,有电流流通,灯会被点亮

要让灯被点亮,只需给它一个低电平

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:58:04  更:2022-10-08 20:59:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 16:34:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码