三分钟带你玩起来单片机
说到硬件操控,有幸学过初中物理的大神们应该都知道:硬件操控的本质是电子器件两端接上符合规范的高低电压,造成电子流动然后电子器件进行工作。
但是,在实际开发中,一般会使用一段封装好的代码,例如安卓控制闪光灯打开:
try{
m_Camera = Camera.open;
Camera.Parameters mParameters;
mParameters = m_Camera.getParameters;
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
m_Camera.setParameters(mParameters);
} catch(Exception ex){}
这种封装好的代码固然简单方便,但是总是没有利用电流操控底层的快感。而我对单片机的理解是: 单片机通过CPU逻辑运算+IO端口控制电流来控制电子器件的开关 。
那么单片机开发到底是什么呢?它怎么控制电流继而运行起电子元件呢?首先我们来看一个简单的例子。下面是一组八个LED灯的电路原理图:
大家可以考虑一下压抑住自己关掉页面的冲动,其实电路图很简单,经我一讲会更简单。我们先忽视上方的动态数码管,只需仔细浏览红色方框中的电路图,其中D11-D18是八个LED灯,并且负极默认接地(GND)。那么只要在LED灯左侧加上高电压,理论上我们就能让LED发亮,并且我们看到,LED左侧的引线通过好多乱七八糟的电路,最后落到J12上。电路对应实物图如下:
可以看到,J12是一排引脚,或者说是一排导电的金属针,那往后的事情就简单了呀,通过J12想办法接进正电压,我们就能“手动”让硬件点亮了。
想什么办法来接入高电压呢?你是否已经迫不及待地找向身边的插线板?唔…我们不这么玩儿,这么简单粗暴的“手动”和蓝翔的课程还有什么区别?为了稍稍高端一些,我们来试着看一下承载着单片机的MCU板块吧,其原理图如下:
实物图如下:
其中,40接入了VCC(正极),各种PX.X和PXX一一对应起来。事实上,我们把这些PXX叫IO端口,用一个简单粗暴的解释:这些端口能通过CPU逻辑发出或接收高电压或低电压。
相信聪明的看官们已经迫不接待把手伸过屏幕开搞了,没错,我们应该把单片机的输出端口和刚才LED的输入端口串联在一起,然后输出高电压,我们就能通过写写代码把LED完美地点亮了。接线如下(代表IO端口P0的JP10接到代表LED输入的J12):
编程如下:
#include<reg51.h>
void main(void)
{
while(1)
{
P0 = 0xff;
}
}
其中,0xff等价于11111111,也就是八个高电平。写入单片机后,结合默认的八个LED负极已经全部接地,效果如下:
我们可以看到,八个LED全亮
所以总结起来,单片机开发,就是:分析电路板原理图,想办法编程或接线使电子器件两端产生电压差,将所编程序写入单片机,实验失败检查接线代码或坐等控制硬件的快感油然而生。
欢迎各位看官捧场和持续关注~
教你玩单片机之单片机的认识
什么是单片机
单片机就是在一块硅片上集成了微处理器(CPU),存储器(RAM,ROM,E-PROM)和各种输入输出接口(定时器/计数器、并行I/O口、串行口,A/D转换器以及脉冲调制器PWM等),这样一块芯片具有一台计算机的属性,因而被称为单片微型计算机,简称单片机。
而我们理解为单片机就是一块 CPU和很多资源集成在一起的芯片。你可以通过编写程序控制单片机里面的各种资源,和外接I/O口,让它根据你的意愿做出个各种动作(而我们就是要学习怎么控制里面的这些资源)
单片机的预备知识
电平特性
数字电路中只有两种电平:高电平和低电平
高电平:5V或者3.3V,取决单片机电源。
低电平:0V
RS232电平:计算机串口的电平
高电平:-12V
低电平:+12V
所以当我们用单片机跟电脑通信的时候,我们要通过各种元器件将单片机的电平转换为计算机可识别的电平才能跟电脑进行通信。
二进制
由于数字电路中的只有两种电平的特性,计算机中使用的数字采用都是二进制的。
二进制是使用0和1两个数码来表示的数,它的基数是2,进位规则是“逢二进一”。
十六进制
十六进制的基数是F,进位规则是“逢十六进一”。
二进制逻辑运算
“与”运算
有0得0
1&1=1 ;1&0=0 ;0&0=0 ;
“或”运算
有1得1
1|1=1 ;1|0=1 ;0|0=0;
“非”运算
1的非得0,0的非得1。
~1=0;~0=1;
“异或”运算
必须不同,否则没有(0)
1^1=0;1^0=1;0^0=0;
ROM的概念
ROM用来存储我们编写的程序
RAM
RAM用来存放程序运算中使用的数据
我们学习单片机学习什么?
内部
IO,定时器,串口,中断,AD,DA,PWM…(都是通过各种寄存器来控制的,我们学习的就是怎么去操作这些寄存器。)
外部
各种外设,外部模块的原理和应用。(比如说:键盘,LCD,液晶屏,还有各种通信协议。)
实践第一
基本知识:
C51的数据类型扩充定义
sfr:特殊功能寄存器声明
sfr 变量名=地址值;
*特殊功能寄存器在reg51.H这个头文件里面都帮我们定义好了,所以平时我们就不要自己去定义寄存器的名字。
sbit:特殊功能位声明
sbit 变量名=地址值;
*在给某个引脚取名的时候经常会用到。
bit:位变量声明
*用来定义位数据变量
例:sfr SCON = 0X98;
sbit LED = P0^2;
C51中常用到的一些预处理命令
#define
#define A P0(注意后面不用加分号)
#typedef
typedef unsigned char uint;(后面要加分号)
重新定义一些常用的关键词,可以增强程序的可移植性,因为在不同的编译软件上面,C语言的数据类型的关键词的位宽是不一样的。
#ifndef…#endif
条件编译,常用于头文件的定义还有一些程序条件编译
其实,这里边的内容真的仅仅是单片机的一点皮毛,只是为了让大家有点基础的了解与认识。更多的内容大家可以百度百科。
请不要介意,谢谢。
相关问答
玩单片机 ,编程软件对电脑有什么要求吗-ZOL问答用C51语言编程玩单片机,越是低配置的电脑越是方便,老电脑主板的原生COM通讯口就很方便与单片机通讯,很多版本的相关软件都能在XP系统下运行很稳定,而在W7时就要...
在 玩单片机 ,的时候总是会说什么定点运算和浮点运算,始终不明白,这个浮点运算是什么?定点运算实际就是整数(定点小数,可以视为整数)运算,浮点运算实际就是实数运算。假如处理器是32位的,也就是说32位都用来表示整数的话,那么对于无符号整数...
STC12C5204AD 单片机 -ZOL问答STC系列的单片机都可以按照下面连接多余引脚不用管他。有用(0)回复re...steam上有哪些游戏可以在手机上玩儿?1.1万浏览8回答号称对标英伟达、曾市...
只有C语言基础, 玩 过 单片机 ,学习买个什么板子比较好呢?有c语言基础学单片机就很容易多了,建议不要买任何开发板学习板,外面卖的开发板学习板为了多功能学习做了很多兼容设计,线路弯来弯去的,对初学者学习很不利,...
平时不 玩 游戏,可能会用到AE,PS等软件, 单片机 ,编程,是i5+gtx960m好还是i7+gtx950m好呢?求大神指教?散热差距、预算也足够的情况下,考虑后者。I7对你任务的贡献率要远远高出你所谓的独显。但是,如果只是学生级别的应用,I5也是足够的。经济条件足够好的话,考...