单片机

AVR单片机教程——数字输出

有些话、适合烂在心里 提交于 2019-11-30 17:03:20
从上一篇教程中我们了解到,按键与开关的输入本质上就是数字信号的读取。这一篇教程要讲的是,控制LED的原理是数字信号的输出。数字IO是单片机编程之有别于桌面编程的各项内容中最简单、最基础的。 在讲数字信号输出之前,我们先来了解一下它控制的器件。LED,是一种二极管,在理想模型中,加以正向电压会发光,反向电压则不会。在稍微实际一点的模型中,当正向电压超过一定阈值时,二极管会发光,其电流会随着正向电压的增大而急剧增大;对反向电压的耐受力也是有限的。现实中的LED的具体参数因生产厂家而异,一般红色与黄色LED的导通压降为2V多,绿、蓝、白色的为3V左右或多一点;反向耐压一般为5V。 电流大到一定程度,任何器件都会烧毁,我们最好要把LED的电压控制在比导通压降高一点,但直接获得这样的电压比较困难,而且与LED的参数和温度等都是相关的。一种方案是用电流源来驱动LED,但由于现代计算机,包括单片机,都以电压方式来工作,在控制亮暗这种简单应用中一般不会使用(大功率LED一般有专用的恒流电源来驱动)。常见的方案是将LED与一个电阻串联。这个电阻能保证LED的电流不太大,因此称为限流电阻。至于这种接法下电流是多少,可以通过“负载线”来求得。本系列教程不会专门讲电路,你可以自己搜索相关知识,早晚会用到的。 早期的单片机设计中,一般把LED和电阻接在引脚和正电源之间

呼吸灯和花样流水灯 51单片机实现

Deadly 提交于 2019-11-30 16:57:41
1.用C51单片机实现花样流水灯,代码如下: #include <reg52.h> #define LED_All P1            //led灯所用的接口,单片机接口不同,led灯不同 void delayms() { unsigned char x = 0;           unsigned char i; unsigned char y = 0; while(y < 0.001)             //定义led灯的切换的延时时间,越小越快 {                    //i,x,y均可以修改 x = 0; while(x<100) { i = 0; while(i<100) { i++; } x++; } y++; } } #define LED_NUM 8          //定义led灯的数量,可快速实现不同用途的修改 void main() { unsigned char k; unsigned char j; unsigned char LED_ALL[] = {0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};      //led灯亮灭的十六进制数组 unsigned char LED_ALL1[] = {0XFC,0XF3,0XCF,0X3F};   while(1)   {     for

C51单片机实现呼吸灯和花样流水灯程序

ぃ、小莉子 提交于 2019-11-30 15:54:48
1.用C51单片机实现花样流水灯,代码如下: #include <reg52.h> #define LED_A P1            //led灯所用的接口,是哪个口就写P几 void delayms() { unsigned char x = 0;           unsigned char i; unsigned char y = 0; while(y < 0.001)             //定义led灯的切换的延时时间,越小越快。 {                    //(y < 0.001);(x<100);(i<100)都可以修改 x = 0; while(x<100) { i = 0; while(i<100) { i++; } x++; } y++; } } #define LED_NUM 8          //定义led灯的数量,可快速实现不同用途的修改; void main() { unsigned char k; unsigned char j; unsigned char LED_ALL[] = {0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};      //led灯亮灭的十六进制数组; unsigned char LED_ALL_2[] = {0XFC,0XF3,0XCF,0X3F};  

51单片机学习-打开关闭灯

馋奶兔 提交于 2019-11-30 09:27:25
简介: 单片机 在一片继承电路芯片上继承微处理器,存储器,I/O接口电路,从而构成了单芯片微型计算机,即单片机 RAM-内存 在计算机运行时一些随机的变量实时的调用 ROM-储存 数据保存在里面 电平特性 数字电路中只有两种电平:高和低 RS232电平:计算机的串口 高 -12V 低 +12V 所以计算机与单片机通讯时需要加电 平转换芯片max232 二进制决定了数字电路中的两种电平特性 十六进制是二进制的简短表示形式 B表示二进制 H表示十六进制 --------------------------- 使用KEIL软件进行编程 需要在C文件中添加头文件 #include <reg52.h> sbit D1 = P1^0; D1=0; 给第P1的第一个输出口 输出个低电平,灯泡开启 来源: https://blog.csdn.net/qq_41806966/article/details/101264882

看门狗 (监控芯片)

本小妞迷上赌 提交于 2019-11-30 08:33:39
在由 单片机 构成的 微型计算机系统 中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都有可能会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,导致整个系统的陷入停滞状态,发生不可预料的后果。 看门狗,又叫 watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机。 看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。 定义 编辑 看门狗,又叫watchdog timer,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog/service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT清零,如果超过规定的时间不喂狗(一般在程序跑飞时),WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。 [1] 基本原理 编辑 看门狗是一种监控系统的运行状况的手段,通过软硬件结合的方式实现对系统运行状况的监控。稳定运行的软件会在执行完特定指令后进行喂狗

STM32 IAP在线升级在项目中的应用

让人想犯罪 __ 提交于 2019-11-30 05:48:28
IAP即在线应用编程,平时我们写好的程序都是通过下载器去下载的,但是对于组装好的产品在想更新底层硬件代码是很麻烦的事情,如果在公司情况还没那么糟糕,要是发出去的产品出现bug,你不可能要用户给你下载程序的。IAP这种技术,我们就可以像软件一样,可以实现远程更新了。我们需要做的就是,写FLASH读写接口,程序可以通过串口,网口等进行下发,然后内部调用FLASH写函数,把代码写到对于区域即可。 当然这只是一个大概思路,具体实现还是要注意很多细节的东西。网上也有好多关于这方面的教程,但是能用到项目中的却很少,我写这边文章就是想和大家分享我在项目中实际应用。 想了想,就以我实际开发过程来写吧,这里对新人来说也可以当作一篇教程来学习。 一、FLASH读写接口的实现 这里大家可以参考原子哥的FLASH模拟EEPROM实验来写。因为我们做写的是程序,数据流很大,需要做一些改动,这样写入速度会快很多。 首先我们来了解一下STM32F1的FLASH,如下图,我们要看的只有主存储区,可以看到单片机内部FLASH是按2K一页来区分的,而且对其读写是有如下几点要求: 每次写入必须为2个字节。 写入地址为2的倍数。 写入之前必须是被擦除的(即其值为0xFFFF),也可以理解为,写入数据只能把位写0,不能置1。 写入速度≤24MHz。 擦除方式:页擦除和正片擦除(这个要注意,如果你是做数据保存

STM32驱动NRF24L01

烈酒焚心 提交于 2019-11-30 02:46:55
前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。 1. 简介 NRF24L01是 nordic 的无线通信芯片,它具有以下特点: 1) 2.4G 全球开放的 ISM 频段(2.400 - 2.4835GHz),免许可证使用; 2)最高工作速率 2Mbps,高校的 GFSK 调制,抗干扰能力强; 3) 125 个可选的频道,满足多点通信和调频通信的需要; 4)内置 CRC 检错和点对多点的通信地址控制; 5)低工作电压(1.9~3.6V),待机模式下状态为 26uA;掉电模式下为 900nA; 6)可设置自动应答,确保数据可靠传输; 7)工作于EnhancedShockBurst 具有Automatic packet handling,Auto packet transaction handling ,可以实现点对点或是 1 对 6 的无线通信,速度可以达到 2M(bps),具有可选的内置包应答机制,极大的降低丢包率。 8)通过 SPI 总线与单片机进行交互,最大通信速率为10Mbps; 1.1 结构框图 如图右侧为六个控制和数据信号,分别为 CSN、 SCK、 MISO、 MOSI、 IRQ、 CE。 信号线 功能 CSN 芯片的片选线, CSN 为低电平芯片工作 SCK 芯片控制的时钟线(SPI 时钟)

第一次发博感慨下

◇◆丶佛笑我妖孽 提交于 2019-11-30 02:35:21
从小的梦想是做一名厉害的黑客... 无奈成绩一塌糊涂,最终在高中草草结束学习生涯. 从做技术员开始,接触三菱PLC,触摸屏,全部是自学成材.. 随后接触了单片机,购买了至少5套,购买了汇编,C学习.. 因没有系统学习,认为编程很难.几乎放弃.(C,和编程都难理解) 觉得应充实些.且在工作中也用的上.所以学过电路板绘图制作,,3D结构绘图制作. 偶接触到python..试试看的态度进行了学习,,注册了自学网等等,购买了林海峰, 武沛齐的学习视频.. 学习了一段时间,让我明白了很多原理,学习了重要的东西,决定以后就靠这个吃饭了,绝不荒废. 已经35岁了,不管来不来的急..算法肯定跟不上,设计模式我有经验啊! 共勉 来源: https://www.cnblogs.com/gxrwsb/p/11546895.html

用寄存器点亮LED

杀马特。学长 韩版系。学妹 提交于 2019-11-29 23:37:44
为了顺利过渡到库开发,在STM32编程的开始,我们对照51点亮一个LED的方法,给大家演示一下STM32如何用操作寄存器的方法点亮一个LED,然后再慢慢讲解到底什么是库,让大家知道库跟寄存器的关系。 1. 用51点亮一个LED   在用STM32点亮一个LED之前,我们先来复习下用51如何点亮一个LED。 硬件上我们假设51单片机的P0口的第0位接了一个LED,负逻辑亮。如果我们要点亮这个LED,代码上我们会这么写: P0 = 0XFE;//总线操作点亮 LED 这时候我们就把LED点亮了,如果要关掉LED ,则是: P0 = 0XFF;//总线操作关闭 LED 这里面我们用的是总线操作的方法,即是对P0口的8个IO同时操作,但起作用的只是P0^0。 除了这种总线操作的方法,我们还学习过位操作,利用51编译器的关键字sbit,我们可以定义一个位变量: sbit LED = P0^0; 那么LED = 0,就点亮了LED; LED = 1,就关闭了 LED。 为了让程序看起来见名知义,我们定义两个宏: #define ON 0 #define OFF 1 点亮和关闭LED的代码就变成了: LED = ON;//位操作点亮LED LED = OFF;//位操作关闭LED 稍微整理一下代码,整体效果就是: //假设51单片机的PO~0口接LED,负逻辑点亮 #define ON 0

AVR单片机教程——按键状态

别来无恙 提交于 2019-11-29 22:42:22
好久没更新了,今天开始继续,争取日更。 今天我们来讲按键。开发板的右下角有4个按键,按下会有明显的“咔嗒”声。如何检测按键是否被按下呢?首先要把按键或直接或间接地连接到单片机上。与之前使用的4个LED不同,4个按键没有全部连接到单片机上——左边2个是连接的,右边2个通过按键上方标有B2、B3的接口引出(从左到右分别为B0、B1、B2和B3)。如果要使用B2、B3,要用杜邦线连接到16个单片机引出针脚上。 开发板库中与按键相关的函数定义在 <ee1/button.h> , 这里 是库函数手册。值得一提的是1.1版本的库中,换用枚举类型表示按键等设备,不再使用整数与宏定义(但用整数也是兼容的)。在Atmel Studio 7.0中写代码时,编辑器会提示函数接口,可以根据参数类型知道应该写什么。 对于单片机而言,按键是一种输入设备。程序都有零个或若干个输入,一个或多个输出,而我们学过的唯一一种输出设备就是LED。所以理所当然地,今天我们要用按键来控制LED:按键按下,LED亮起;按键抬起,LED关闭;4个按键分别对应4个LED。 我们先来实现一个简单的版本——只考虑一个按键和一个LED。 程序的流程是:先初始化;然后在主循环中,用 button_down 函数检测按键是否被按下;如果按下,让LED亮;否则让它不亮。再想一想,其实LED的亮暗状态就是 button_down 函数的返回值。