#include <iostm8s.h>
void delay(unsigned int time);
#define PD_ODR_ODR0 PD_ODR_bit.ODR0
#define PD_ODR_ODR1 PD_ODR_bit.ODR1
#define PD_ODR_ODR2 PD_ODR_bit.ODR2
#define PD_ODR_ODR3 PD_ODR_bit.ODR3
#define PD_ODR_ODR4 PD_ODR_bit.ODR4
#define PD_ODR_ODR5 PD_ODR_bit.ODR5
#define PD_ODR_ODR6 PD_ODR_bit.ODR6
#define PD_ODR_ODR7 PD_ODR_bit.ODR7
unsigned int AD_Value,AD_ValueH,AD_ValueL;
unsigned int Value,ADMIDLE;
void ADC_Init(void);
void GetAdcValue(void);
void CheckAdc1(void);
void GPIO_Init(void);
void eeprom_write(unsigned int addr, unsigned int dat);
unsigned int eeprom_read(unsigned int addr);
void eeprom_init(void);
int main(void)
{
AD_Value=0;
GPIO_Init();
ADC_Init();
eeprom_init();
//ADC_CSR = 0x05; //选择通道AIN5
//GetAdcValue();
eeprom_write(0x01,1023);//AD_Value);
Value=eeprom_read(0x01);//(unsigned long int)
while(1)
{
//eeprom_write(0x01,AD_Value);
ADC_CSR = 0x05; //选择通道AIN5
GetAdcValue();
if(AD_Value>200)
{
if(AD_Value<629)
{
if(480<AD_Value)
{
eeprom_write(0x01,AD_Value);
//CheckAdc();
}
else
{
if(AD_Value<Value)
{
eeprom_write(0x01,AD_Value);
//CheckAdc();
}
else
{
eeprom_write(0x01,Value);
AD_Value=Value;
//CheckAdc();
}
}
}
if(AD_Value>=629)
{
if(AD_Value>=1023)
{
eeprom_write(0x01,AD_Value);
//CheckAdc();
}
else
{
if(AD_Value<Value)
{
eeprom_write(0x01,AD_Value);
//CheckAdc();
}
else
{
eeprom_write(0x01,Value);
AD_Value=Value;
//CheckAdc();
}
}
}
Value=eeprom_read(0x01);
if(AD_Value < 629)
CheckAdc1();
else
CheckAdc2();
}
}
void delay(unsigned int time)
{
while(time--);
}
void GPIO_Init(void)
{
PD_DDR|=0xff; // 设置数据方向寄存器 1为输出,0为输入*/
PD_CR1|=0xff; //设置推挽输出 */
PD_CR2|=0x00; //设置输出频率 1为10M,0为2M--查看STM8寄存
PD_ODR=0XFF;
PC_DDR|=0xff; // 设置数据方向寄存器 1为输出,0为输入*/
PC_CR1|=0xff; //设置推挽输出 */
PC_CR2|=0x00; //设置输出频率 1为10M,0为2M--查看STM8寄存
PC_ODR=0XFF;
PB_DDR|=0xff; // 设置数据方向寄存器 1为输出,0为输入*/
PB_CR1|=0xff; //设置推挽输出 */
PB_CR2|=0x00; //设置输出频率 1为10M,0为2M--查看STM8寄存
PB_ODR=0XFF;
PA_DDR|=0xff; // 设置数据方向寄存器 1为输出,0为输入*/
PA_CR1|=0xff; //设置推挽输出 */
PA_CR2|=0x00; //设置输出频率 1为10M,0为2M--查看STM8寄存
PA_ODR=0XFF;
}
void eeprom_init(void)
{
FLASH_CR1=0x00;
FLASH_CR2=0x00;
FLASH_NCR2=0xFF;
FLASH_DUKR=0xae;
FLASH_DUKR=0x56;
while(!(FLASH_IAPSR&0x08));
}
void eeprom_write(unsigned int addr, unsigned int dat)
{
unsigned int *p;
p=(unsigned int *)(0x4000+addr);
*p=dat;
while(!(FLASH_IAPSR&0x04));
}
unsigned int eeprom_read(unsigned int addr)
{
unsigned int *p;
p=(unsigned int *)(0x4000+addr);
return *p;
}
void ADC_Init(void)
{
ADC_CR1 =0x70;
ADC_CR2 =0x00; //AD结果数据左对齐
ADC_TDRL=0x20;
}
void GetAdcValue(void)
{ char i;
//ADC_CSR = 0x05; //选择通道AIN5
ADC_CR1 |=0x01; //使能ADC
i = 12; //等待7us以上的时间确保ADC上电完成
while(i--);
ADC_CR1 |=0x01; //再次置位ADON来启动ADC转换
while(!(ADC_CSR & 0x80)); //等待转换完成
AD_ValueH=ADC_DRH; //读取转换的高八位数据
ADMIDLE=AD_ValueH<<2;
AD_Value=(AD_ValueH<<2)+AD_ValueL; //读取转换的高八位数据
ADC_CSR &=0x7F; //第8位EOC置0,本次转换结束
}
void CheckAdc1(void)
{
if(AD_Value <404) //Fix_ADC_Value
{
PA_ODR=0XFD;
delay(40000);
PD_ODR=0XFF;
PC_ODR=0XFF;
PB_ODR=0XFF;
PA_ODR=0XFF;
delay(40000);
}
else if(AD_Value>=404&AD_Value<412)
{
PA_ODR=0XFB; //AIN3/4/5/6
delay(40000);
PD_ODR=0XFF;
PC_ODR=0XFF;
PB_ODR=0XFF;
PA_ODR=0XFF;
delay(40000);
}
else if(AD_Value>=412&AD_Value<420)
{
PA_ODR=0XF7;
delay(40000);
PD_ODR=0XFF;
PC_ODR=0XFF;
PB_ODR=0XFF;
PA_ODR=0XFF;
delay(40000);
}
else if(AD_Value>=420&AD_Value<428)
{
PB_ODR=0XDF;
delay(40000);
PD_ODR=0XFF;
PC_ODR=0XFF;
PB_ODR=0XFF;
PA_ODR=0XFF;
delay(40000);
}
else if(AD_Value>=428&AD_Value<436)
{
PB_ODR=0XEF;
delay(40000);
PD_ODR=0XFF;
PC_ODR=0XFF;
PB_ODR=0XFF;
PA_ODR=0XFF;
delay(40000);
}
else if(AD_Value>=436&AD_Value<444)
{
PC_ODR=0XF7;
delay(40000);
PD_ODR=0XFF;
PC_ODR=0XFF;
PB_ODR=0XFF;
PA_ODR=0XFF;
delay(40000);
}
else if(AD_Value>=444&AD_Value<452)
{
PC_ODR=0XEF;
delay(40000);
PD_ODR=0XFF;
PC_ODR=0XFF;
PB_ODR=0XFF;
PA_ODR=0XFF;
delay(40000);
}
else if(AD_Value>=452&AD_Value<460)
{
PC_ODR=0XDF;
delay(40000);
PD_ODR=0XFF;
PC_ODR=0XFF;
PB_ODR=0XFF;
PA_ODR=0XFF;
delay(40000);
}
else if(AD_Value>=460&AD_Value<480)
{
PC_ODR=0XBF;
delay(40000);
PD_ODR=0XFF;
PC_ODR=0XFF;
PB_ODR=0XFF;
PA_ODR=0XFF;
delay(40000);
}
else
{
PC_ODR=0X7F;
delay(40000);
PD_ODR=0XFF;
PC_ODR=0XFF;
PB_ODR=0XFF;
PA_ODR=0XFF;
delay(40000);
}
}