当前位置: 首页 > news >正文

蓝桥杯单片机答题技巧

1.进入每个界面后为固定显示的子界面

每次从周期界面进入电压界面后,均为通道 1 电压显示界面

 2.按键长按的处理方法

 

3.DAC输出一定函数关系的电压值

用数学方程计算出来之后再去用代码编写

4.参数调整时无效,退出才有效

写两个临时变量 

sprintf(pucSeg_Buf,"P  %3.1f %3.1f",ADC_Parm_Max_temp,ADC_Parm_Min_temp);case 4:Disp_Mode=(Disp_Mode+1)%3;if(Disp_Mode==2){ADC_Parm_Max_temp=ADC_Parm_Max;ADC_Parm_Min_temp=ADC_Parm_Min;}if(Disp_Mode==0){ADC_Parm_Max=ADC_Parm_Max_temp;ADC_Parm_Min=ADC_Parm_Min_temp;}break;case 6:if(Disp_Mode==2){if(Parm_Mode==0){if(ADC_Parm_Max_temp==5.0){ADC_Parm_Max_temp=0.5;}else{ADC_Parm_Max_temp+=0.5;}}else{if(ADC_Parm_Min_temp==5.0){ADC_Parm_Min_temp=0.5;}else{ADC_Parm_Min_temp+=0.5;}	}}break;case 7:if(Disp_Mode==2){if(Parm_Mode==0){if(ADC_Parm_Max_temp==0.5){ADC_Parm_Max_temp=5.0;}else{ADC_Parm_Max_temp-=0.5;}}else{if(ADC_Parm_Min_temp==0.5){ADC_Parm_Min_temp=5.0;}else{ADC_Parm_Min_temp-=0.5;}	}}break;

 5.双路读取ADC的写法

//模块代码编写unsigned char PCF8591_ADC(unsigned char dat)
{unsigned char temp;I2CStart();I2CSendByte(0x90);I2CWaitAck();I2CSendByte(dat);I2CWaitAck();I2CStart();I2CSendByte(0x91);I2CWaitAck();temp=I2CReceiveByte();I2CSendAck(0);temp=I2CReceiveByte();I2CSendAck(1);I2CStop();return temp;
}

6.无效按键的处理

定义变量

unsigned int uiError = 0;

处理方法

switch(Key_Val){case 0:break;case 12:uiError = 0;Disp_Mode = (Disp_Mode + 1) % 3;if(Disp_Mode == 2){EEPROM_Buf[0] = (unsigned char)(ADC_Parm * 10);EEPROM_Write(EEPROM_Buf, 0x00, 1);}break;case 13:if(Disp_Mode == 2){uiError = 0;uiCount = 0;}else{uiError++;}break;case 16:if(Disp_Mode == 1){uiError = 0;if(ADC_Parm == 5.0){ADC_Parm = 0.0;}else{ADC_Parm += 0.5;}}else{uiError++;}break;case 17:if(Disp_Mode == 1){uiError = 0;if(ADC_Parm == 0.0){ADC_Parm = 5.0;}else{ADC_Parm -= 0.5;}}else{uiError++;}break;default:uiError++;break;}

7.触发条件以及时间的判断

void ADC_Proc(void)
{if(uiADC_Dly<200)return;uiADC_Dly=0;ucADC=PCF8591_ADC();if(((ucADC_Old/51.0)>ADC_Parm_Old)&&((ucADC/51.0)<ADC_Parm)){uiCount++;ulled=ulms;}if(((ucADC_Old/51.0)<ADC_Parm_Old)&&((ucADC/51.0)>ADC_Parm)){ulled=ulms;}ucADC_Old=ucADC;ADC_Parm_Old=ADC_Parm;
}
if(((ucADC/51.0) < ADC_Parm) && (ulms - ulled > 5000)){ucLed |= 0x01;}else{ucLed &= ~0x01;}

8.串口的使用与矩阵键盘的改写

9.串口模块

void UartInit(void)		//4800bps@12.000MHz
{SCON = 0x50;		//8位数据,可变波特率AUXR |= 0x01;		//串口1选择定时器2为波特率发生器AUXR |= 0x04;		//定时器2时钟为Fosc,即1TT2L = 0x8F;		//设定定时初值T2H = 0xFD;		//设定定时初值AUXR |= 0x10;		//启动定时器2ES = 1;
}
#include "uart.h"void Uart_SendString(unsigned char *pucBuf)
{while(*pucBuf != '\0'){SBUF = *pucBuf++;while(TI == 0);TI = 0;}
}

http://www.xdnf.cn/news/644347.html

相关文章:

  • DNS 入门篇
  • Arduino Uno KY-037声音传感器实验
  • 短视频矩阵系统源码部署分享
  • 维护测试监控LLM应用
  • 从厨房到储物间:Grocy 家庭的智能物资管理助手
  • CA自签名证书创建--证书链生成脚本
  • dify-plugin-daemon的.env配置文件
  • 大模型和AI工具汇总(一)
  • CMake学习笔记(六)可以在CMake的function中修改function函数体之外的变量值吗?
  • 【FastAPI】--进阶教程1
  • VS2022 安装CodeGeeX AI插件实现高效编程体验
  • 贪心算法应用:贝尔曼-福特松弛问题详解
  • 差分数组知识笔记
  • 嵌入式学习笔记——day26
  • C++ gtest单元测试
  • STM32八股【10】-----stm32启动流程
  • 如何利用好cursor
  • 【第四十六周】文献阅读:从 RAG 到记忆:大型语言模型的非参数持续学习
  • c++ overwrite
  • 华为OD机试真题——仿LISP运算(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • Linux应用程序 栈溢出 内存踩踏 问题 排查学习
  • 第九课 影像文章插图及图表制作完全指南:从原理到应用
  • 市场需求文档撰写
  • C++11(2):
  • 《算法导论(第4版)》阅读笔记:p1178-p1212
  • 吴恩达机器学习笔记:逻辑回归3
  • Python元类(Metaclass)深度解析
  • Volatile的相关内容
  • Lombok与Jackson实现高效JSON序列化与反序列化
  • Python类与对象:面向对象编程的基础