【微机原理】[软件操作]仿真调试
软键盘
选择使用按键的属性
【stm32单片机】[8]AD/DA转换
库函数解释
void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);
恢复缺省配置
void ADC_DeInit(ADC_TypeDef* ADCx);
ADC初始化
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
结构体初始化
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);
ADC上电
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);
开启DMA输出信号
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);
中断输出控制
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);
用于控制某个中断能否通往NVIC
复位校准
void ADC_ResetCalibrat ...
【stm32单片机】[7]编码器接口测速
相关库函数
定时器编码器配置
void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,
uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity);
TIMx:选择定时器
TIM_EncoderMode: 选择编码器模式,T1单独计数,T2单独计数,T1/T2同时计数
TIM_IC1Polarity:电平极性
TIM_IC2Polarity:电平极性 可以通过配置这两个参数,设置正相和反相
编码器测计数
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#include "stm32f10x.h" // Device headervoid Encoder_Init(void){ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,EN ...
【微机原理】方波发生器-电子琴
如何得到精准的250us定时?
先确认大概的定时器计数器值,再利用跑马表调整误差
【微机原理】[软件操作]-跑马表
如何打开Stop Watch窗口?
在DEBUG下选mplab sim后,再点DEBUGSETTING来设好频率,设好后点stopwatch
跑马表仿真测试
在中断对应的位置打上断点,点击仿真运行,即可通过跑马表查看每次进中断的运行时间
车辆里程表
proteus仿真
可以通过工具栏调试选项,查看各个所需的调试窗口,运行调试工具。
ps:step into可以跳过断点
第二次进中断,LED灯点亮
ps:cof为仿真文件,hex为下载文件
【微机原理】[2]中断系统
保护现场
【单片机】串口通信
蓝桥杯部分
1.串口底层
1234567891011121314151617181920212223242526272829#include <Uart.h>/* 串口初始化函数 */void UartInit(void) //9600bps@12.000MHz{ SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x01; //串口1选择定时器2为波特率发生器 AUXR |= 0x04; //定时器时钟1T模式 T2L = 0xC7; //设置定时初始值 T2H = 0xFE; //设置定时初始值 AUXR |= 0x10; //定时器2开始计时 ES = 1;//允许串口中断 EA = 1;//总中断开启}/* 字节发送函数 */void SendByte(unsigned char dat){ SBUF=dat;//将dat数据赋给SBUF,将数据发送出去 while(TI == 0);//等待数据发送 TI = 0;//将发送标志位清零}/* 字符串发送函数 */void Uart_Send_String(unsigned cha ...
【蓝桥杯单片机】考点复盘1
一、LED模块
1.LED底层代码
12345678910111213141516void Led_Disp(unsigned char addr, enable){ static unsigned char temp = 0x00; static unsigned char temp_old = 0xff; if (enable) temp |= 0x01 << addr; else temp &= ~(0x01 << addr); if (temp != temp_old) { P0 = ~temp; P2 = P2 & 0x1f | 0x80; P2 &= 0x1f; temp_old = temp; }}
2.基本调用方式
123456ucLED[n]=x;中断程序{ Led_Disp(Nixie_Pos,ucLED[Nixie_Pos]);}
二、按键模块
1.按键底层代码
12345678 ...
【stm32单片机】[6]输入捕获和输出比较
基本概念
另外它们的CH1到CH4,4个通道的引脚,也是公用的
所以对于同一个定时器,输入捕获和输出比较只能用其中一个。
一、输出比较
根据CNT和CCR的大小关系,从通道引脚输出高低电平
二、输入捕获
输入滤波器:可以对毛刺信号进行滤波
交叉输入的作用?
TRC?
CNT计数器是由内部的标准时钟进行驱动的,可以用于测量外部检测两个上升沿的时间间隔,
所以需要在检测到一个上升沿过后,清零CNT,这样在第二次上升沿后,CNT值就是测周法的N,可以通过主从触发模式,自动完成。
总结:
输入捕获类似于外部中断。都是检测边沿,然后执行相应的动嘴,而在输入捕获中。检测到指定电平跳变后,CNT的值所存到CCR中。
输出比较。引脚是输出端口,根据CNT和CCR的大小关系执行输出的动作。
输入捕获。引脚是输入端口,接收到输入信号,执行锁存的动作。
#主从触发模式:
将主从触发模式和PWMI模式相结合,可以让硬件自动测量频率和占空比,软件无需进行干预。
三、频率测量
PS:STM32测频率只能测量数字信号,若测量正选波,可以用运放电路搭建一个比较器。若测量的信号电压较高,需 ...
【蓝桥杯单片机】第九届省赛题
题目要求
题目分析(思路)
首先,定义按键所控制的相关变量
编写数码管显示的逻辑,以”设置状态为准“,测试按键是否能正常控制相关参数(工作模式、流转间隔)
因为一共有四个工作模式,流转间隔定义为一个数组,存放各个元素的流转时长
将工作模式1的相关逻辑(LED流转方式)编写出来
这里使用一个指针用于LED的点亮(LED_OFF),另一个用于LED的熄灭(LED_ON)
将工作模式,流转间隔的逻辑与LED工作模式1关联,测试按键功能是否正常,LED是否能被流转间隔控制
如果以上程序测试正确,编写其他三个工作模式的LED模块
此时进行程序测试,功能正常,但是切换其他流转模式会有上一个模式的LED”残留“ (如双LED模式切换到单LED模式时),因此需要进行LED的复位(在按键控制模块中编写)
修改完毕后,编写亮度控制,此时注意到,一个定时器0无法满足对LED扫描的同时进行亮度控制,因此再调用定时器1,用于LED的扫描指针偏移,以及LED的PWM控制亮度。
这里修改完程序后,发现数码管闪烁,这是因为定时器1的频率较高,会打断主函数中数码管显示模块,因 ...
【单片机】SPI协议
基础概念
什么是SPI?
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。
SPI优点:支持全双工通信 通信简单 数据传输速率块
缺点 :没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据 可靠性上有一定的缺陷。
特点:
高速、同步、全双工、非差分、总线式
主从机通信模式
蓝桥杯相关(暂未使用SPI)
DS1302(时钟芯片)底层
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include <reg52.h>#include <intrins.h>#include "ds1302.h"sbit SCK=P1^7; sbit SDA=P2^3; sbit RST = P1^3; void Write_Ds1302(unsig ...
【单片机】OneWire通信协议
一、OneWire(单总线)协议
•单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线
•一根通信线:DQ
•异步、半双工
•单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线
二、单总线电路规范
•设备的DQ均要配置成开漏输出模式
•DQ添加一个上拉电阻,阻值一般为4.7KΩ左右
•若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路
三、单总线的时序结构
蓝桥杯相关
OneWire底层
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#include "onewire.h"#include "reg52.h"sbit DQ = P1^4; //单总线内部延时函数void Delay_OneWire(unsigned int t) { t *= 12; while(t ...