# V0.3 完成DHT10驱动函数,但是数据目前异常,等待排除硬件问题

This commit is contained in:
jxh
2025-03-21 00:45:04 +08:00
parent 58efe255f0
commit 9de7e3600d
9 changed files with 430 additions and 386 deletions

View File

@ -177,44 +177,44 @@ OLED_Coord (uint8_t X, uint8_t Y)
| 0x00); // 页面寻址模式下设置列开始地址寄存器的低位
}
/************************************************
函数名称 OLED_ShowRoll
功 能 OLED内置滚动显示
参 数 Y ---- 起始行
Line ---- 滚动行数 (0 ---> 取消滚动)
Mode ---- 滚动模式OLED_LEFT_ROLL or OLED_RIGHT_ROLL
返 回 值
*************************************************/
void
OLED_ShowRoll (uint8_t Y, uint8_t Line, uint8_t Mode)
{
if (Line > 0)
{
if (Mode == OLED_LEFT_ROLL)
{
OLED_Write_Cmd (OLED_LEFT_ROLL); // 左滚动显示
}
else if (Mode == OLED_RIGHT_ROLL)
{
OLED_Write_Cmd (OLED_RIGHT_ROLL); // 右滚动显示
}
else
{
return;
}
OLED_Write_Cmd (0x00); // 虚拟字节设置默认为0x00
OLED_Write_Cmd (Y); // 定义开始页面地址
OLED_Write_Cmd (0x07); // 帧频设置
OLED_Write_Cmd (Y + (Line - 1)); // 定义结束页面地址
OLED_Write_Cmd (0x00); // 虚拟字节设置默认为0x00
OLED_Write_Cmd (0xFF); // 虚拟字节设置默认为0xFF
OLED_Write_Cmd (0x2F); // 激活滚动
}
else
{
OLED_Write_Cmd (0x2E); // 失能滚动
}
}
// /************************************************
// 函数名称 OLED_ShowRoll
// 功 能 OLED内置滚动显示
// 参 数 Y ---- 起始行
// Line ---- 滚动行数 (0 ---> 取消滚动)
// Mode ---- 滚动模式OLED_LEFT_ROLL or OLED_RIGHT_ROLL
// 返 回 值
// *************************************************/
// void
// OLED_ShowRoll (uint8_t Y, uint8_t Line, uint8_t Mode)
// {
// if (Line > 0)
// {
// if (Mode == OLED_LEFT_ROLL)
// {
// OLED_Write_Cmd (OLED_LEFT_ROLL); // 左滚动显示
// }
// else if (Mode == OLED_RIGHT_ROLL)
// {
// OLED_Write_Cmd (OLED_RIGHT_ROLL); // 右滚动显示
// }
// else
// {
// return;
// }
// OLED_Write_Cmd (0x00); // 虚拟字节设置默认为0x00
// OLED_Write_Cmd (Y); // 定义开始页面地址
// OLED_Write_Cmd (0x07); // 帧频设置
// OLED_Write_Cmd (Y + (Line - 1)); // 定义结束页面地址
// OLED_Write_Cmd (0x00); // 虚拟字节设置默认为0x00
// OLED_Write_Cmd (0xFF); // 虚拟字节设置默认为0xFF
// OLED_Write_Cmd (0x2F); // 激活滚动
// }
// else
// {
// OLED_Write_Cmd (0x2E); // 失能滚动
// }
// }
/************************************************
函数名称 OLED_ShowChar
@ -417,101 +417,102 @@ OLED_ShowNum (uint8_t X, uint8_t Y, uint32_t Num, uint8_t Len, uint8_t Size,
}
}
/************************************************
函数名称 OLED_ShowHex
功 能 OLED十六进制显示
参 数 X ---- X轴
Y ---- Y轴
Num ---- 数字10进制
Size ---- 字体大小(固定宽度为 8像素
Prefix ---- 补零显示使能
Inverse ---- 反白显示使能
返 回 值
*************************************************/
void
OLED_ShowHex (uint8_t X, uint8_t Y, uint32_t Num, uint8_t Size, uint8_t Prefix,
uint8_t Inverse)
{
uint8_t t, temp;
uint8_t i = 0;
uint8_t show = 0;
// /************************************************
// 函数名称 OLED_ShowHex
// 功 能 OLED十六进制显示
// 参 数 X ---- X轴
// Y ---- Y轴
// Num ---- 数字10进制
// Size ---- 字体大小(固定宽度为 8像素
// Prefix ---- 补零显示使能
// Inverse ---- 反白显示使能
// 返 回 值
// *************************************************/
// void
// OLED_ShowHex (uint8_t X, uint8_t Y, uint32_t Num, uint8_t Size, uint8_t
// Prefix,
// uint8_t Inverse)
// {
// uint8_t t, temp;
// uint8_t i = 0;
// uint8_t show = 0;
for (t = 0; t < 4; t++)
{
temp = (uint8_t)(Num >> (12 - 4 * t)) & 0x000F; // 提取每位数字
// for (t = 0; t < 4; t++)
// {
// temp = (uint8_t)(Num >> (12 - 4 * t)) & 0x000F; // 提取每位数字
if (!show && t < 3)
{
if (0 == temp)
{
if (Prefix)
{
OLED_ShowChar (X + 8 * i, Y, '0', Size, Inverse);
i++;
}
continue;
}
else
{
show = 1;
}
}
switch (temp)
{
case 0:
temp = '0';
break;
case 1:
temp = '1';
break;
case 2:
temp = '2';
break;
case 3:
temp = '3';
break;
case 4:
temp = '4';
break;
case 5:
temp = '5';
break;
case 6:
temp = '6';
break;
case 7:
temp = '7';
break;
case 8:
temp = '8';
break;
case 9:
temp = '9';
break;
case 10:
temp = 'A';
break;
case 11:
temp = 'B';
break;
case 12:
temp = 'C';
break;
case 13:
temp = 'D';
break;
case 14:
temp = 'E';
break;
case 15:
temp = 'F';
break;
}
// if (!show && t < 3)
// {
// if (0 == temp)
// {
// if (Prefix)
// {
// OLED_ShowChar (X + 8 * i, Y, '0', Size, Inverse);
// i++;
// }
// continue;
// }
// else
// {
// show = 1;
// }
// }
// switch (temp)
// {
// case 0:
// temp = '0';
// break;
// case 1:
// temp = '1';
// break;
// case 2:
// temp = '2';
// break;
// case 3:
// temp = '3';
// break;
// case 4:
// temp = '4';
// break;
// case 5:
// temp = '5';
// break;
// case 6:
// temp = '6';
// break;
// case 7:
// temp = '7';
// break;
// case 8:
// temp = '8';
// break;
// case 9:
// temp = '9';
// break;
// case 10:
// temp = 'A';
// break;
// case 11:
// temp = 'B';
// break;
// case 12:
// temp = 'C';
// break;
// case 13:
// temp = 'D';
// break;
// case 14:
// temp = 'E';
// break;
// case 15:
// temp = 'F';
// break;
// }
OLED_ShowChar (X + 8 * i, Y, temp, Size, Inverse);
i++;
}
}
// OLED_ShowChar (X + 8 * i, Y, temp, Size, Inverse);
// i++;
// }
// }
/************************************************
函数名称 OLED_ShowFloat
@ -587,125 +588,130 @@ OLED_ShowFloat (uint8_t X, uint8_t Y, float Num, uint8_t Accuracy,
}
}
/************************************************
函数名称 OLED_ShowLanguage
功 能 OLED汉字显示(16x16) 不带字库的
参 数 X ---- X轴
Y ---- Y轴
pArray ---- 数据
Len ---- 字数长度
Inverse ---- 反白显示使能
返 回 值
*************************************************/
// /************************************************
// 函数名称 OLED_ShowLanguage
// 功 能 OLED汉字显示(16x16) 不带字库的
// 参 数 X ---- X轴
// Y ---- Y轴
// pArray ---- 数据
// Len ---- 字数长度
// Inverse ---- 反白显示使能
// 返 回 值
// *************************************************/
/*
mode 0:使用 1级指针来访问二维数组
mode 1:使用指向数组的指针来访问二维数组
*/
#define _OLED_ShowLanguage_MODE 0 // (0 or 1)
// /*
// mode 0:使用 1级指针来访问二维数组
// mode 1:使用指向数组的指针来访问二维数组
// */
// #define _OLED_ShowLanguage_MODE 0 // (0 or 1)
#if (0 == _OLED_ShowLanguage_MODE)
void
OLED_ShowLanguage (uint8_t X, uint8_t Y, const uint8_t *pArray, uint16_t Len,
uint8_t Inverse)
// #if (0 == _OLED_ShowLanguage_MODE)
// void
// OLED_ShowLanguage (uint8_t X, uint8_t Y, const uint8_t *pArray, uint16_t
// Len,
// uint8_t Inverse)
#elif (1 == _OLED_ShowLanguage_MODE)
void
OLED_ShowLanguage (uint8_t X, uint8_t Y, const uint8_t (*pArray)[16],
uint16_t Len, uint8_t Inverse)
// #elif (1 == _OLED_ShowLanguage_MODE)
// void
// OLED_ShowLanguage (uint8_t X, uint8_t Y, const uint8_t (*pArray)[16],
// uint16_t Len, uint8_t Inverse)
#endif /* _OLED_ShowLanguage_MODE */
{
uint8_t i, j;
uint8_t q = 0;
uint8_t temp = 0;
uint8_t distribute_flag = 0; // 文字平均分布标志
// #endif /* _OLED_ShowLanguage_MODE */
// {
// uint8_t i, j;
// uint8_t q = 0;
// uint8_t temp = 0;
// uint8_t distribute_flag = 0; // 文字平均分布标志
if (Len <= 8)
{
if (!X) // 首位显示,自动平均分布
{
switch (Len)
{
case 1:
temp = 56; // OLED_MAX_COLUMN / 2 - 8 = 56
break;
case 2:
temp
= 32; // (OLED_MAX_COLUMN - Len*16) / (Len + 1) = 32 Len = 2
break;
case 3:
temp = 20; // (OLED_MAX_COLUMN / 2 - 8) / 2 - 8 = 20
break;
case 4:
temp = 13; // (OLED_MAX_COLUMN - Len*16) / (Len + 1) = 12 .... 4
// Len = 4
break;
case 5:
temp = 8; // ((OLED_MAX_COLUMN / 2 - 8) - ((Len - 1) / 2)*16) /
// ((Len - 1) / 2 + 1) = 8 Len = 5
break;
case 6:
temp = 5; // (OLED_MAX_COLUMN - Len*16) / (Len + 1) = 4 .... 4
// Len = 6
break;
case 7:
temp = 2; // ((OLED_MAX_COLUMN / 2 - 8) / 2 - 8) / 2 - 8 = 2
break;
case 8:
temp = 0;
break;
default:
break;
}
X += temp;
distribute_flag = 1;
}
// if (Len <= 8)
// {
// if (!X) // 首位显示,自动平均分布
// {
// switch (Len)
// {
// case 1:
// temp = 56; // OLED_MAX_COLUMN / 2 - 8 = 56
// break;
// case 2:
// temp
// = 32; // (OLED_MAX_COLUMN - Len*16) / (Len + 1) = 32 Len
// = 2
// break;
// case 3:
// temp = 20; // (OLED_MAX_COLUMN / 2 - 8) / 2 - 8 = 20
// break;
// case 4:
// temp = 13; // (OLED_MAX_COLUMN - Len*16) / (Len + 1) = 12 ....
// 4
// // Len = 4
// break;
// case 5:
// temp = 8; // ((OLED_MAX_COLUMN / 2 - 8) - ((Len - 1) / 2)*16)
// /
// // ((Len - 1) / 2 + 1) = 8 Len = 5
// break;
// case 6:
// temp = 5; // (OLED_MAX_COLUMN - Len*16) / (Len + 1) = 4 .... 4
// // Len = 6
// break;
// case 7:
// temp = 2; // ((OLED_MAX_COLUMN / 2 - 8) / 2 - 8) / 2 - 8 = 2
// break;
// case 8:
// temp = 0;
// break;
// default:
// break;
// }
// X += temp;
// distribute_flag = 1;
// }
for (j = 0; j < Len; j++)
{
OLED_Coord (X, Y);
for (i = 0; i < 16; i++)
{
// for (j = 0; j < Len; j++)
// {
// OLED_Coord (X, Y);
// for (i = 0; i < 16; i++)
// {
#if (0 == _OLED_ShowLanguage_MODE)
OLED_Write_Data (*(pArray + 2 * j * 16 + i),
Inverse); // 前十六个数据
// #if (0 == _OLED_ShowLanguage_MODE)
// OLED_Write_Data (*(pArray + 2 * j * 16 + i),
// Inverse); // 前十六个数据
#elif (1 == _OLED_ShowLanguage_MODE)
OLED_Write_Data (pArray[2 * j][i], Inverse); // 前十六个数据
// #elif (1 == _OLED_ShowLanguage_MODE)
// OLED_Write_Data (pArray[2 * j][i], Inverse); // 前十六个数据
#endif /* _OLED_ShowLanguage_MODE */
}
// #endif /* _OLED_ShowLanguage_MODE */
// }
OLED_Coord (X, Y + 1);
for (i = 0; i < 16; i++)
{
// OLED_Coord (X, Y + 1);
// for (i = 0; i < 16; i++)
// {
#if (0 == _OLED_ShowLanguage_MODE)
OLED_Write_Data (*(pArray + 2 * j * 16 + 16 + i),
Inverse); // 后十六个数据
// #if (0 == _OLED_ShowLanguage_MODE)
// OLED_Write_Data (*(pArray + 2 * j * 16 + 16 + i),
// Inverse); // 后十六个数据
#elif (1 == _OLED_ShowLanguage_MODE)
OLED_Write_Data (pArray[2 * j + 1][i], Inverse); // 后十六个数据
// #elif (1 == _OLED_ShowLanguage_MODE)
// OLED_Write_Data (pArray[2 * j + 1][i], Inverse); //
// 后十六个数据
#endif /* _OLED_ShowLanguage_MODE */
}
X += (16 + temp);
// #endif /* _OLED_ShowLanguage_MODE */
// }
// X += (16 + temp);
if (distribute_flag)
{
q++;
// if (distribute_flag)
// {
// q++;
/* 特殊处理 */
if ((4 == Len && 2 == q) || (6 == Len && 0 == (q + 1) % 2))
{
X -= 1;
}
}
}
}
}
// /* 特殊处理 */
// if ((4 == Len && 2 == q) || (6 == Len && 0 == (q + 1) % 2))
// {
// X -= 1;
// }
// }
// }
// }
// }
/************************************************
函数名称 OLED_Display_On
@ -885,7 +891,7 @@ OLED_Draw_Font (uint8_t X, uint8_t Y, const uint8_t *pArray, uint8_t Inverse)
// for(i = 0;i < 16;i++)
// {
// OLED_Write_Data(*(buffer + 2*j*16 + i),
//Inverse); // 前十六个数据
// Inverse); // 前十六个数据
// }
// OLED_Coord(X, Y+1);
// for(i = 0;i < 16;i++)