赞
踩
1.超声波测距 并保存最大与最小值还有平均值 最大最小值可以保存 但是平均值保存不知道如何保存
蚂蚁工厂给出的解决方案是
在RAM外部设定一个超大数组进行保存 然后使用指针进行提取
2.STC15系列内存的分配 把数码管,LED,小数点等数组放到外部RAM中,这样就能节省空间
3.不同模式对应不同规定进行采集数据
4.高位熄灭
5.DA按照不同规定输出不同电压
6.不同测距模式下对应不同功能
6.计数连续在三次以上 点亮LED(未实现)
蚂蚁工厂给出的解决方法是
用一个数组进行存放近三次保存的数据,如果都满足则将LED6点亮
1.显示界面与设置界面设置两个不同变量,然后通过按键在不同功能下,实现不同界面的切换
2.AD使用光敏电阻判断亮暗,然后实现不同功能。
3.时钟设置(16进制变成十进制)
加按键
if(Seg_Set_Mode == 0)//处于时间参数设置界面
{
ucRtc_Hour_Set++;
//因为是16进制 所以0x09+1会变成0x0a 此时就需要将0x0a进行变化变成0x10
if(ucRtc_Hour_Set%16 == 0x0a)
ucRtc_Hour_Set += 6;
//进行界限判断 界限-1变成0xff因为后面又-6 因此变成0xf9
if(ucRtc_Hour_Set == 0x24)
ucRtc_Hour_Set = 0x23;//直接进行卡死 不再减了
}
减按键
if(Seg_Set_Mode == 0)//处于时间参数设置界面
{
ucRtc_Hour_Set--;
//因为是16进制 所以0x10-1会变成0x0f 此时就需要将0x0f进行变化变成0x09
if(ucRtc_Hour_Set%16 == 0x0f)
ucRtc_Hour_Set -= 6;
//进行界限判断 界限-1变成0xff因为后面又-6 因此变成0xf9
if(ucRtc_Hour_Set == 0xf9)
ucRtc_Hour_Set = 0;//直接进行卡死 不再减了
}
4.若判断环境处于“暗”状态,且持续时间超过 3 秒,指示灯 L3 点亮;环境处于“亮”状态,且持续时间超过 3 秒,指示灯 L3 熄灭。 (重点)
if(AD_Voltage < 1.5)
{
Liang_An_Flag = 1;//暗
if(An_First_Time == 0)
{
ms_Tick_LED_An = ms_Tick;
An_First_Time = 1;
Liang_First_Time = 0;
}
if((ms_Tick - ms_Tick_LED_An) >= 3000)
Liang_An_Flag_Over_3_Sec = 1;
}
else
{
Liang_An_Flag = 0;//亮
if(Liang_First_Time == 0)
{
ms_Tick_LED_Liang = ms_Tick;
Liang_First_Time = 1;
An_First_Time = 0;
}
if((ms_Tick - ms_Tick_LED_Liang) >= 3000)
Liang_An_Flag_Over_3_Sec = 0;
}
Led_Display[2] = Liang_An_Flag_Over_3_Sec;
1.串口中
'\r’是回车,前者使光标到行首,(carriage return)0X0D
'\n’是换行,后者使光标下移一格,(line feed)0x0A
if((Uart_Buf[Uart_Buf_Index-1] == 0x0a)&&(Uart_Buf[Uart_Buf_Index-2] == 0x0d))//拿到的数据帧的倒数后两位为帧尾,表示收到一个数据帧
2.串口发送
输出十进制的数据一定要加(unsigned int)不然会造成发送数据错误
(unsigned char)是用字符进行存储
(unsigned int)是用整型进行存储
3.按键长按与短按(重点)
如何判断长按与短按
4.EEPROM进行数据存储。
5.串口关于\r\n的发送
6.DA输出电压
7.%d %2d %02d几种情况的区别
%5.2f的意思
%5.2f的意思
1.频率测量
2.高位熄灭
3.回显界面
4.如何用EEPROM存储int与float类型的数据
重点(还未解决问题)
1.如何用EEPROM存储超过十位的数组(重点)(问题还未解决)
2.LED当每次采集后以0.2s闪烁十次如何自动熄灭
3.DA按照规定输出电压
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。