feat: 06-17 신규 작업본 반영 (개발사양서/기능검토/승인원/Source 등 추가)
.claude/ 제외(.gitignore 추가). 기존 초기커밋(5a96a69) 위에 신규·수정·이동분 커밋.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,383 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "Nano100Series.h"
|
||||
#include "adc.h"
|
||||
#include "gpio.h"
|
||||
#include "pwm.h"
|
||||
#include "timer.h"
|
||||
#include "uart.h"
|
||||
#include "sys.h"
|
||||
#include "clk.h"
|
||||
#include "EEPROM_Emulate.h"
|
||||
|
||||
|
||||
#include "My_define.h"
|
||||
|
||||
|
||||
|
||||
void Initial_Signal();
|
||||
void Disp_Segdata(uint8_t Sel, uint8_t digit4, uint8_t digit3, uint8_t digit2, uint8_t digit1);
|
||||
void Led_OnOff(uint8_t kind, uint8_t onoff);
|
||||
|
||||
|
||||
uint8_t Font_Data[18]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67,\
|
||||
0x80, 0x58, 0x79, 0x40, 0x00, 0x50, 0x77, 0x5E };
|
||||
// . , c , E , - , ' ' , r , A , d
|
||||
uint8_t seg_data[4][14];
|
||||
|
||||
|
||||
|
||||
#define A_DATA PA4
|
||||
#define A_CLK PA3
|
||||
#define A_STB PA2
|
||||
|
||||
|
||||
|
||||
void Initial_Signal()
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
A_CLK = 1;
|
||||
A_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0001B) -> 5grid 8seg
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(i==0)
|
||||
{
|
||||
A_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(i==6)
|
||||
{
|
||||
A_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
{
|
||||
A_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;
|
||||
}
|
||||
|
||||
|
||||
for(i=0; i<112; i++) //data
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
A_DATA = 0;
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(i==3 || i==7)
|
||||
{
|
||||
A_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
}
|
||||
|
||||
uint16_t one_sec = 0;
|
||||
extern uint8_t Tmperature_Error;
|
||||
|
||||
void Disp_Segdata(uint8_t Sel, uint8_t digit4, uint8_t digit3, uint8_t digit2, uint8_t digit1)
|
||||
{
|
||||
|
||||
seg_data[Sel][0] = Font_Data[digit4];
|
||||
seg_data[Sel][1] = Font_Data[digit4]>>3;
|
||||
|
||||
seg_data[Sel][2] = Font_Data[digit3];
|
||||
seg_data[Sel][3] = Font_Data[digit3]>>3;
|
||||
|
||||
seg_data[Sel][4] = Font_Data[digit2];
|
||||
seg_data[Sel][5] = Font_Data[digit2]>>3;
|
||||
|
||||
seg_data[Sel][6] = Font_Data[digit1];
|
||||
seg_data[Sel][7] = Font_Data[digit1]>>3;
|
||||
|
||||
}
|
||||
|
||||
enum{
|
||||
K_VENT,
|
||||
K_AUTO,
|
||||
K_AIR,
|
||||
K_WIND1,
|
||||
K_WIND2,
|
||||
K_WIND3,
|
||||
K_WIND4,
|
||||
K_WIND5,
|
||||
K_PM25_1,
|
||||
K_PM25_2,
|
||||
K_PM25_4,
|
||||
K_PM25_3,
|
||||
|
||||
K_PM10_1,
|
||||
K_PM10_2,
|
||||
K_PM10_4,
|
||||
K_PM10_3,
|
||||
|
||||
K_TIME_1,
|
||||
K_TIME_4,
|
||||
K_TIME_8,
|
||||
K_LOCK,
|
||||
|
||||
K_JUMKEOM,
|
||||
K_FILTER_CLEAN,
|
||||
K_FILTER_CHANGE,
|
||||
K_EXTRA1,
|
||||
|
||||
K_CO2_1,
|
||||
K_CO2_2,
|
||||
K_CO2_4,
|
||||
K_CO2_3,
|
||||
|
||||
K_SOJA_CLEAN,
|
||||
K_SOJA_CHANGE,
|
||||
K_IOT,
|
||||
K_EXTRA2,
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
void Led_OnOff(uint8_t kind, uint8_t onoff)
|
||||
{
|
||||
if(onoff == 1)
|
||||
{
|
||||
if(kind < 6)
|
||||
{
|
||||
seg_data[3][0] |= 0x01<<kind;
|
||||
}
|
||||
else if(kind < 8)
|
||||
{
|
||||
seg_data[3][1] |= 0x01<<(kind-3);
|
||||
}
|
||||
else if(kind < 14)
|
||||
{
|
||||
seg_data[3][2] |= 0x01<<(kind-8);
|
||||
}
|
||||
else if(kind < 16)
|
||||
{
|
||||
seg_data[3][3] |=0x01<<(kind-8-3);
|
||||
}
|
||||
else if(kind < 22)
|
||||
{
|
||||
seg_data[3][4] |= 0x01<<(kind-16);
|
||||
}
|
||||
else if(kind < 24)
|
||||
{
|
||||
seg_data[3][5] |=0x01<<(kind-16-3);
|
||||
}
|
||||
else if(kind < 30)
|
||||
{
|
||||
seg_data[3][6] |= 0x01<<(kind-24);
|
||||
}
|
||||
else if(kind < 32)
|
||||
{
|
||||
seg_data[3][7] |=0x01<<(kind-24-3);
|
||||
}
|
||||
else // all on
|
||||
{
|
||||
seg_data[3][0] = 0xFF;
|
||||
seg_data[3][1] = 0xFF;
|
||||
seg_data[3][2] = 0xFF;
|
||||
seg_data[3][3] = 0xFF;
|
||||
seg_data[3][4] = 0xFF;
|
||||
seg_data[3][5] = 0xFF;
|
||||
seg_data[3][6] = 0xFF;
|
||||
seg_data[3][7] = 0xFF;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(kind < 6)
|
||||
{
|
||||
seg_data[3][0] &= ~(0x01<<kind);
|
||||
}
|
||||
else if(kind < 8)
|
||||
{
|
||||
seg_data[3][1] &= ~(0x01<<(kind-3));
|
||||
}
|
||||
else if(kind < 14)
|
||||
{
|
||||
seg_data[3][2] &= ~(0x01<<(kind-8));
|
||||
}
|
||||
else if(kind < 16)
|
||||
{
|
||||
seg_data[3][3] &= ~(0x01<<(kind-8-3));
|
||||
}
|
||||
else if(kind < 22)
|
||||
{
|
||||
seg_data[3][4] &= ~(0x01<<kind-16);
|
||||
}
|
||||
else if(kind < 24)
|
||||
{
|
||||
seg_data[3][5] &= ~(0x01<<(kind-16-3));
|
||||
}
|
||||
else if(kind < 30)
|
||||
{
|
||||
seg_data[3][6] &= ~(0x01<<kind-24);
|
||||
}
|
||||
else if(kind < 32)
|
||||
{
|
||||
seg_data[3][7] &= ~(0x01<<(kind-24-3));
|
||||
}
|
||||
else // all off
|
||||
{
|
||||
seg_data[3][0] = 0;
|
||||
seg_data[3][1] = 0;
|
||||
seg_data[3][2] = 0;
|
||||
seg_data[3][3] = 0;
|
||||
seg_data[3][4] = 0;
|
||||
seg_data[3][5] = 0;
|
||||
seg_data[3][6] = 0;
|
||||
seg_data[3][7] = 0;
|
||||
} }
|
||||
}
|
||||
|
||||
void Make_A(void)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint8_t Mask;
|
||||
|
||||
A_STB = 1;
|
||||
A_CLK = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0011B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if( i==0) //5grid, 8segment
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(i==6) //command2:01
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
|
||||
for(i=0; i<14; i++)
|
||||
{
|
||||
Mask = 0x01;
|
||||
for(j=0; j<8; j++)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(seg_data[0][i] & Mask)A_DATA = 1;
|
||||
else A_DATA = 0;
|
||||
A_CLK = 1;
|
||||
Mask <<= 1;
|
||||
}
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
|
||||
if(i==0 ||i==1 ||i==2 ||i==3 || i==7) //pulse width=14/16
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
}
|
||||
|
||||
|
||||
uint8_t Power_On = 0;
|
||||
|
||||
void Display_update(void)
|
||||
{
|
||||
uint8_t Digit_1000 = 0,Digit_100 = 0,Digit_10 = 0,Digit_1 = 0;
|
||||
|
||||
if(Power_On == 0)
|
||||
{
|
||||
Disp_Segdata(0, 14, 14, 14, 14);
|
||||
}
|
||||
else
|
||||
{
|
||||
Digit_1000 = SEN66_CO2_value%10000/1000;
|
||||
if(Digit_1000 == 0) Digit_1000 = 14; // blank
|
||||
|
||||
Digit_100 = SEN66_CO2_value%1000/100;
|
||||
if((Digit_1000 == 0)&&(Digit_100 == 0)) Digit_100 = 14; // blank
|
||||
|
||||
Disp_Segdata(0, Digit_1000, Digit_100, SEN66_CO2_value%100/10, SEN66_CO2_value%10);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Display_process(void)
|
||||
{
|
||||
Make_A();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user