1507 lines
36 KiB
C
1507 lines
36 KiB
C
#include "oled2.h"
|
||
#include "app.h"
|
||
|
||
|
||
|
||
/*******************************************模拟I2C***********************************************************/
|
||
static void i2c_Delay(void)
|
||
{
|
||
uint8_t i;
|
||
|
||
/*
|
||
下面的时间是通过逻辑分析仪测试得到的。
|
||
工作条件:CPU主频72MHz ,MDK编译环境,1级优化
|
||
|
||
循环次数为10时,SCL频率 = 205KHz
|
||
循环次数为7时,SCL频率 = 347KHz, SCL高电平时间1.5us,SCL低电平时间2.87us
|
||
循环次数为5时,SCL频率 = 421KHz, SCL高电平时间1.25us,SCL低电平时间2.375us
|
||
*/
|
||
for (i = 0; i < 10; i++)
|
||
;
|
||
}
|
||
|
||
void i2c_Start(void)
|
||
{
|
||
/* 当SCL高电平时,SDA出现一个下跳沿表示I2C总线启动信号 */
|
||
BSP_I2C_SDA_1();
|
||
BSP_I2C_SCL_1();
|
||
i2c_Delay();
|
||
BSP_I2C_SDA_0();
|
||
i2c_Delay();
|
||
BSP_I2C_SCL_0();
|
||
i2c_Delay();
|
||
}
|
||
|
||
void i2c_Stop(void)
|
||
{
|
||
/* 当SCL高电平时,SDA出现一个上跳沿表示I2C总线停止信号 */
|
||
BSP_I2C_SDA_0();
|
||
BSP_I2C_SCL_1();
|
||
i2c_Delay();
|
||
BSP_I2C_SDA_1();
|
||
}
|
||
|
||
void i2c_SendByte(uint8_t _ucByte)
|
||
{
|
||
uint8_t i;
|
||
|
||
/* 先发送字节的高位bit7 */
|
||
for (i = 0; i < 8; i++)
|
||
{
|
||
if (_ucByte & 0x80)
|
||
{
|
||
BSP_I2C_SDA_1();
|
||
}
|
||
else
|
||
{
|
||
BSP_I2C_SDA_0();
|
||
}
|
||
i2c_Delay();
|
||
BSP_I2C_SCL_1();
|
||
i2c_Delay();
|
||
BSP_I2C_SCL_0();
|
||
if (i == 7)
|
||
{
|
||
BSP_I2C_SDA_1(); // 释放总线
|
||
}
|
||
_ucByte <<= 1; /* 左移一个bit */
|
||
i2c_Delay();
|
||
}
|
||
}
|
||
|
||
uint8_t i2c_ReadByte(void)
|
||
{
|
||
uint8_t i;
|
||
uint8_t value;
|
||
|
||
/* 读到第1个bit为数据的bit7 */
|
||
value = 0;
|
||
for (i = 0; i < 8; i++)
|
||
{
|
||
value <<= 1;
|
||
BSP_I2C_SCL_1();
|
||
i2c_Delay();
|
||
if (BSP_I2C_SDA_READ())
|
||
{
|
||
value++;
|
||
}
|
||
BSP_I2C_SCL_0();
|
||
i2c_Delay();
|
||
}
|
||
return value;
|
||
}
|
||
|
||
uint8_t i2c_WaitAck(void)
|
||
{
|
||
uint8_t re;
|
||
|
||
BSP_I2C_SDA_1(); /* CPU释放SDA总线 */
|
||
i2c_Delay();
|
||
BSP_I2C_SCL_1(); /* CPU驱动SCL = 1, 此时器件会返回ACK应答 */
|
||
i2c_Delay();
|
||
if (BSP_I2C_SDA_READ()) /* CPU读取SDA口线状态 */
|
||
{
|
||
re = 1;
|
||
}
|
||
else
|
||
{
|
||
re = 0;
|
||
}
|
||
BSP_I2C_SCL_0();
|
||
i2c_Delay();
|
||
return re;
|
||
}
|
||
|
||
void i2c_Ack(void)
|
||
{
|
||
BSP_I2C_SDA_0(); /* CPU驱动SDA = 0 */
|
||
i2c_Delay();
|
||
BSP_I2C_SCL_1(); /* CPU产生1个时钟 */
|
||
i2c_Delay();
|
||
BSP_I2C_SCL_0();
|
||
i2c_Delay();
|
||
BSP_I2C_SDA_1(); /* CPU释放SDA总线 */
|
||
}
|
||
|
||
void i2c_NAck(void)
|
||
{
|
||
BSP_I2C_SDA_1(); /* CPU驱动SDA = 1 */
|
||
i2c_Delay();
|
||
BSP_I2C_SCL_1(); /* CPU产生1个时钟 */
|
||
i2c_Delay();
|
||
BSP_I2C_SCL_0();
|
||
i2c_Delay();
|
||
}
|
||
|
||
|
||
void i2c_CfgGpio(void)
|
||
{
|
||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||
I2Cx_SCL_GPIO_CLK_ENABLE();
|
||
I2Cx_SDA_GPIO_CLK_ENABLE();
|
||
/**I2C2 GPIO Configuration
|
||
PB10 ------> I2C2_SCL
|
||
PB9 ------> I2C2_SDA
|
||
*/
|
||
GPIO_InitStruct.Pin = BSP_I2C_SCL_PIN | BSP_I2C_SDA_PIN;
|
||
;
|
||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
|
||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||
HAL_GPIO_Init(BSP_GPIO_PORT_I2C, &GPIO_InitStruct);
|
||
/* 给一个停止信号, 复位I2C总线上的所有设备到待机模式 */
|
||
i2c_Stop();
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/*******************************************模拟I2C***********************************************************/
|
||
//static uint8_t sendBuffer[2] = {0};
|
||
|
||
//void OLED2_Send(uint8_t *data, uint8_t len)//发送数据 8bit * len
|
||
//{
|
||
// //HAL_I2C_Master_Transmit(&hi2c1, SSD1306_I2C_ADDR| 0x00, data, len,10);//1000
|
||
//}
|
||
|
||
//void SSD1306_WriteCmd(uint8_t cmd)//发送命令 [0x00;cmd]
|
||
//{
|
||
// sendBuffer[0] = 0x00;
|
||
// sendBuffer[1] = cmd;
|
||
// OLED2_Send(sendBuffer, 2);
|
||
// delay_us(50);
|
||
//}
|
||
void SSD1306_WriteCmd(uint8_t cmd)
|
||
{
|
||
// sendBuffer[0] = 0x00;
|
||
// sendBuffer[1] = cmd;
|
||
// HAL_I2C_Master_Transmit(&hi2c1,SSD1306_I2C_ADDR,sendBuffer, 2,20);
|
||
|
||
i2c_Start();
|
||
i2c_SendByte(SSD1306_I2C_ADDR | 0x00);
|
||
i2c_Ack();
|
||
i2c_SendByte(0x00); //cmd
|
||
i2c_Ack();
|
||
i2c_SendByte(cmd);
|
||
i2c_Ack();
|
||
i2c_Stop();
|
||
}
|
||
|
||
void SSD1306_WriteData(uint8_t data)
|
||
{
|
||
// sendBuffer[0] = 0x40;
|
||
// sendBuffer[1] = data;
|
||
// OLED2_Send(sendBuffer, 2);
|
||
|
||
i2c_Start();
|
||
i2c_SendByte(SSD1306_I2C_ADDR | 0x00);
|
||
i2c_Ack();
|
||
i2c_SendByte(0x40); //data
|
||
i2c_Ack();
|
||
i2c_SendByte(data);
|
||
i2c_Ack();
|
||
i2c_Stop();
|
||
}
|
||
|
||
//SSD1306???
|
||
void OLED2_Init(void)
|
||
{
|
||
delay_us(500000);
|
||
//SSD1306????,?????????
|
||
|
||
SSD1306_WriteCmd(0xAE);//--display off
|
||
|
||
SSD1306_WriteCmd(0x00);//--set low column address
|
||
SSD1306_WriteCmd(0x10);//--set high column address
|
||
SSD1306_WriteCmd(0x40);//--set start line address
|
||
|
||
SSD1306_WriteCmd(0xB0);//--set page address
|
||
|
||
SSD1306_WriteCmd(0x81);// contract control
|
||
SSD1306_WriteCmd(0xFF);//--128
|
||
// SSD1306_WriteCmd(0xA1);//set segment re-map 0 to 127
|
||
SSD1306_WriteCmd(0xA0);//左右翻转
|
||
SSD1306_WriteCmd(0xA6);//set normal display
|
||
SSD1306_WriteCmd(0xA8);//set multiplex ratio(1 to 64)
|
||
SSD1306_WriteCmd(0x3F);//--1/32 duty
|
||
|
||
// SSD1306_WriteCmd(0xC8);//Com scan direction
|
||
SSD1306_WriteCmd(0xC0);//上下翻转
|
||
SSD1306_WriteCmd(0xD3);//set display offset
|
||
SSD1306_WriteCmd(0x00);//no offset
|
||
|
||
SSD1306_WriteCmd(0xD5);//set display clock divide ratio/oscillator frequency
|
||
SSD1306_WriteCmd(0x80);//
|
||
|
||
SSD1306_WriteCmd(0xD8);//set area color mode off
|
||
SSD1306_WriteCmd(0x05);//
|
||
|
||
SSD1306_WriteCmd(0xD9);//Set Pre-Charge Period
|
||
SSD1306_WriteCmd(0xF1);//
|
||
|
||
SSD1306_WriteCmd(0xDA);//set com pin hardware configuartion
|
||
SSD1306_WriteCmd(0x12);//
|
||
|
||
SSD1306_WriteCmd(0xDB);//set Vcomh
|
||
SSD1306_WriteCmd(0x30);//0x20,0.77xVcc
|
||
|
||
SSD1306_WriteCmd(0x8D);//set charge pump enable
|
||
SSD1306_WriteCmd(0x14);//
|
||
|
||
SSD1306_WriteCmd(0xAF);//--turn on oled panel
|
||
|
||
OLED_Clear();
|
||
}
|
||
|
||
//????:????????
|
||
void OLED_SetPos(uint8_t x, uint8_t y)
|
||
{
|
||
//??3???????????????
|
||
SSD1306_WriteCmd(0xb0+y); //????? 0xb0~0xb7
|
||
SSD1306_WriteCmd(((x&0xf0)>>4)|0x10); //???????
|
||
SSD1306_WriteCmd((x&0x0f)); //???????
|
||
}
|
||
|
||
//??OLED??
|
||
void OLED_DisplayOn(void)
|
||
{
|
||
SSD1306_WriteCmd(0X8D); //SET DCDC??
|
||
SSD1306_WriteCmd(0X14); //DCDC ON
|
||
SSD1306_WriteCmd(0XAF); //DISPLAY ON
|
||
}
|
||
|
||
//??OLED??
|
||
void OLED_DisplayOff(void)
|
||
{
|
||
SSD1306_WriteCmd(0X8D); //SET DCDC??
|
||
SSD1306_WriteCmd(0X10); //DCDC OFF
|
||
SSD1306_WriteCmd(0XAE); //DISPLAY OFF
|
||
}
|
||
|
||
//????,???,????????!??????
|
||
//int clr_i = 0;
|
||
//uint8_t clr_n = 0;
|
||
void OLED_Clear(void)
|
||
{
|
||
// clr_i *= (clr_i<8);
|
||
int i;
|
||
uint8_t n;
|
||
for(i=0;i<8;i++)
|
||
{
|
||
SSD1306_WriteCmd (0xb0+i); //?????(0~7)
|
||
SSD1306_WriteCmd (0x00); //??????<3F>????
|
||
SSD1306_WriteCmd (0x10); //??????<3F>????
|
||
for(n = 0;n < 128;n++)
|
||
SSD1306_WriteData(0);
|
||
} //????
|
||
// clr_i++;
|
||
}
|
||
|
||
//???????????,??????
|
||
//x:0~127,y:0~7
|
||
//Char_Size:???? 16/12
|
||
//uint8_t sc_i = 0;
|
||
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size,uint8_t color)
|
||
{
|
||
uint8_t c=0,i=0;
|
||
// uint8_t c = 0;
|
||
c=chr-' ';//???????
|
||
if(x>MAX_COLUMN-1)
|
||
{
|
||
x=0;
|
||
y=y+2;
|
||
}
|
||
if(Char_Size ==16)
|
||
{
|
||
if(color == 0)
|
||
{
|
||
OLED_SetPos(x,y);
|
||
for(i=0;i<8;i++)
|
||
{
|
||
SSD1306_WriteData(F8X16[c*16+i]);//??????
|
||
}
|
||
|
||
OLED_SetPos(x,y+1);
|
||
for(i=0;i<8;i++)
|
||
{
|
||
SSD1306_WriteData(F8X16[c*16+i+8]);//??????
|
||
}
|
||
}
|
||
if(color == 1)
|
||
{
|
||
OLED_SetPos(x,y);
|
||
for(i=0;i<8;i++)
|
||
{
|
||
SSD1306_WriteData(~F8X16[c*16+i]);//??????
|
||
}
|
||
|
||
OLED_SetPos(x,y+1);
|
||
for(i=0;i<8;i++)
|
||
{
|
||
SSD1306_WriteData(~F8X16[c*16+i+8]);//??????
|
||
}
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
OLED_SetPos(x,y);
|
||
for(i=0;i<6;i++)
|
||
{
|
||
SSD1306_WriteData(F6x8[c][i]);
|
||
}
|
||
// sc_i *= (sc_i<6);
|
||
// OLED_SetPos(x,y);
|
||
// SSD1306_WriteData(F6x8[c][sc_i]);
|
||
// sc_i++;
|
||
}
|
||
}
|
||
|
||
//???????
|
||
void OLED_ShowString(uint8_t x,uint8_t y,char *str,uint8_t Char_Size,uint8_t color)
|
||
{
|
||
unsigned char j=0;
|
||
|
||
while (str[j]!='\0')
|
||
{
|
||
OLED_ShowChar(x,y,str[j],Char_Size,color);
|
||
x+=8;
|
||
if(x>120)
|
||
{
|
||
x=0;
|
||
y+=2;
|
||
}
|
||
j++;//????????page,??0-7
|
||
}
|
||
}
|
||
|
||
//????
|
||
//?????16*16???,??????4???
|
||
//index:?????????
|
||
void OLED_ShowCN(uint8_t x,uint8_t y,uint8_t index,uint8_t color)
|
||
{
|
||
uint8_t t;
|
||
|
||
if(color == 0)
|
||
{
|
||
OLED_SetPos(x,y);
|
||
for(t=0;t<16;t++)
|
||
{
|
||
SSD1306_WriteData(Hzk[index][t]);
|
||
}
|
||
|
||
OLED_SetPos(x,y+1);
|
||
for(t=0;t<16;t++)
|
||
{
|
||
SSD1306_WriteData(Hzk[index][t+16]);
|
||
}
|
||
}
|
||
|
||
if(color == 1)
|
||
{
|
||
OLED_SetPos(x,y);
|
||
for(t=0;t<16;t++)
|
||
{
|
||
SSD1306_WriteData(~Hzk[index][t]);
|
||
}
|
||
|
||
OLED_SetPos(x,y+1);
|
||
for(t=0;t<16;t++)
|
||
{
|
||
SSD1306_WriteData(~Hzk[index][t+16]);
|
||
}
|
||
}
|
||
}
|
||
|
||
char str_print2[16] = {0},str_print3[5] = {0};
|
||
float Xads_temp2[2] = {0},T_temp2[2] = {0},OC1_temp[2] = {0},OC2_temp[2] = {0};
|
||
char disp_step2 = 0;
|
||
void OLED_DisplayTest(void)
|
||
{
|
||
switch(disp_step2)
|
||
{
|
||
case 0 :// 初始化
|
||
{
|
||
OLED2_Init();
|
||
disp_step2++;
|
||
}
|
||
break;
|
||
case 1 :// 显示不动
|
||
{
|
||
disp_step2++;
|
||
OLED_ShowString(0,0,(char *)("Pos"),16,0); //(x,y,char,size,color), color{0正常,1反显},x{0-128},y{}
|
||
sprintf(str_print2, "%.2f",X_ads1220 ); // 电阻尺
|
||
OLED_ShowString(0,2,str_print2,16,0);
|
||
OLED_ShowString(0,4,(char *)("Temp"),16,0);
|
||
sprintf(str_print3, "%.2f",TEMP_M1820 ); //温度
|
||
OLED_ShowString(40,6," ",16,0);
|
||
OLED_ShowString(48,2,(char *)("mv"),16,0);
|
||
}
|
||
break;
|
||
case 2 :// 显示动的部分
|
||
{
|
||
//位置
|
||
Xads_temp2[0] = X_ads1220;
|
||
if(Xads_temp2[1] - Xads_temp2[0] > 0.001 )
|
||
{
|
||
OLED_ShowString(40,2," ",16,0);
|
||
sprintf(str_print2, "%.2f",Xads_temp2[0]*100 ); // 电阻尺
|
||
OLED_ShowString(0,2,str_print2,16,0);
|
||
Xads_temp2[1] = Xads_temp2[0];
|
||
}
|
||
|
||
//温度
|
||
T_temp2[0] = TEMP_M1820;
|
||
if(T_temp2[1] != T_temp2[0])
|
||
{
|
||
sprintf(str_print2, "%.2f",T_temp2[1] ); //温度
|
||
OLED_ShowString(40,6," ",16,0);
|
||
OLED_ShowString(0,6,str_print2,16,0);
|
||
T_temp2[1] = T_temp2[0];
|
||
}
|
||
|
||
|
||
}
|
||
break;
|
||
default ://
|
||
{
|
||
disp_step2 = 0;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
char oled_p = 0,oled_s[2] = {0},oled_en = 1,oled_s_motorok[2] = {0},oled_s_magnetok[2] = {0}; //界面选择指针暂存
|
||
char magnet_select[2] = {0},magnet_s_ok[2] = {0}; //磁条规格切换、确认取消指针
|
||
char para_flag = 0,motor_flag1 = 0,motor_flag2 = 0,magnet_flag = 0; //界面标记,用于区分只显示一次和需要刷新的内容
|
||
unsigned int step_temp[2] = {1,1},smp_intr_temp[2] = {0},smp_dpth_temp[2] = {0}; //步长、采样间隔、采样深度暂存
|
||
char run_mode_temp[2] = {0},magnetx_temp[2] = {0}; //运行模式(点动,循环)暂存,磁条规格暂存
|
||
signed int magnetv_temp[2] = {0}; //磁感应读数暂存
|
||
float x_magnet_temp[2] = {0}; //磁条校准位置暂存
|
||
int direc_temp[2] = {1,1}; //反向暂存
|
||
uint16_t flash_wrt[6] = {0},flash_rd[6] = {0}; //0:#25中点,1:#50中点,2:#110中点
|
||
char magnet_motor_sw = 0; //磁条校准时电机运动开关
|
||
void OLED_MenuTest(void)
|
||
{
|
||
switch(oled_p)
|
||
{
|
||
case 0: //初始化
|
||
{
|
||
OLED2_Init();
|
||
oled_p++;
|
||
}
|
||
break;
|
||
case 1: //显示不动的内容,初始化缓存
|
||
{
|
||
OLED_Clear();
|
||
|
||
|
||
OLED_ShowCN(0,0,2,0); //正常“参”,第0页
|
||
OLED_ShowCN(24,0,3,0); //正常“数”,第0页
|
||
OLED_ShowCN(48,0,4,0); //正常“监”,第0页
|
||
OLED_ShowCN(72,0,5,0); //正常“测”,第0页
|
||
|
||
OLED_ShowCN(0,2,6,0); //正常“电”,第2页
|
||
OLED_ShowCN(24,2,7,0); //正常“机”,第2页
|
||
OLED_ShowCN(48,2,8,0); //正常“控”,第2页
|
||
OLED_ShowCN(72,2,9,0); //正常“制”,第2页
|
||
|
||
OLED_ShowCN(0,4,10,0); //正常“磁”,第4页
|
||
OLED_ShowCN(24,4,11,0); //正常“条”,第4页
|
||
OLED_ShowCN(48,4,12,0); //正常“采”,第4页
|
||
OLED_ShowCN(72,4,13,0); //正常“样”,第4页
|
||
|
||
OLED_ShowCN(0,6,10,0); //正常“磁”,第6页
|
||
OLED_ShowCN(24,6,11,0); //正常“条”,第6页
|
||
OLED_ShowCN(48,6,51,0); //正常“校”,第6页
|
||
OLED_ShowCN(72,6,52,0); //正常“准”,第6页
|
||
|
||
if(oled_s[0] == 0) OLED_ShowChar(112,0,'<',16,0);
|
||
if(oled_s[0] == 1) OLED_ShowChar(112,2,'<',16,0);
|
||
if(oled_s[0] == 2) OLED_ShowChar(112,4,'<',16,0);
|
||
if(oled_s[0] == 3) OLED_ShowChar(112,6,'<',16,0);
|
||
|
||
oled_p++;
|
||
}
|
||
break;
|
||
case 2: //菜单选择
|
||
{
|
||
if(oled_s[0] != oled_s[1]) //是否发生变化
|
||
{
|
||
if(oled_s[0] == 0) //当前选择第0行
|
||
{
|
||
OLED_ShowChar(112,0,'<',16,0);
|
||
if(oled_s[1] == 1) OLED_ShowChar(112,2,' ',16,0); //刷新之前所在行1
|
||
if(oled_s[1] == 3) OLED_ShowChar(112,6,' ',16,0); //刷新之前所在行2
|
||
oled_s[1] = oled_s[0];
|
||
|
||
}
|
||
if(oled_s[0] == 1)
|
||
{
|
||
OLED_ShowChar(112,2,'<',16,0);
|
||
if(oled_s[1] == 0) OLED_ShowChar(112,0,' ',16,0);
|
||
if(oled_s[1] == 2) OLED_ShowChar(112,4,' ',16,0);
|
||
oled_s[1] = oled_s[0];
|
||
|
||
}
|
||
if(oled_s[0] == 2)
|
||
{
|
||
OLED_ShowChar(112,4,'<',16,0);
|
||
if(oled_s[1] == 1) OLED_ShowChar(112,2,' ',16,0);
|
||
if(oled_s[1] == 3) OLED_ShowChar(112,6,' ',16,0);
|
||
oled_s[1] = oled_s[0];
|
||
}
|
||
if(oled_s[0] == 3)
|
||
{
|
||
OLED_ShowChar(112,6,'<',16,0);
|
||
if(oled_s[1] == 2) OLED_ShowChar(112,4,' ',16,0);
|
||
if(oled_s[1] == 0) OLED_ShowChar(112,0,' ',16,0);
|
||
oled_s[1] = oled_s[0];
|
||
}
|
||
}
|
||
|
||
if( (oled_s[0] == 0) && (oled_en == 1) ) //进入参数观测
|
||
{
|
||
oled_en = 0;
|
||
oled_p = 3;
|
||
}
|
||
if( (oled_s[0] == 1) && (oled_en == 1) ) //进入电机控制
|
||
{
|
||
oled_en = 0;
|
||
oled_p = 4;
|
||
}
|
||
if( (oled_s[0] == 2) && (oled_en == 1) ) //进入磁性传感器采样设置
|
||
{
|
||
oled_en = 0;
|
||
oled_p = 9;
|
||
}
|
||
if( (oled_s[0] == 3) && (oled_en == 1) ) //进入磁条校准界面
|
||
{
|
||
oled_en = 0;
|
||
oled_p = 12;
|
||
}
|
||
}
|
||
break;
|
||
case 3: //参数显示,发生变化时刷新
|
||
{
|
||
if(para_flag == 0) //只显示一次
|
||
{
|
||
para_flag = 1;
|
||
OLED_Clear();
|
||
|
||
OLED_ShowCN(0,0,6,0); //正常“电”,第0页
|
||
OLED_ShowCN(16,0,14,0); //正常“阻”,第0页
|
||
OLED_ShowCN(32,0,15,0); //正常“尺”,第0页
|
||
OLED_ShowChar(96,0,' ',16,0); //刷新第六位
|
||
sprintf(str_print2, "%d",(int)X_ads1220 );
|
||
OLED_ShowString(56,0,str_print2,16,0); //电阻尺ADC值
|
||
// OLED_ShowString(112,0,"mv",16,0); //mv
|
||
|
||
OLED_ShowCN(0,2,16,0); //正常“温”,第2页
|
||
OLED_ShowCN(16,2,17,0); //正常“度”,第2页
|
||
if( TEMP_M1820 > 50) TEMP_M1820 = 25.00;
|
||
sprintf(str_print3, "%.1f",TEMP_M1820 );
|
||
OLED_ShowString(56,2,str_print3,16,0); //温度值
|
||
|
||
OLED_ShowCN(0,4,10,0); //正常“磁”,第4页
|
||
OLED_ShowCN(16,4,11,0); //正常“条”,第4页
|
||
if( abs(vol_data) > 500) vol_data = 500;
|
||
sprintf(str_print2, "%d",vol_data );
|
||
OLED_ShowString(56,4,str_print2,16,0); //磁条感应值
|
||
|
||
if(ocin1 == 1)
|
||
{
|
||
OLED_ShowString(0,6,"-----",16,0); //未到达,显示“----”
|
||
}else
|
||
{
|
||
OLED_ShowCN(0,6,18,0); //正常“限”,第4页
|
||
OLED_ShowCN(16,6,19,0); //正常“位”,第4页
|
||
OLED_ShowChar(32,6,'1',16,0); //'1'
|
||
}
|
||
if(ocin2 == 1)
|
||
{
|
||
OLED_ShowString(72,6,"-----",16,0); //未到达,显示“----”
|
||
}else
|
||
{
|
||
OLED_ShowCN(72,6,18,0); //正常“限”,第6页
|
||
OLED_ShowCN(88,6,19,0); //正常“位”,第6页
|
||
OLED_ShowChar(104,6,'2',16,0); //'2'
|
||
}
|
||
|
||
|
||
}else //变化时刷新
|
||
{
|
||
//位置
|
||
Xads_temp2[0] = X_ads1220;
|
||
if( (Xads_temp2[1] - Xads_temp2[0] >= 1) || (Xads_temp2[0] - Xads_temp2[1] >= 1))
|
||
{
|
||
sprintf(str_print2, "%d",(int)Xads_temp2[0] ); // 电阻尺
|
||
OLED_ShowChar(80,0,' ',16,0); //刷新第4位
|
||
OLED_ShowString(56,0,str_print2,16,0);
|
||
Xads_temp2[1] = Xads_temp2[0];
|
||
}
|
||
|
||
//温度
|
||
T_temp2[0] = TEMP_M1820;
|
||
if((T_temp2[1] != T_temp2[0]) && (T_temp2[1] < 50))
|
||
{
|
||
sprintf(str_print3, "%.1f",T_temp2[1] ); //温度
|
||
OLED_ShowString(56,2,str_print3,16,0);
|
||
OLED_ShowChar(72,2,'.',16,0); //刷新小数点,防止乱码
|
||
T_temp2[1] = T_temp2[0];
|
||
}
|
||
|
||
//磁条
|
||
magnetv_temp[0] = vol_data;
|
||
if( abs(vol_data) > 500) vol_data = 500;
|
||
if(magnetv_temp[1] != magnetv_temp[0])
|
||
{
|
||
OLED_ShowString(64,4," ",16,0);
|
||
sprintf(str_print2, "%d",vol_data );
|
||
OLED_ShowString(56,4,str_print2,16,0); //磁条感应值
|
||
magnetv_temp[1] = magnetv_temp[0];
|
||
}
|
||
|
||
//位置开关1
|
||
OC1_temp[0] = ocin1;
|
||
if( OC1_temp[1] != OC1_temp[0] )
|
||
{
|
||
if(OC1_temp[0] == 1)
|
||
{
|
||
OLED_ShowString(0,6,"-----",16,0); //未到达,显示“----”
|
||
}else
|
||
{
|
||
OLED_ShowCN(0,6,18,0); //正常“限”,第4页
|
||
OLED_ShowCN(16,6,19,0); //正常“位”,第4页
|
||
OLED_ShowChar(32,6,'1',16,0); //'1'
|
||
}
|
||
OC1_temp[1] = OC1_temp[0];
|
||
}
|
||
|
||
//位置开关2
|
||
OC2_temp[0] = ocin2;
|
||
if( OC2_temp[1] != OC2_temp[0] )
|
||
{
|
||
if(OC2_temp[0] == 1)
|
||
{
|
||
OLED_ShowString(72,6,"-----",16,0); //未到达,显示“----”
|
||
}else
|
||
{
|
||
OLED_ShowCN(72,6,18,0); //正常“限”,第6页
|
||
OLED_ShowCN(88,6,19,0); //正常“位”,第6页
|
||
OLED_ShowChar(104,6,'2',16,0); //'2'
|
||
}
|
||
OC2_temp[1] = OC2_temp[0];
|
||
}
|
||
}
|
||
|
||
if(oled_en == 1) //OK键按下后返回菜单
|
||
{
|
||
oled_en = 0;
|
||
oled_p = 1;
|
||
para_flag = 0;
|
||
}
|
||
}
|
||
break;
|
||
case 4: //电机控制,设定运动模式
|
||
{
|
||
if(motor_flag1 == 0)
|
||
{
|
||
motor_flag1 = 1;
|
||
OLED_Clear();
|
||
|
||
OLED_ShowCN(0,0,22,0); //正常“运”,第0页
|
||
OLED_ShowCN(16,0,23,0); //正常“动”,第0页
|
||
OLED_ShowCN(32,0,24,0); //正常“模”,第0页
|
||
OLED_ShowCN(48,0,25,0); //正常“式”,第0页
|
||
|
||
if(Run_Mode == 0)
|
||
{
|
||
OLED_ShowCN(72,0,26,1); //反显“点”,第0页
|
||
OLED_ShowCN(88,0,27,1); //反显“动”,第0页
|
||
}
|
||
if(Run_Mode == 1)
|
||
{
|
||
OLED_ShowCN(72,0,28,1); //反显“循”,第0页
|
||
OLED_ShowCN(88,0,29,1); //反显“环”,第0页
|
||
}
|
||
if(Run_Mode == 2)
|
||
{
|
||
OLED_ShowCN(72,0,50,1); //反显“复”,第0页
|
||
OLED_ShowCN(88,0,19,1); //反显“位”,第0页
|
||
}
|
||
run_mode_temp[0] = Run_Mode;
|
||
run_mode_temp[1] = Run_Mode;
|
||
|
||
OLED_ShowCN(0,2,22,0); //正常“运”,第2页
|
||
OLED_ShowCN(16,2,23,0); //正常“动”,第2页
|
||
OLED_ShowCN(32,2,30,0); //正常“步”,第2页
|
||
OLED_ShowCN(48,2,31,0); //正常“长”,第2页
|
||
sprintf(str_print3, "%d",Run_mm );
|
||
OLED_ShowString(72,2,str_print3,16,0);
|
||
OLED_ShowString(96,2,"mm",16,0);
|
||
step_temp[0] = Run_mm;
|
||
step_temp[1] = Run_mm;
|
||
|
||
OLED_ShowCN(0,4,22,0); //正常“运”,第4页
|
||
OLED_ShowCN(16,4,23,0); //正常“动”,第4页
|
||
OLED_ShowCN(32,4,32,0); //正常“方”,第4页
|
||
OLED_ShowCN(48,4,33,0); //正常“向”,第4页
|
||
|
||
if(motor_direc == 2)
|
||
{
|
||
OLED_ShowCN(72,4,35,0); //正常“反”,第4页
|
||
}
|
||
if(motor_direc == 1)
|
||
{
|
||
OLED_ShowCN(72,4,34,0); //正常“正”,第4页
|
||
}
|
||
direc_temp[0] = motor_direc;
|
||
direc_temp[1] = motor_direc;
|
||
|
||
OLED_ShowCN(80,6,36,0); //正常“确”,第6页
|
||
OLED_ShowCN(96,6,37,0); //正常“认”,第6页
|
||
OLED_ShowCN(0,6,38,0); //正常“取”,第6页
|
||
OLED_ShowCN(16,6,39,0); //正常“消”,第6页
|
||
|
||
}else
|
||
{
|
||
if(run_mode_temp[0] != run_mode_temp[1]) //运动模式变化时刷新
|
||
{
|
||
if(run_mode_temp[0] == 0)
|
||
{
|
||
OLED_ShowCN(72,0,26,1); //反显“点”,第0页
|
||
OLED_ShowCN(88,0,27,1); //反显“动”,第0页
|
||
}
|
||
if(run_mode_temp[0] == 1)
|
||
{
|
||
OLED_ShowCN(72,0,28,1); //反显“循”,第0页
|
||
OLED_ShowCN(88,0,29,1); //反显“环”,第0页
|
||
}
|
||
if(run_mode_temp[0] == 2)
|
||
{
|
||
OLED_ShowCN(72,0,50,1); //反显“复”,第0页
|
||
OLED_ShowCN(88,0,19,1); //反显“位”,第0页
|
||
}
|
||
|
||
run_mode_temp[1] = run_mode_temp[0];
|
||
}
|
||
}
|
||
if( oled_en == 1 ) //运动模式确认后取消反显
|
||
{
|
||
oled_en = 0;
|
||
motor_flag1 = 0;
|
||
|
||
if(run_mode_temp[0] == 0)
|
||
{
|
||
OLED_ShowCN(72,0,26,0); //正常“点”,第0页
|
||
OLED_ShowCN(88,0,27,0); //正常“动”,第0页
|
||
}
|
||
if(run_mode_temp[0] == 1)
|
||
{
|
||
OLED_ShowCN(72,0,28,0); //正常“循”,第0页
|
||
OLED_ShowCN(88,0,29,0); //正常“环”,第0页
|
||
}
|
||
if(run_mode_temp[0] == 2)
|
||
{
|
||
OLED_ShowCN(72,0,50,0); //正常“复”,第0页
|
||
OLED_ShowCN(88,0,19,0); //正常“位”,第0页
|
||
|
||
}
|
||
|
||
|
||
oled_p = 5;
|
||
}
|
||
|
||
|
||
}
|
||
break;
|
||
case 5: //电机控制,设定运动步长
|
||
{
|
||
if(run_mode_temp[0] == 0)
|
||
{
|
||
if(motor_flag1 == 0)
|
||
{
|
||
motor_flag1 = 1;
|
||
|
||
sprintf(str_print3, "%d",Run_mm );
|
||
OLED_ShowString(72,2,str_print3,16,1);
|
||
step_temp[0] = Run_mm;
|
||
step_temp[1] = Run_mm;
|
||
|
||
}else
|
||
{
|
||
if(step_temp[0] != step_temp[1]) //步长变动时刷新
|
||
{
|
||
OLED_ShowString(80,2," ",16,0);
|
||
sprintf(str_print3, "%d",step_temp[0] );
|
||
OLED_ShowString(72,2,str_print3,16,1);
|
||
}
|
||
step_temp[1] = step_temp[0];
|
||
}
|
||
if(oled_en == 1) //步长确定后取消反显
|
||
{
|
||
oled_en = 0;
|
||
motor_flag1 = 0;
|
||
|
||
OLED_ShowString(72,2,str_print3,16,0);
|
||
|
||
oled_p = 6;
|
||
}
|
||
}
|
||
|
||
if(run_mode_temp[0] == 1)
|
||
{
|
||
step_temp[0] = 1;
|
||
step_temp[1] = 1;
|
||
OLED_ShowString(80,2," ",16,0);
|
||
sprintf(str_print3, "%d",step_temp[0] );
|
||
OLED_ShowString(72,2,str_print3,16,0);
|
||
oled_p = 7;
|
||
}
|
||
if(run_mode_temp[0] == 2)
|
||
{
|
||
step_temp[0] = 1;
|
||
step_temp[1] = 1;
|
||
OLED_ShowString(72,2,"--",16,0);
|
||
OLED_ShowCN(72,4,35,0); //反显“反”,第4页
|
||
oled_p = 7;
|
||
}
|
||
|
||
|
||
}
|
||
break;
|
||
case 6:
|
||
{
|
||
if(motor_flag1 == 0)
|
||
{
|
||
motor_flag1 = 1;
|
||
|
||
if(direc_temp[0] == 1)
|
||
{
|
||
OLED_ShowCN(72,4,34,1); //反显“正”,第4页
|
||
}
|
||
if(direc_temp[0] == 2)
|
||
{
|
||
OLED_ShowCN(72,4,35,1); //反显“反”,第4页
|
||
}
|
||
|
||
}else
|
||
{
|
||
if(direc_temp[0] !=direc_temp[1] )
|
||
{
|
||
if(direc_temp[0] == 1)
|
||
{
|
||
OLED_ShowCN(72,4,34,1); //反显“正”,第4页
|
||
}
|
||
if(direc_temp[0] == 2)
|
||
{
|
||
OLED_ShowCN(72,4,35,1); //反显“反”,第4页
|
||
}
|
||
|
||
direc_temp[1] = direc_temp[0];
|
||
}
|
||
}
|
||
|
||
if(oled_en == 1)
|
||
{
|
||
oled_en = 0;
|
||
motor_flag1 = 0;
|
||
|
||
if(direc_temp[0] == 1)
|
||
{
|
||
OLED_ShowCN(72,4,34,0); //正常“正”,第4页
|
||
}
|
||
if(direc_temp[0] == 2)
|
||
{
|
||
OLED_ShowCN(72,4,35,0); //正常“反”,第4页
|
||
}
|
||
|
||
oled_p = 7;
|
||
}
|
||
}
|
||
break;
|
||
case 7: //设置内容确认,OK后写入并运行,Cancel取消并返回菜单
|
||
{
|
||
if(motor_flag1 == 0)
|
||
{
|
||
motor_flag1 = 1;
|
||
oled_s_motorok[0] = 0;
|
||
oled_s_motorok[1] = 0;
|
||
OLED_ShowCN(0,6,38,1); //反显“取”,第6页
|
||
OLED_ShowCN(16,6,39,1); //反显“消”,第6页
|
||
|
||
}else
|
||
{
|
||
if(oled_s_motorok[0] != oled_s_motorok[1])
|
||
{
|
||
if(oled_s_motorok[0] == 0)
|
||
{
|
||
OLED_ShowCN(80,6,36,0); //正常“确”,第6页
|
||
OLED_ShowCN(96,6,37,0); //正常“认”,第6页
|
||
OLED_ShowCN(0,6,38,1); //反显“取”,第6页
|
||
OLED_ShowCN(16,6,39,1); //反显“消”,第6页
|
||
}
|
||
if(oled_s_motorok[0] == 1)
|
||
{
|
||
OLED_ShowCN(80,6,36,1); //反显“确”,第6页
|
||
OLED_ShowCN(96,6,37,1); //反显“认”,第6页
|
||
OLED_ShowCN(0,6,38,0); //正常“取”,第6页
|
||
OLED_ShowCN(16,6,39,0); //正常“消”,第6页
|
||
}
|
||
|
||
oled_s_motorok[1] = oled_s_motorok[0];
|
||
}
|
||
}
|
||
|
||
if((oled_en == 1) && (oled_s_motorok[0] == 0)) //取消后初始化暂存数据
|
||
{
|
||
oled_en = 0;
|
||
motor_flag1 = 0;
|
||
|
||
Motor_Run = 0;
|
||
run_mode_temp[0] = 0;
|
||
run_mode_temp[1] = 0;
|
||
step_temp[0] = 1;
|
||
step_temp[1] = 1;
|
||
direc_temp[0] = 1;
|
||
direc_temp[1] = 1;
|
||
|
||
oled_p = 1;
|
||
}
|
||
if((oled_en == 1) && (oled_s_motorok[0] == 1)) //确认后将暂存数据写入对应参数
|
||
{
|
||
oled_en = 0;
|
||
motor_flag1 = 0;
|
||
|
||
if(run_mode_temp[0] != 2)
|
||
{
|
||
Motor_Run = 1;
|
||
Run_Mode = run_mode_temp[0];
|
||
Run_mm = step_temp[0];
|
||
motor_direc = direc_temp[0];
|
||
}else //复位后初始化暂存数据
|
||
{
|
||
Motor_Run = 2;
|
||
run_mode_temp[0] = 0;
|
||
run_mode_temp[1] = 0;
|
||
step_temp[0] = 1;
|
||
step_temp[1] = 1;
|
||
direc_temp[0] = 1;
|
||
direc_temp[1] = 1;
|
||
}
|
||
|
||
oled_p = 8;
|
||
}
|
||
|
||
}
|
||
break;
|
||
case 8: //运行状态显示,运行中显示Running...,当前任务结束后显示Completed!
|
||
{
|
||
if(motor_flag2 == 0)
|
||
{
|
||
motor_flag2 = 1;
|
||
OLED_Clear();
|
||
|
||
OLED_ShowCN(0,0,22,0); //正常“运”,第0页
|
||
OLED_ShowCN(16,0,40,0); //正常“行”,第0页
|
||
OLED_ShowCN(32,0,41,0); //正常“中”,第0页
|
||
OLED_ShowString(48,0,".....",16,0);
|
||
|
||
OLED_ShowCN(0,2,6,0); //正常“电”,第2页
|
||
OLED_ShowCN(16,2,14,0); //正常“阻”,第2页
|
||
OLED_ShowCN(32,2,15,0); //正常“尺”,第2页
|
||
sprintf(str_print2, "%.2f",X_ads1220 );
|
||
OLED_ShowString(56,2,str_print2,16,0); //电阻尺ADC值
|
||
// OLED_ShowString(112,2,"mv",16,0); //mv
|
||
|
||
OLED_ShowCN(0,4,18,0); //正常“限”,第4页
|
||
OLED_ShowCN(16,4,19,0); //正常“位”,第4页
|
||
OLED_ShowChar(32,4,'1',16,0); //'1'
|
||
|
||
OLED_ShowCN(0,6,18,0); //正常“限”,第6页
|
||
OLED_ShowCN(16,6,19,0); //正常“位”,第6页
|
||
OLED_ShowChar(32,6,'2',16,0); //'2'
|
||
if(ocin1 == 1)
|
||
{
|
||
OLED_ShowString(56,4,"----",16,0); //未到达,显示“----”
|
||
}else
|
||
{
|
||
OLED_ShowCN(56,4,20,0); //正常“到”,第4页
|
||
OLED_ShowCN(72,4,21,0); //正常“达”,第4页
|
||
}
|
||
if(ocin2 == 1)
|
||
{
|
||
OLED_ShowString(56,6,"----",16,0); //未到达,显示“----”
|
||
}else
|
||
{
|
||
OLED_ShowCN(56,6,20,0); //正常“到”,第6页
|
||
OLED_ShowCN(72,6,21,0); //正常“达”,第6页
|
||
}
|
||
|
||
}else
|
||
{
|
||
//位置
|
||
Xads_temp2[0] = X_ads1220;
|
||
if( (Xads_temp2[1] - Xads_temp2[0] > 1) || (Xads_temp2[0] - Xads_temp2[1] > 1))
|
||
{
|
||
sprintf(str_print2, "%.2f",Xads_temp2[0] ); // 电阻尺
|
||
OLED_ShowString(56,2,str_print2,16,0);
|
||
OLED_ShowChar(112,2,' ',16,0);
|
||
Xads_temp2[1] = Xads_temp2[0];
|
||
}
|
||
|
||
//位置开关1
|
||
OC1_temp[0] = ocin1;
|
||
if( OC1_temp[1] != OC1_temp[0] )
|
||
{
|
||
if(OC1_temp[0] == 1)
|
||
{
|
||
OLED_ShowString(56,4,"----",16,0); //未到达,显示“----”
|
||
}else
|
||
{
|
||
OLED_ShowCN(56,4,20,0); //正常“到”,第4页
|
||
OLED_ShowCN(72,4,21,0); //正常“达”,第4页
|
||
}
|
||
OC1_temp[1] = OC1_temp[0];
|
||
}
|
||
|
||
//位置开关2
|
||
OC2_temp[0] = ocin2;
|
||
if( OC2_temp[1] != OC2_temp[0] )
|
||
{
|
||
if(OC2_temp[0] == 1)
|
||
{
|
||
OLED_ShowString(56,6,"----",16,0); //未到达,显示“----”
|
||
}else
|
||
{
|
||
OLED_ShowCN(56,6,20,0); //正常“到”,第6页
|
||
OLED_ShowCN(72,6,21,0); //正常“达”,第6页
|
||
}
|
||
OC2_temp[1] = OC2_temp[0];
|
||
}
|
||
|
||
|
||
if(Motor_Run == 0)
|
||
{
|
||
OLED_ShowCN(0,0,42,0); //正常“已”,第0页
|
||
OLED_ShowCN(16,0,43,0); //正常“完”,第0页
|
||
OLED_ShowCN(32,0,44,0); //正常“成”,第0页
|
||
OLED_ShowString(48,0,"! ",16,0);
|
||
}
|
||
}
|
||
|
||
if(oled_en == 1) //按下OK后返回主菜单
|
||
{
|
||
oled_en = 0;
|
||
|
||
Runmotor_step = 0;
|
||
Motor_Run = 0;
|
||
oled_p = 1;
|
||
motor_flag2 = 0;
|
||
}
|
||
}
|
||
break;
|
||
case 9: //磁感应传感模块采样设置,设置采样间隔ms
|
||
{
|
||
if(magnet_flag == 0)
|
||
{
|
||
magnet_flag = 1;
|
||
OLED_Clear();
|
||
|
||
smp_intr_temp[0] = magnet_tx[3];
|
||
smp_intr_temp[1] = magnet_tx[3];
|
||
smp_dpth_temp[0] = magnet_tx[5];
|
||
smp_dpth_temp[1] = magnet_tx[5];
|
||
|
||
OLED_ShowCN(32,0,12,1); //反显“采”,第0页
|
||
OLED_ShowCN(48,0,13,1); //反显“样”,第0页
|
||
OLED_ShowCN(64,0,45,1); //反显“设”,第0页
|
||
OLED_ShowCN(80,0,46,1); //反显“置”,第0页
|
||
OLED_ShowString(0,0," ",16,1);
|
||
OLED_ShowString(96,0," ",16,1);
|
||
|
||
OLED_ShowCN(0,2,12,0); //正常“采”,第2页
|
||
OLED_ShowCN(16,2,13,0); //正常“样”,第2页
|
||
OLED_ShowCN(32,2,47,0); //正常“间”,第2页
|
||
OLED_ShowCN(48,2,48,0); //正常“隔”,第2页
|
||
sprintf(str_print2, "%d",smp_intr_temp[0] );
|
||
OLED_ShowString(72,2,str_print2,16,1);
|
||
OLED_ShowString(96,2,"ms",16,0);
|
||
|
||
OLED_ShowCN(0,4,12,0); //正常“采”,第4页
|
||
OLED_ShowCN(16,4,13,0); //正常“样”,第4页
|
||
OLED_ShowCN(32,4,49,0); //正常“深”,第4页
|
||
OLED_ShowCN(48,4,17,0); //正常“度”,第4页
|
||
sprintf(str_print2, "%d",smp_dpth_temp[0] );
|
||
OLED_ShowString(72,4,str_print2,16,0);
|
||
|
||
OLED_ShowCN(80,6,36,0); //正常“确”,第6页
|
||
OLED_ShowCN(96,6,37,0); //正常“认”,第6页
|
||
OLED_ShowCN(0,6,38,0); //正常“取”,第6页
|
||
OLED_ShowCN(16,6,39,0); //正常“消”,第6页
|
||
|
||
}else
|
||
{
|
||
if(smp_intr_temp[0] != smp_intr_temp[1])
|
||
{
|
||
OLED_ShowString(80,2," ",16,0);
|
||
sprintf(str_print3, "%d",smp_intr_temp[0] );
|
||
OLED_ShowString(72,2,str_print3,16,1); //反显
|
||
smp_intr_temp[1] = smp_intr_temp[0];
|
||
}
|
||
|
||
}
|
||
|
||
if(oled_en == 1)
|
||
{
|
||
oled_en = 0;
|
||
magnet_flag = 0;
|
||
|
||
OLED_ShowString(80,2," ",16,0);
|
||
sprintf(str_print3, "%d",smp_intr_temp[0] );
|
||
OLED_ShowString(72,2,str_print3,16,0); //取消反显
|
||
|
||
oled_p = 10;
|
||
}
|
||
}
|
||
break;
|
||
case 10: //磁感应传感模块采样设置,设置采样深度
|
||
{
|
||
if(magnet_flag == 0)
|
||
{
|
||
magnet_flag = 1;
|
||
|
||
sprintf(str_print3, "%d",smp_dpth_temp[0] );
|
||
OLED_ShowString(72,4,str_print3,16,1);
|
||
}else
|
||
{
|
||
if(smp_dpth_temp[0] != smp_dpth_temp[1])
|
||
{
|
||
OLED_ShowString(80,4," ",16,0);
|
||
sprintf(str_print3, "%d",smp_dpth_temp[0] );
|
||
OLED_ShowString(72,4,str_print3,16,1); //反显
|
||
smp_dpth_temp[1] = smp_dpth_temp[0];
|
||
}
|
||
}
|
||
|
||
if(oled_en == 1)
|
||
{
|
||
oled_en = 0;
|
||
magnet_flag = 0;
|
||
|
||
OLED_ShowString(80,4," ",16,0);
|
||
sprintf(str_print3, "%d",smp_dpth_temp[0] );
|
||
OLED_ShowString(72,4,str_print3,16,0); //取消反显
|
||
|
||
oled_p = 11;
|
||
}
|
||
}
|
||
break;
|
||
case 11: //磁感应传感模块设置确认
|
||
{
|
||
if(magnet_flag == 0)
|
||
{
|
||
magnet_flag = 1;
|
||
|
||
oled_s_magnetok[0] = 0;
|
||
oled_s_magnetok[1] = 0;
|
||
|
||
OLED_ShowCN(0,6,38,1); //反显“取”,第6页
|
||
OLED_ShowCN(16,6,39,1); //反显“消”,第6页
|
||
|
||
}else
|
||
{
|
||
if(oled_s_magnetok[0] != oled_s_magnetok[1])
|
||
{
|
||
if(oled_s_magnetok[0] == 0)
|
||
{
|
||
OLED_ShowCN(80,6,36,0); //正常“确”,第6页
|
||
OLED_ShowCN(96,6,37,0); //正常“认”,第6页
|
||
OLED_ShowCN(0,6,38,1); //反显“取”,第6页
|
||
OLED_ShowCN(16,6,39,1); //反显“消”,第6页
|
||
}
|
||
if(oled_s_magnetok[0] == 1)
|
||
{
|
||
OLED_ShowCN(80,6,36,1); //反显“确”,第6页
|
||
OLED_ShowCN(96,6,37,1); //反显“认”,第6页
|
||
OLED_ShowCN(0,6,38,0); //正常“取”,第6页
|
||
OLED_ShowCN(16,6,39,0); //正常“消”,第6页
|
||
}
|
||
oled_s_magnetok[1] = oled_s_magnetok[0];
|
||
}
|
||
}
|
||
if(oled_en == 1)
|
||
{
|
||
if(oled_s_magnetok[0] == 0) //取消后初始化暂存数组
|
||
{
|
||
oled_en = 0;
|
||
magnet_flag = 0;
|
||
|
||
smp_intr_temp[0] = magnet_tx[3];
|
||
smp_intr_temp[1] = magnet_tx[3];
|
||
smp_dpth_temp[0] = magnet_tx[5];
|
||
smp_dpth_temp[1] = magnet_tx[5];
|
||
|
||
oled_p = 1;
|
||
}
|
||
if(oled_s_magnetok[0] == 1) //确认后将暂存数据写入magnet_tx
|
||
{
|
||
oled_en = 0;
|
||
magnet_flag = 0;
|
||
|
||
magnet_tx[3] = smp_intr_temp[0];
|
||
magnet_tx[5] = smp_dpth_temp[0];
|
||
|
||
HAL_GPIO_WritePin(RS485_EN1_GPIO_Port,RS485_EN1_Pin,GPIO_PIN_SET); //使能485发送,发送结束后在回调函数中拉低
|
||
|
||
HAL_UART_Transmit_IT(&huart2, magnet_tx ,7); //485发送
|
||
|
||
|
||
oled_p = 1;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 12:
|
||
{
|
||
if(magnet_flag == 0)
|
||
{
|
||
magnet_flag = 1;
|
||
OLED_Clear();
|
||
STMFLASH_Read(FLASH_SAVE_ADDR,flash_rd,6); //读取当前flash内容
|
||
for(char i = 0;i < 6;i++) flash_wrt[i] = flash_rd[i]; //初始化写入flash的内容
|
||
|
||
OLED_ShowCN(0,0,10,0); //正常“磁”,第0页
|
||
OLED_ShowCN(16,0,11,0); //正常“条”,第0页
|
||
if(magnet_select[0] == 0) OLED_ShowString(72,0,"#25 ",16,1);
|
||
if(magnet_select[0] == 1) OLED_ShowString(72,0,"#50 ",16,1);
|
||
if(magnet_select[0] == 2) OLED_ShowString(72,0,"#110",16,1);
|
||
|
||
OLED_ShowCN(0,2,53,0); //正常“当”,第2页
|
||
OLED_ShowCN(16,2,54,0); //正常“前”,第2页
|
||
OLED_ShowCN(32,2,41,0); //正常“中”,第2页
|
||
OLED_ShowCN(48,2,26,0); //正常“点”,第2页
|
||
if(magnet_select[0] == 0)
|
||
{
|
||
sprintf(str_print2, "%d",flash_rd[0] ); //#25的中点
|
||
OLED_ShowString(72,2,str_print2,16,0);
|
||
}
|
||
if(magnet_select[0] == 1)
|
||
{
|
||
sprintf(str_print2, "%d",flash_rd[1] ); //#50的中点
|
||
OLED_ShowString(72,2,str_print2,16,0);
|
||
}
|
||
if(magnet_select[0] == 2)
|
||
{
|
||
sprintf(str_print2, "%d",flash_rd[2] ); //#110的中点
|
||
OLED_ShowString(72,2,str_print2,16,0);
|
||
}
|
||
|
||
OLED_ShowCN(0,4,45,0); //正常“设”,第4页
|
||
OLED_ShowCN(16,4,46,0); //正常“置”,第4页
|
||
OLED_ShowCN(32,4,41,0); //正常“中”,第4页
|
||
OLED_ShowCN(48,4,26,0); //正常“点”,第4页
|
||
sprintf(str_print2, "%d",(uint16_t)X_ads1220 ); //当前位置
|
||
OLED_ShowString(72,4,str_print2,16,0);
|
||
|
||
OLED_ShowCN(80,6,36,0); //正常“确”,第6页
|
||
OLED_ShowCN(96,6,37,0); //正常“认”,第6页
|
||
OLED_ShowCN(0,6,38,0); //正常“取”,第6页
|
||
OLED_ShowCN(16,6,39,0); //正常“消”,第6页
|
||
}
|
||
else
|
||
{
|
||
if(magnet_select[0] != magnet_select[1])
|
||
{
|
||
if(magnet_select[0] == 0) OLED_ShowString(72,0,"#25 ",16,1);
|
||
if(magnet_select[0] == 1) OLED_ShowString(72,0,"#50 ",16,1);
|
||
if(magnet_select[0] == 2) OLED_ShowString(72,0,"#110",16,1);
|
||
|
||
magnet_select[1] = magnet_select[0];
|
||
}
|
||
|
||
if(oled_en == 1)
|
||
{
|
||
oled_en = 0;
|
||
magnet_flag = 0;
|
||
|
||
if(magnet_select[0] == 0)
|
||
{
|
||
OLED_ShowString(72,0,"#25 ",16,0); //确定后取消反显
|
||
sprintf(str_print2, "%d",flash_rd[0] ); //#25的中点
|
||
OLED_ShowString(72,2,str_print2,16,0);
|
||
}
|
||
if(magnet_select[0] == 1)
|
||
{
|
||
OLED_ShowString(72,0,"#50 ",16,0);
|
||
sprintf(str_print2, "%d",flash_rd[1] ); //#50的中点
|
||
OLED_ShowString(72,2,str_print2,16,0);
|
||
}
|
||
if(magnet_select[0] == 2)
|
||
{
|
||
OLED_ShowString(72,0,"#110 ",16,0);
|
||
sprintf(str_print2, "%d",flash_rd[2] ); //#50的中点
|
||
OLED_ShowString(72,2,str_print2,16,0);
|
||
}
|
||
|
||
oled_p = 13;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 13:
|
||
{
|
||
if(magnet_flag == 0)
|
||
{
|
||
magnet_flag = 1;
|
||
|
||
sprintf(str_print2, "%d",(uint16_t)Xads_temp2[0] ); //反显当前位置
|
||
OLED_ShowString(72,4,str_print2,16,1);
|
||
}
|
||
else
|
||
{
|
||
//位置
|
||
Xads_temp2[0] = X_ads1220;
|
||
if( (Xads_temp2[1] - Xads_temp2[0] > 1) || (Xads_temp2[0] - Xads_temp2[1] > 1))
|
||
{
|
||
sprintf(str_print2, "%d",(uint16_t)Xads_temp2[0] );
|
||
OLED_ShowString(72,4,str_print2,16,1);
|
||
Xads_temp2[1] = Xads_temp2[0];
|
||
}
|
||
|
||
if(magnet_motor_sw == 0) //电机停止
|
||
{
|
||
Motor_Run = 0;
|
||
motor_direc = 1;
|
||
Run_Mode = 0;
|
||
}
|
||
if(magnet_motor_sw == 1) //电机循环正向步进
|
||
{
|
||
Run_Step = 0;
|
||
Run_mm = 15;
|
||
motor_direc = 1;
|
||
Motor_Run = 1;
|
||
Run_Mode = 0;
|
||
}
|
||
if(magnet_motor_sw == 2) //电机循环反向步进
|
||
{
|
||
Run_Step = 0;
|
||
Run_mm = 15;
|
||
motor_direc = 2;
|
||
Motor_Run = 1;
|
||
Run_Mode = 0;
|
||
}
|
||
}
|
||
|
||
if(oled_en == 1) //确认当前位置后,取消反显
|
||
{
|
||
oled_en = 0;
|
||
magnet_flag = 0;
|
||
|
||
Run_mm = 1;
|
||
Motor_Run = 0;
|
||
Run_Mode = 0;
|
||
motor_direc = 1;
|
||
sprintf(str_print2, "%d",(uint16_t)Xads_temp2[0] );
|
||
OLED_ShowString(72,4,str_print2,16,0);
|
||
oled_p = 14;
|
||
|
||
}
|
||
|
||
}
|
||
break;
|
||
case 14:
|
||
{
|
||
if(magnet_flag == 0)
|
||
{
|
||
magnet_flag = 1;
|
||
|
||
if(magnet_s_ok[0] == 0 )
|
||
{
|
||
OLED_ShowCN(80,6,36,0); //正常“确”,第6页
|
||
OLED_ShowCN(96,6,37,0); //正常“认”,第6页
|
||
OLED_ShowCN(0,6,38,1); //反显“取”,第6页
|
||
OLED_ShowCN(16,6,39,1); //反显“消”,第6页
|
||
}
|
||
if(magnet_s_ok[0] == 1 )
|
||
{
|
||
OLED_ShowCN(80,6,36,1); //反显“确”,第6页
|
||
OLED_ShowCN(96,6,37,1); //反显“认”,第6页
|
||
OLED_ShowCN(0,6,38,0); //正常“取”,第6页
|
||
OLED_ShowCN(16,6,39,0); //正常“消”,第6页
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(magnet_s_ok[0] != magnet_s_ok[1] )
|
||
{
|
||
if(magnet_s_ok[0] == 0 )
|
||
{
|
||
OLED_ShowCN(80,6,36,0); //正常“确”,第6页
|
||
OLED_ShowCN(96,6,37,0); //正常“认”,第6页
|
||
OLED_ShowCN(0,6,38,1); //反显“取”,第6页
|
||
OLED_ShowCN(16,6,39,1); //反显“消”,第6页
|
||
}
|
||
if(magnet_s_ok[0] == 1 )
|
||
{
|
||
OLED_ShowCN(80,6,36,1); //反显“确”,第6页
|
||
OLED_ShowCN(96,6,37,1); //反显“认”,第6页
|
||
OLED_ShowCN(0,6,38,0); //正常“取”,第6页
|
||
OLED_ShowCN(16,6,39,0); //正常“消”,第6页
|
||
}
|
||
|
||
magnet_s_ok[1] = magnet_s_ok[0];
|
||
}
|
||
}
|
||
|
||
if((oled_en == 1) && (magnet_s_ok[0] == 1)) //确认后将“设置中点”处的值写入flash
|
||
{
|
||
oled_en = 0;
|
||
magnet_flag = 0;
|
||
|
||
if(magnet_select[0] == 0) flash_wrt[0] = (uint16_t)Xads_temp2[0]; //#25中点
|
||
if(magnet_select[0] == 1) flash_wrt[1] = (uint16_t)Xads_temp2[0]; //#50中点
|
||
if(magnet_select[0] == 2) flash_wrt[2] = (uint16_t)Xads_temp2[0]; //#110中点
|
||
|
||
STMFLASH_Write(FLASH_SAVE_ADDR,flash_wrt,6); //写入flash
|
||
|
||
magnet_middle = flash_rd[0]; //默认以#25的中点为标准
|
||
|
||
magnet_s_ok[0] = 0;
|
||
magnet_s_ok[1] = 0;
|
||
magnet_select[0] = 0;
|
||
magnet_select[1] = 0;
|
||
|
||
oled_p = 1;
|
||
}
|
||
if((oled_en == 1) && (magnet_s_ok[0] == 0))
|
||
{
|
||
oled_en = 0;
|
||
magnet_flag = 0;
|
||
|
||
magnet_s_ok[0] = 0;
|
||
magnet_s_ok[1] = 0;
|
||
magnet_select[0] = 0;
|
||
magnet_select[1] = 0;
|
||
|
||
oled_p = 1;
|
||
}
|
||
}
|
||
case 15:
|
||
{
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|