单片机

单片机原理与应用实验——按键控制(汇编)

萝らか妹 提交于 2020-01-12 03:07:22
(基于51核的STC12C5A60S2,keil uvision5 mdk 5.25 编译) LED1 BIT P2.4 LED2 BIT P2.5 LED3 BIT P2.6 LED4 BIT P2.7 KEY1 BIT P3.2 KEY2 BIT P3.4 BEEP BIT P1.0 DelayTimes_100MS EQU 6FH ; 将地址6FH用伪指令命名为DelayTimes_100MS KEY1_State DATA 69H ; 将地址69H用伪指令命名为KEY1_State CLR BEEP SETB LED1 SETB LED2 SETB LED3 SETB LED4 LOOP: JB KEY1,KEY_OFF MOV DelayTimes_100MS,#4 ;按键去抖 LCALL Delay100MS KEY_ON: MOV A,KEY1_State RL A ADD A,KEY1_State MOV DPTR, #KEY1_Flash JMP @A+DPTR KEY1_Flash: LJMP KEY1_Flash0 ;0 LJMP KEY1_Flash1 ;3 LJMP KEY1_Flash2 ;6 LJMP KEY1_Flash3 ;9 LJMP KEY1_Flash4 ;12 KEY1_Flash0: CLR LED1 SETB LED2 SETB

单片机中蜂鸣器的使用

大憨熊 提交于 2020-01-12 03:03:00
1. 蜂鸣器种类 蜂鸣器分为有源蜂鸣器和无源蜂鸣器: 判断有源蜂鸣器和无源蜂鸣器可用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器“+”引脚,红表笔在另一引脚上来回触碰,如果触发出咔咔声且电阻只有8Ω(或16Ω)的是无源蜂鸣器,如果能发出持续声音的,且电阻在几百Ω以上的,是有源蜂鸣器。 这里的源不是指电源,而是指震荡源。也就是说有源蜂鸣器内部带震荡源。所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫,必须用2K~5K的方波去驱动。 2.单片机与蜂鸣器连接 原理图: 由于单片机的电流驱动不了蜂鸣器,因此需要增加一个三极管进行电流放大,原理图如下图所示: 代码: //蜂鸣器 # include <reg51.h> # include "delay.h" # define on 0 //宏定义,低电平0为开蜂鸣器 # define off 1 sbit speak = P2 ^ 3 ; void main ( ) { speak = on ; delay ( 500 ) ; speak = off ; delay ( 500 ) ; } 3.蜂鸣器与流水灯 在流水灯亮的同时,蜂鸣器响,即两者同步,原理图如下图所示: 代码 //流水灯报警 # include <reg51.h> # include <intrins.h> # include "delay.h"

学习单片机必须掌握的技巧,你还有多少不了解?

五迷三道 提交于 2020-01-11 05:47:04
在单片机应用开发中,代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着工程师。为帮助工程师解决单片机设计上的难题,纳出单片机开发中应掌握的几个基本技巧。 一、 如何提高C语言编程代码的效率 用C语言进行单片机程序设计是单片机开发与应用的必然趋势。如果使用C编程时,要达到最高的效率,最好熟悉所使用的C编译器。 先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。在今后编程的时候,使用编译效率最高的语句。 各家的C编译器都会有一定的差异,故编译效率也会有所不同,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长 5-20%。 对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求你对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统 所能支持的数据类型和算法。 虽然C语言是最普遍的一种高级语言,但由于不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作 上。所以如果对这些特性不了解,那么调试起来问题就会很多,反而导致执行效率低于汇编语言。 二、 如何减少程序中的bug? 对于如何减少程序的bug,给出了一些建议,指出系统运行中应考虑的超范围管理参数有: 1. 物理参数 。这些参数主要是系统的输入参数,它包括激励参数、采集处理中的运行参数和处理结束的结果参数。合理设定这些边界

干货分享,单片机常用电路介绍,有图有真相

拥有回忆 提交于 2020-01-10 11:41:06
在我们设计单片机电子电路时,常用应用到一下比较常用的电路,每次都需要重新画,即费力又费神,还容易出错,所以本人将自己常用的电路设计成模块,每次使用直接负责即可。由于个人的力量有限,希望大家把自己常用的电路发上来分享。电路难免有错,希望大家指出。。。 1. RS232通讯电路 双路232通信电路:3线连接方式,对应的是母头,工作电压5V,可以使用MAX202或MAX232。 2. 三极管串口通讯 三极管串口通信:本电路是用三极管搭的,电路简单,成本低,但是问题,一般在低波特率下是非常好的。 3. 单路RS232通讯 单路232通信电路:三线方式,与上面的三级管搭的完全等效。 4. USB转RS232 USB转232电路:采用的是PL2303HX,价格便宜,稳定性还不错。 5. 复位电路 SP706S复位电路:带看门狗和手动复位,价格便宜(美信的贵很多),R4为调试用,调试完后焊接好R4。 6. SD卡模块电路 SD卡模块电路(带锁):本电路与SD卡的封装有关,注意与封装对应。此电路可以通过端口控制SD卡的电源,比较完善,可以用于5V和3.3V。但是要注意,有些器件的使用,5V和3.3是不一样的。 7. LCM12864液晶显示电路 LCM12864液晶模块(ST7920):本电路是常见的12864电路,价格便宜,带中文字库。可以通过PSB端口的电平来设置其工作在串口模式还是并行模式

单片机的基础知识及发展趋势分析

◇◆丶佛笑我妖孽 提交于 2020-01-10 10:26:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 芯片在没有开发前, 单片机 只是具备功能极强的超大规模 集成电路 ,如果赋予它特定的程序,它便是一个最小的、完整的微型 计算机 控制系统,它与个人电脑(PC机)有着本质的区别,单片机的应用属于芯片级应用,需要用户了解单片机芯片的结构和指令系统以及其它集成电路应用技术和系统设计所需要的理论和技术,用这样特定的芯片设计应用程序,从而使该芯片具备特定的功能。 不同的单片机有着不同的硬件特征和软件特征,即它们的技术特征均不尽相同,硬件特征取决于单片机芯片的内部结构,用户要使用某种单片机,必须了解该型产品是否满足需要的功能和应用系统所要求的特性指标。这里的技术特征包括功能特性、控制特性和电气特性等等,这些信息需要从生产厂商的技术手册中得到。软件特征是指指令系统特性和开发支持环境,指令特性即我们熟悉的单片机的寻址方式,数据处理和逻辑处理方式,输入输出特性及对电源的要求等等。开发支持的环境包括指令的兼容及可移植性,支持软件(包含可支持开发应用程序的软件资源)及硬件资源。要利用某型号单片机开发自己的应用系统,掌握其结构特征和技术特征是必须的。 单片机控制系统能够取代以前利用复杂电子线路或 数字电路 构成的控制系统,可以软件控制来实现,并能够实现智能化,现在单片机控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表

基于51单片机的12864驱动

試著忘記壹切 提交于 2020-01-09 01:11:14
/**************dis_12864.h***************/ #include <reg52.h> #ifndef __DIS_12864_H__ #define __DIS_12864_H__ #define uchar unsigned char #define uint unsigned int /*12864port定义*/ #define LCD_data P0 //数据口 sbit LCD_RS = P1^0; //寄存器选择输入 sbit LCD_RW = P1^1; //液晶读/写控制 sbit LCD_EN = P2^5; //液晶使能控制 sbit LCD_PSB = P1^2; //串/并方式控制 /*函数声明*/ void delay(int ms); void lcd_init(); void beep(); void dataconv(); void lcd_pos(uchar X,uchar Y); //确定显示位置 void zifu_dis (uchar X,uchar Y,uchar *dis); #endif /**************dis_12864.c***************/ #include <dis_12864.h> /****************************************

AVR单片机教程——PWM调光

↘锁芯ラ 提交于 2020-01-09 00:56:12
PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比。让引脚输出高电平点亮LED,占空比就是100%。 在驱动数码管时,我们迫不得已使占空比为50%,因为不能让两位真正同时地显示不同的数字。但是,我们也可以有意地让LED的占空比不到100%,以降低其亮度。 占空比是可以用程序来调节的。下面的程序允许用户用按键调整蓝色LED的占空比,并通过数码管来显示。 #include <ee1/ee.h> #define DUTY_MAX 9 int main() { led_init(); button_init(PIN_NULL, PIN_NULL); segment_init(PIN_NULL, PIN_8); uint8_t duty = 0; while (1) { if (button_pressed(BUTTON_0) && duty > 0) --duty; if (button_pressed(BUTTON_1) && duty < DUTY_MAX) ++duty; segment_dec(duty); segment_display(SEGMENT_DIGIT_R); for (uint8_t i = 0; i != DUTY_MAX; ++i) { if (i < duty) led_set(LED_BLUE, true);

单片机运用,七段数码管如何用单片机控制

自作多情 提交于 2020-01-08 10:44:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 相信大家都见过数码管,数码管上面有abcdefg七个笔画,构成一个“日”字。那么它在单片机电路上一般是起什么作用呢?数码管都知道它是半导体发光器件,那么它的具体原理你知道多少?本文将会逐步解析这些问题,给你还原一个真实的数码管。 数码管的一种是半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP(decimal point),其基本单元是发光二极管。数码管是一类价格便宜使用简单,通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数的器件。 在电器特别是家电领域应用极为广泛,如显示屏、空调、热水器、冰箱等等。绝大多数热水器用的都是数码管,其他家电也用液晶屏与荧光屏。 数码管常用段数一般为7段有的另加一个小数点,还有一种数码管是类似于3位“+1”型。数码管位数有半位,1,2,3,4,5,6,8,10位等等。..。,数码管根据LED的接法不同分为共阴和共阳两类,了解数码管的这些特性,数码管对编程是很重要的,因为不同类型的数码管,除了数码管的硬件电路有差异外,数码管编程方法也是不同的。数码管的发光原理是一样的,只是数码管的电源极性不同而已。数码管颜色有红,绿,蓝,黄等几种。数码管广泛用于仪表

任务一:认识MSP430单片机

▼魔方 西西 提交于 2020-01-07 09:47:42
一、学习目标: 1)、单片机的结构 2)、单片机的特点 3)、单片机的选型 4)、单片机的开发工具 二、基础知识 1、单片机 1)、单片机简介: 将运算器、控制器、存储器、内部和外部总线系统、I/O接口电路集成在一片芯片上组成的电子器件。 运算器和控制器为CPU 将CPU芯片、存储芯片、IO接口、外设组装在一块印制电路板上,形成了单片机。 Intel最初将运算器、控制器、存储器、内部和外部总线系统、I/O接口设计了单片机,典型的8051系列。 2)、单片机的发展: 高集成度,集成了ROM/RAM、FLASH、A/D和D/A、定时器和计数器、系统故障检测(中断)和DMA电路 高性能,高性能使电路设计更加简单 低功耗,集成度提高,体积减小,性能提高、功耗降低 3)、引脚多功能化: 芯片功能的增强和资源的丰富,出现了一脚多用 2、MSP430系列单片机 1)、概述: TI公司在1996年推出的一种单片机; 超低功耗16位单片机; 混合处理型的单片机(将不同功能的模拟电路、数字电路和处理器); 提供了FLASH集成 提供了乘法器 提供了时钟等 2)、特点: 功能强大 中断机制,及时响应外设,为了低功耗 通信多样化:UART异步串行通信、USRT同步串行通信、I2C通信 增强的定时器:捕获为了测量方便、比较为了产生波形方便 DMA数据传输,无需CPU参与,提高性能,降低功耗 FLASH存储

STM32延时函数的三种方法

ⅰ亾dé卋堺 提交于 2020-01-06 23:08:01
单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us( )和毫秒级delay_ms( )。 1.普通延时法 这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。下面的代码是在网上搜到的,经测试延时比较精准。 //粗延时函数,微秒 void delay_us(u16 time){ u16 i=0; while(time--){ i=10; //自己定义 while(i--) ; } } //毫秒级的延时 void delay_ms(u16 time){ u16 i=0; while(time--){ i=12000; //自己定义 while(i--) ; } } 2.SysTick 定时器延时 CM3 内核的处理器,内部包含了一个SysTick 定时器,SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。SysTick 在STM32的参考手册里面介绍的很简单,其详细介绍,请参阅《Cortex-M3 权威指南》。 这里面也有两种方式实现: a.中断方式 如下,定义延时时间time_delay,SysTick_Config()定义中断时间段,在中断中递减time_delay,从而实现延时