二战蓝桥杯

没想到,还会再来一遍

勇敢梧桐树,不怕寒暑苦!

前作:stc15笔记

傻小子得学心眼

你知道我为什么去年只拿了个省三吗?

因为我的板子,有!错!误!这就导致代码在我的板子上面可以正常运行,但到了官方的板子上就跑不了。

Q:那你当时怎么不用比赛现场发的官方板子尝试一下?
A:太自信了,并且我的板子是Type-C接口有高级感。
Q:怎么想的?
A:失败有失败的原因,以史为鉴。
Q:只有这一种错误码?
A:我还出现了审题错误,误解题意导致某一项功能在最后的15分钟内去做更正;没找到客观题真题,导致只能根据仅存的知识乱蒙等。

今年的长进

  • 我从一些公众号上下载了往年真题资源(这是我以前有所不齿的);
  • 我弄到了一些往年真题的正解代码;
  • 我知道客观题是客观存在得了,不是传闻也不是CSDN上的某些文章所指的;
  • 有去年的笔记在,找大佬借了板子,研究起来少很多弯路。
阅读更多

STM32SPWM

最近在做DCAC和ACDC,随便写点东西记录一下开发的过程

阅读更多

STM32PWM

考前拾遗,后面将没有多少时间学习STM32,直到我考完期末

阅读更多

stc15笔记

为了蓝桥杯单片机开发赛道。由于各种原因,一直没赶上培训,所以就自学。自学也不错,一两个小时下来的效率比听讲要高很多,还能集百家之长,还能随便写点东西出来。
实话说,我现在手上这些的芯片,其速度大都超越了上个世纪八十年代的所有芯片——而且存储空间很大,封装体积很小,随便就能吊打当时的任何超级计算机——如果有。

阅读更多

stm32硬件i2c

I2C禁止输出强上拉的电平,采用外置弱上拉电阻加开漏输出的电路结构,外置上拉电阻阻值一般为4.7kΩ左右。
按引脚定义用相应的引脚就好。
OLED输出的一种优化方案:
原来的刷新屏幕:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void OLED_Refresh(void){
uint8_t i, j;
uint8_t OLED_BufferUpdFlag = OLED_BufferUpdLagFlag | OLED_BufferLineUpdFlag;
for (j = 0; j < 8; ++j){
if (OLED_BufferUpdFlag & 1){
OLED_SetCursor(0, j);
for (i = 0; i < 128; ++i){
OLED_WriteData(OLED_Buffer[i][j]);
OLED_Buffer[i][j] = 0;
}
}
OLED_BufferUpdFlag >>= 1;
}
OLED_BufferUpdLagFlag = OLED_BufferLineUpdFlag;
}

虽然有UpdFlag的优化,但是经过测试,它的最高帧率只能达到37fps左右。问题出在哪儿呢?问题就出在OLED_WriteData反复开始结束通讯消耗了大量无意义资源。
优化后,变成了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void OLED_Refresh(void){
uint8_t i, j;
uint8_t OLED_BufferUpdFlag = OLED_BufferUpdLagFlag | OLED_BufferLineUpdFlag;
for (j = 0; j < 8; ++j){
if (OLED_BufferUpdFlag & 1){
OLED_SetCursor(0, j);
OLED_I2C_Start();
OLED_I2C_SendByte(0x78); // 从机地址
OLED_I2C_SendByte(0x40); // 写数据
for (i = 0; i < 128; ++i){
OLED_I2C_SendByte(OLED_Buffer[i][j]);
OLED_Buffer[i][j] = 0;
}
}
OLED_I2C_Stop();
OLED_BufferUpdFlag >>= 1;
}
OLED_BufferUpdLagFlag = OLED_BufferLineUpdFlag;
}

虽然看上去不如之前的好看,但是它效率极高——直接达到了110fps!
但是!当我改用硬件I2C,它的效率不增反降……我先找找原因

stc51中断

基本原理这里不写了,这里就记一下各种寄存器位的作用。
以及一点点汇编:)

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×