蓝桥杯单片机答题技巧
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;}
}