【LV12 DAY20 RTC实验】

编程实现通过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;

}
相关推荐
强子感冒了12 小时前
Cherry Studio是如何联网的?一次详细的HTTP抓包分析与实现原理探究
笔记
咋吃都不胖lyh12 小时前
linux环境在vscode链接到一个git仓库,克隆和拉取详细命令行
linux·git·vscode
小小小米粒14 小时前
NAT 模式, 仅主机模式 Host-Only ,桥接模式 Bridge
linux·服务器·网络
挨踢学霸18 小时前
技术全面重构|MsgHelper 新版深度拆解:交互、视觉与逻辑的底层优化(二)
经验分享·笔记·微信·架构·自动化
沙漏无语18 小时前
(二)TIDB搭建正式集群
linux·数据库·tidb
思麟呀18 小时前
计算机网络初步认识
linux·计算机网络
浩子智控18 小时前
zynq嵌入式开发(2)—基本开发测试实例
linux·嵌入式硬件·硬件架构
闻道且行之18 小时前
Nginx 安装、做成服务及 HTTPS 配置全流程
linux·运维·nginx·https
昵称只能一个月修改一次。。。18 小时前
Linux系统编程:网络编程
linux·服务器·网络
猫猫的小茶馆18 小时前
【Linux 驱动开发】Linux 内核启动过程详解
linux·c语言·arm开发·驱动开发·stm32·单片机·mcu