单片机键盘消抖如何实现_如何学习单片机

单片机键盘消抖如何实现,如何学习单片机?

学习单片机之前,需要有一些基础知识的准备,例如元器件知识、模拟电路、数字电路、C语言等这些知识需要知道一点。这些知识有一个直观的概念就行了,具体的更深入的知识,可以在单片机学习中逐步加深理解和学习。

然后,需要根据所选的单片机,了解该单片机的主要功能、熟悉其对应的开发环境;

最后,要有相应的单片机电路板和相应的仿真、编程工具,把单片机程序“烧录”到电路板上的单片机内,根据设计功能,观察电路板的运行是否符合设计初衷。

一、知识准备1、元器件知识

知道基础元器件的功能和用法,例如要知道电阻的功能主要是限流、分压,电阻在电路中有串联、并联、混联的接法,知道电容的功能是“隔直通交”,在单片机电路中,有很多滤波电容。

2、模拟电路知识

二极管、三极管的基本电路,了解单片机的电源电路、复位电路、晶振电路的工作原理。

3、数字电路

这个最好多学一些,因为单片机本身就是一个数字器件,其运行原理主要是数字电路原理。了解各种门电路,最好能够熟悉IC数字芯片的真值表,了解串行通信,IIC通信,SPI通信等。

4、C语言知识

现在单片机开发绝大多数都使用C语言开发,需要简单了解C语言的基本语法、算术和逻辑运算符,基本程序结构(顺序、选择、循环等),尤其要知道各种数据类型所表示的数值范围,这个会在单片机编程里面很有用。

二、单片机和开发环境选择1、单片机选择

现在很多人说学单片机可以直接从cortex m0或m3学起,我觉得,如果基础较弱的话,还是从STC 51单片机开始,还可以选择AVR单片机。

为什么推荐这两种单片机,因为一个单片机环境要想真正运行起来,最终还是需要有专用的编程工具(很多人称为烧录工具)将程序“烧录”到单片机内部,这样才能真正让单片机按照程序设计流程运行。而这个专门工具是特制的,现在STC的51单片机只需要一根U转串的线就可以将程序“烧录”到单片机内,而AVR单片机的编程工具非常容易自制,并且成本不超过20块钱,至于其它单片机,它们的烧录工具一是不容易自制,二是价格较高,所以部特别推荐。

另外就是51单片机和AVR单片机的开发资料,学习教程在网上最多,这样当学习中遇到问题的时候,可以在网上获取很多经验。

2、开发环境的选择

基本上每种单片机都有各自特色的开发环境,但是这些开发环境基本都是各自为战,很少有一种开发环境能够支持多种单片机的开发。

在这里推荐2个开发环境,

一是51单片机的KEIL开发环境,二是IAR开发环境,IAR开发环境是目前功能最为强大,支持单片机种类最多的一种开发环境(IAR支持51单片机,AVR,PIC,MSP430,ARM等几乎所有主流单片机,但是对每一种单片机都有一套开发包,不过基本开发配置和流程大体相近)。

51单片机的开发环境,不用说肯定是首选keil,这个是最早,也是功能最强的51单片机开发环境,另外,熟悉了KEIL后,对于后续开发MDK也会有一个很快的熟悉过程,因为MDK就是脱胎于KEIL的。

AVR单片机的开发环境很多,目前用的较为普及的是GCC、ICC AVR,以及AVR STDUIO,这三种的使用教程在网上较多,所以还是推荐这三种。

三、实战选择

目前有三种方式学单片机,一种是通过真正的单片机学习板,现在这种学习板很多,并且板载的功能也非常多,这是一个途径,还有就是通过单片机仿真软件学习,目前有proteus(支持51,AVR,MSP430,CORTEX等),还有电路仿真软件multisim也可以仿真51单片机的运行过程。第三就是自己从零开始搭建学习板,我当年学AVR的时候,就是自己买的洞洞板,一步一步焊接出来一个学习板的。

1、使用单片机学习板学习单片机

这种方式可以不用过多关注硬件电路,直接熟悉单片机编程技能,当然,学习板上的电路一般都是经过验证的,比较实用,所以可以直接学到相应电路的工作原理以及电路设计;

2、使用proteus学习单片机

目前这个软件普及度已经很高了,并且网上相关的教程也很多,用这个软件学习单片机的一个好处是不用买学习板以及配套的编程工具,还有就是可以自己同时学习电路设计和编程技能,但是缺点就是这个软件的电路设计只是功能上的,具体到电路性能指标和各种参数,这个软件不能准确的模拟出来。不过作为入门以及基础原理的学习,这个软件还是很好的。

3、自己搭建学习板

我当时学习AVR单片机的时候,就是买的洞洞板和各种器件,从单片机最小系统开始搭建,最后焊成了一个包含串口,串转并,并转串,AD转换,SPI、IIC总线,LCD液晶、数码管显示等各种电路。

这种方式有多种优点既可以学习编程,还学会了电路设计,又锻炼了动手能力,甚至还学会了基础的电路故障检查和维修。

不过这种方法需要很大的耐心和毅力。

四、单片机学习入门

1、学会开发环境的使用

2、熟悉单片机最小系统的工作原理

3、熟悉单片机编程的基本结构、流程、语法

单片机8个LED灯随机闪烁怎么做?

方法:

1:设定一个变量i,可以从0到3循环的变化

2:检测一个经过消抖处理的按键,按一下,i+1

3:当i值为各个值时,执行相应的花样。

流水灯参考程序

#include

#include

#define uchar unsigned char

uchar j,temp;

void delay(unsigned int ms)

{

uchar t;

while(ms--)

for(t=0;t

}

void main()

{

P1=0xff;

delay(500);

temp=0xfe; //有点怪,led接在P2.3~P2.6

for(j=0;j

{

P1=temp;

delay(500);

temp=_crol_(temp,1);

}

P1=0xff;

while(1);

}

汪汪队游戏机怎么做?

1. 汪汪队游戏机可以自己动手制作。2. 首先,你需要准备一个空的纸箱作为游戏机的外壳,然后在纸箱上切割出屏幕和按钮的位置。 其次,你可以使用彩色纸或者涂料来装饰游戏机的外观,使其更加生动有趣。 接着,你可以在屏幕位置上粘贴一张卡片或者绘制一些图案,作为游戏的界面。 最后,你可以使用纸板或者其他材料制作一些按钮,然后将它们粘贴在纸箱上,作为游戏的操作按钮。3. 如果你想要进一步延伸,你可以在游戏机上添加一些额外的功能,比如音效或者灯光效果,以增加游戏的乐趣。另外,你还可以设计一些简单的游戏规则,让自己和朋友一起玩汪汪队游戏机,增加互动性和娱乐性。

如何给ic芯片烧录程序?

s可编程类芯片,如单片机、DSP、FPGA等,在写完程序后,需要编译成可执行文件烧录到芯片中,芯片才能按照所设定的逻辑去执行任务。不同芯片所使用的烧录软件、编程器都是不同的,烧录过程其实并不复杂。在需要用到一款可编程芯片时,要先准备编程环境IDE、烧录软件以及编程器。下面介绍几款单片机以及烧录方法。

1 51单片机的烧录软件、工具以及烧录方法

这里所说的51单片机主要是指国产的STC单片机,STC单片机可以用keil C51版本来编写程序,程序编译完成后会生成hex文件,可以使用STC-ISP软件来烧录,所用到的硬件烧录器为USB/TLL串口工具。烧录软件的界面如下图所示。

STC51单片机在烧写时用的是USB/TTL,其实就是通过单片机的UART来实现的,需要用到四根线:VCC、TXD、RXD、GND。两者的VCC、GND对应相连,TXD和RXD要交叉连接。烧录软件需要注意的是,要正确选择单片机型号、串口号、选择加载hex文件,点击下载/编程后,需要给单片机断一下电再上电,这时就会看到下载过程。烧录成功会有提示。

2 STM系列单片机的烧录软件、工具以及烧录方法

STM具有8位和32位两个版本,STM8可以用IAR for STM8来编程,用STVP来烧录,所用到的工具为STLINK,烧录软件的使用基本上大同小异。STVP在烧录STM8时,需要配置硬件工具,选择STLINK,编程方式选择SWIM,然后选择型号。如下图所示。

需要需要烧录的HEX或者S19文件。再选择烧录机可。STM32还可以使用MCUISP来烧录,要用到USB/TTL,需要选择串口、文件等,界面如下图所示。

除了使用独立的烧录软件以外,编程环境还可以支持在线烧录,比如keil使用JLINK实现程序的在线仿真。

总之,烧录软件有多种,不同型号的芯片烧录软件、工具都不一样,可以在确定了芯片型号后具体查看。

以上就是这个问题的回答,感谢留言、评论、转发。更多电子设计、硬件设计、单片机等内容请关注本头条号:玩转嵌入式。感谢大家。

单片机的矩阵按键怎么输入两位数?

我的思路是,把你输入的数字先保存在一个数组里,然后实时的显示该数组的内容即可。

#define MAX_NUM 2

uchar num_pos = 0;//输入数字的个数计数。

char num_buff[MAX_NUM] = {-1,-1};

void DisplayNum()

{

for(i = 0; i

{

//在此将num_buff[]的数据显示出来,num_buff[i]的值是-1时,不显示

}

}

void main()

{

while(1)

{

key = KeyScan();//按键扫描,得到输入的数据

if(key >=0 && key

{

if(num_pos >= MAX_NUM) //达到最大显示个数,清空显示状态。

{

num_pos = 0;

for(i = 0; i

{

num_buff[i] = -1;

}

}

num_buff[num_pos] = key;

num_pos++;

}

DisplayNum();

}

}

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者M管理员
    暂无讨论,说说你的看法吧