编程实现通过LED状态显示当前电压范围,并打印产生低压警报时的时间
注:
电压在1501mv~1800mv时,LED2、LED3、LED4、LED5点亮
电压在1001mv~1500mv时,LED2、LED3、LED4点亮
电压在501mv~1000mv时,LED2、LED3点亮
电压在0mv~500mv时,LED2闪烁,且每隔一秒钟向终端打印一次当前的电压值及当前的时间
c
#include "exynos_4412.h"
void delay(unsigned int time)
{
while(time--);
}
int main()
{
unsigned int adcvalue;
//将adc的转换精度设置为12位
ADCCON=ADCCON | (1<<16);
//使能adc分频器
ADCCON=ADCCON | (1<<14);
//设置adc分频值,adc的时钟频率100/(19+1)=5MHZ,转换频率是5MHZ/5=1MHZ;
ADCCON=ADCCON & (~(0xff<<6)) | (19<<6);
//关闭待机模式,使能正常模式
ADCCON=ADCCON & (~(1<<2));
//关闭通过读使能ad转换
ADCCON=ADCCON & (~(1<<1));
//选择转换通道3
ADCMUX=3;
//LED2控制引脚设置输出模式
GPX2.CON=GPX2.CON & (~(0XF<<28)) | (1<<28);
//LED3控制引脚设置输出模式
GPX1.CON=GPX1.CON & (~(0XF)) | (1);
//LED4控制引脚设置输出模式
GPF3.CON=GPF3.CON & (~(0XF<<16)) | (1<<16);
//LED5控制引脚设置输出模式
GPF3.CON=GPF3.CON & (~(0XF<<20)) | (1<<20);
unsigned int oldsec=0,newsec=0;
//使能RTC控制
RTCCON=RTCCON | (1);
//校准时间信息
RTC.BCDYEAR=0X023;//0000 0010 0011 ---BCD 023 ---十进制35 和十六进制的二进制是一样的
RTC.BCDMON=0X12;
RTC.BCDDAY=0X7;//因为三星开发板中week和day的地址写反了,所以要交换一下顺序
RTC.BCDWEEK=0X31;
RTC.BCDHOUR=0X23;
RTC.BCDMIN=0X59;
RTC.BCDSEC=0X50;
RTCCON=RTCCON & (~(1));
while(1)
{
//开始转换
ADCCON=ADCCON | 1;
//等待转换完成
while(!(ADCCON & (1<<15)));
//读取转换结果
adcvalue=ADCDAT & (0XFFF);
//将结果转换成实际的电压值//mv 1800/4096
adcvalue=adcvalue * 0.44;
if(adcvalue<501)
{
//LED2闪烁//
GPX2.DAT=GPX2.DAT | (1<<7);
delay(1000000);
GPX2.DAT=GPX2.DAT & (~(1<<7));
delay(1000000);
//其他LED关闭
GPX1.DAT=GPX1.DAT & (~1);
GPF3.DAT=GPF3.DAT & (~(1<<4));
GPF3.DAT=GPF3.DAT & (~(1<<5));
newsec=RTC.BCDSEC;
if(oldsec!=newsec)
{
printf("20%x-%x-%x %x %x:%x:%x,adcvalue= %d mv\n",RTC.BCDYEAR,RTC.BCDMON,RTC.BCDWEEK,
RTC.BCDDAY,RTC.BCDHOUR,RTC.BCDMIN,RTC.BCDSEC,adcvalue);
oldsec=newsec;
}
}else if(adcvalue>500&&adcvalue<1001)
{
GPX2.DAT=GPX2.DAT | (1<<7);
GPX1.DAT=GPX1.DAT | 1;
//关闭LED4,LED5
GPF3.DAT=GPF3.DAT & (~(1<<4));
GPF3.DAT=GPF3.DAT & (~(1<<5));
}else if(adcvalue>1000&&adcvalue<1501)
{
GPX2.DAT=GPX2.DAT | (1<<7);
GPX1.DAT=GPX1.DAT | 1;
GPF3.DAT=GPF3.DAT | (1<<4);
//关闭LED5
GPF3.DAT=GPF3.DAT & (~(1<<5));
}else
{
GPX2.DAT=GPX2.DAT | (1<<7);
GPX1.DAT=GPX1.DAT | 1;
GPF3.DAT=GPF3.DAT | (1<<4);
GPF3.DAT=GPF3.DAT | (1<<5);
}
}
return 0;
}