CT117E-EX 扩展板笔记
数码管(74HC595)
博主参加国赛有点皮,准备的不够就参赛了,结果国赛没敲出来数码管实在有点可惜。望看到本文的朋友在准备国赛一定要把这个功能做到盲打出来,第十届国赛没提供数码管的驱动。
RCLK(R:存储寄存器读取)
- 上升沿 移位寄存器进入存储寄存器
- 下降沿 数据保持不变
SCK(S:送入595)
- 上升沿 数据寄存器数据移位。Q0–>Q1–>Q2–>Q3–>…–>Q7;
- 下降沿 移位寄存器数据不变
SER(数据脚)
- 串行数据输入端
void SEG_DisplayValue(u8 Bit1, u8 Bit2, u8 Bit3)
{
u8 i = 0; //
u8 code_tmp = 0;
/*
*略过部分代码
*/
code_tmp = Seg7[Bit1];
for(i=0;i<8;i++){
if(code_tmp & 0x80){
SER_H;
}else{
SER_L;
}
SCK_H;//数据移位
code_tmp = code_tmp << 1;
SCK_L;
}
RCLK_H; //上升沿时移位寄存器进入存储寄存器
RCLK_L; //下降沿是数据保持不变
}
数码管显示数组
u8 code t_display[]={ //标准字库
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black - H J K L N o P U t G Q r M y
0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
//0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};
// 0 1 2 3 4 5 6 7 8 9
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77
ADC按键
ADC KEY 引脚
PA5 ADC_12_IN5
背下ADC按键区间
按键值
ADC值 | ADC按键区间 |
---|---|
0 | <100 |
200 | <400 |
600 | <800 |
1000 | <1200 |
1300-1400 | <1600 |
1700-1900 | <2000 |
2100-2400 | <2600 |
2800-3000 | <3200 |
DHT11模块
芯片性能
- 温度测量范围:0-50℃
- 湿度测量范围:20-90%RH
- 采样周期 :1S
数据格式
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 |
---|---|---|---|---|
湿度整数数据 | 湿度小数数据 | 温度整数数据 | 温度小数数据 | 校验和 |
编程思路
- 主机输出
- 主机拉 低 至少 18ms
- 主机拉 高 20-40us
- 主机输入
- 主机等待信号线拉 低 (DHT11发送持续 40-50us 的 低 响应信号)
- 主机等待信号线拉 高 (DHT11发送持续 40-50us 的 高 拉高信号)
- for(){ //40bit数据 5Byte
- 主机等待数据线拉低 (数据Bit开始)
- 主机等待数据线拉高
- 主机延时 时间大于28us小于70us ( Type值 40us)
- 主机读取数据
- }
- 主机输出
- 主机拉高
技巧&TIP
- DHT11分辨率都是整数级别的读取小数的数据部分没有意义。(全为0)
- 读取间隔建议大于100ms(采样 1S 过高的读取频率没有意义)
- 在72MHz频率下 Delay_LCD 运行一次大约 375us
void Delay_LCD(u16 n)
{
u16 i,j;
for (i = 0;i<n;++i)
for(j=0;j<3000;++j);
}
//将里面的 3000 改成 8 运行一次大概 1us
//运行次数越少比1us越多
//运行次数越多比1us越少
18B20模块
芯片性能
- ±0.5°C accuracy from -10°C to +85°C
- Can be powered from data line. Power supply range is 3.0V to 5.5V
- Converts 12-bit temperature to digital word in 750 ms (max.)
数据格式
数据格式
- 写Byte数据先写低位
- 读Byte数据先读出的是低位
- 读出来的温度先是 LSM 8bit 然后是 MSB 8bit
总线协议&时序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4fqEHfa-1627893566676)(蓝桥杯嵌入式决赛笔记.assets/01-1557625836489.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MDCAsN9Z-1627893566679)(蓝桥杯嵌入式决赛笔记.assets/02.png)]
编程思路
第十届提供了底层接口,比赛会下面这些就好了
0xCC OW_SKIP_ROM
0x44 DS18B20_CONVERT
0xCC OW_SKIP_ROM
0xBE DS18B20_READ
LIS302DL
NULL
光敏 D&A
光敏D
- GPIOA_Pin_3
- GPIO_Mode_IPU
光敏A
AD通道号就是Pin号
- GPIOA_Pin_4
- ADC1
- ADC_Channel_4
电位器
省赛内容没什么好说的
NULL
PULS&PWM
比较捕获模式万能解题。如果题目不是要求同时采集CH1和CH2可以用PWM捕获模式挺好用的,改进一下可以不使用中断直接读取出占空比和频率,效率挺高。
PA1 TIM2_CH2
PA2 TIM2_CH3
PA6 TIM3_CH1
PA7 TIM3_CH2
界面颜色搭配
萝卜青菜各有所爱,好看就行了
LCD_SetBackColor(Blue);//界面标题
LCD_SetTextColor(White);
//Line0 1
LCD_SetBackColor(White);//界面内容
LCD_SetTextColor(Blue);
//Line1-7 7
LCD_SetBackColor(Blue);//界面介绍
LCD_SetTextColor(Black);
//Line89 2
蓝桥的其他文章与我个人敲的代码
省赛及国赛的赛题的实现代码可以在我的下载里面找到