关于蓝桥杯
基本原理
LED指示灯
基本原理
锁存器(M74HC573MIR)用io控制对应led,三八译码器控制y4(0)以控制y4c以控制锁存器使能
蜂鸣器与继电器
ULN2003达林顿管
输出为输入的非
通过三八译码器控制y5(低电平有效)控制y5c以控制锁存器使能,在通过锁存器及达林顿管(类非门)控制端口达到控制蜂鸣器及继电器作用
数码管
共阳数码管段位表
1 | 0 -- 0xC0 |
列表形式为
1 | // 共阳 |
共阴数码管段位表
1 | 0 -- 0x3F |
列表形式为
1 | // 共阴 |
按键
对于蓝桥板子 P37换为P44 P36换为P42
独立按键
需将J5的跳帽接到2~3
引脚
0为按下
矩阵键盘
需将J5的跳帽接到
1~2
引脚
中断
需将J5的跳帽接到2~3
引脚
即s5接到p32/int0 s4接到p33/int1
DB18B20
依据流程图 相关代码如下
1 | void read_ds18b20() |
DS1302
采用三线spi接口
日历时钟寄存器
备赛更新
HC138模块选择
版本1
1 | void selete_hc138(u8 num) |
其中
4 为LED
5 为继电器及蜂鸣器 0x10为继电器闭合 亮灯(L10)
6 为数码管位选
7 为数码管段选
版本2
1 | void select_hc138(num) |
数码管显示
1 | void fmq_display(u8 pos,u8 num) |
系统初始化
进行关灯等
1 | void system_init() |
温度模块-DS18B20
驱动文件修改 [2024更新] 最新的赛点资源包已经修复该问题
对于蓝桥杯的板子,由于其运行速度较快,官方给的驱动文件需要进行修改,将内部延时函数改为如下
1
2
3
4
5 void Delay_OneWire(unsigned int t)
{
t *= 10;
while(t --);
}即 将输入的延时时间放大十倍
温度读取
1 | float temp_f; |
其中temp_f为当前温度值,以
float
储存,在使用时根据所需进行放大并转为int
储存在temp_i中便于数码管显示
内置日历时钟定时器-ds1302
寄存器表
注意
高四位及第四位以bcd码储存
以读秒为例子,取出81H
地址中的值时,高八位储存的为十位,即time[0] / 16
为十位,time[0] % 16
为个位。
日历读取及使用
1 | u8 code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; // 对应寄存器地址 |
PCF8591
关于IIC的使用
模数转换-ad
1 | // 驱动如下 |
以下为使用该接口读取滑动变阻器的值
1 | void ad_display(u8 dat) |
需要注意的是 读取的值均有稳定倍数关系 需要
* 5 / 255
即/ 51
即得到正常值
数模转换-da
输出值为板子D/A输出口的电压(有换算关系 为 *5 / 255)
1 | void Da_Write(unsigned char dat) |
AT24C02
集成EEPROM
向EEPROM写入数据
1 | void EEPROM_Write(unsigned char * string, unsigned char addr, unsigned char num) |
调用即
1 | EEPROM_Write(temp, 0x01, 2); // 0x01为对应地址 |
读取EEPROM数据
1 | void EEPROM_Read(unsigned char* string, unsigned char addr, unsigned char num) |
调用即
1 | EEPROM_Read(date, 0x01, 2); // 从0x01地址中读取值存入date数组 |
NE555(频率计数)
需要两个计时器
1 | u8 count = 0; |
使用时例如
1 | void ne555_test() |
注意!
- init只在循环开始前执行一次
- 在定时器1中需要重新声明
使用ne555时候,需要用跳帽短接
1
2 TH1 = (65535 - 50000 + 1) / 256;
TL1 = (65535 - 50000 + 1) % 256;signal
和P3^4
2023赛后更新
一点小牢骚
总的来说 尽力了
剩下一个ne555赌它不考来着。。。您猜怎么着?上来就给我来一手ne555
看到程序框图的第一反应人是傻的。。。官方给的文件和原来手上的不一样也是想不到的
幸好 c语言没白学 头文件没忘记怎么写
_nop()_
在哪个头文件里我忘记了…。
看着报错人也麻麻的
还是幸好 知道这个函数是干嘛用的 自己手写了一个延时函数大概能代替它了幸好的幸好,除了用ne555做的湿度之外基本上都功能实现了 虽然有些地方好像写法很复杂
其实做完能做的之后还剩下一个小时的样子
看着ne555的手册和stc15的手册 本来想现学一手 想想 算了
于是又去检查前面的题目有没有问题了这次比赛嘛 也不清楚到底比之前的难还是简单了
有幸运也有遗憾
我的建议是 尽力了 下次一定 如果有下次的话
2024赛前
一点准备注意事项
_nop()_
对应头文件intrins.h
- 温度先读取低八位再读高八位
- 要用Crome浏览器开所有东西 包括pdf(摄像头读取可能有问题)
- 矩阵键盘延时设置为100
- 延时函数形参为
u16
- 在等待按键松开的while中加入paper_show 避免按下按键黑屏
- 数码管位选前先段选赋 0XFF 消隐
- 写其他模块时 ne555跳帽拔掉!
- 涉及led和蜂鸣器,使用完毕关闭锁存器
- P06为蜂鸣器
- Title: 关于蓝桥杯
- Author: CGC
- Created at: 2023-03-14 21:45:28
- Updated at: 2024-04-12 20:25:34
- Link: https://redefine.ohevan.com/2023/03/14/关于蓝桥杯/
- License: This work is licensed under CC BY-NC-SA 4.0.