【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;

}
相关推荐
女神下凡24 分钟前
芯参谋(38):NAND_MCP_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
91刘仁德42 分钟前
HTTP协议详解:从URL到HTTP服务器的完整实战
服务器·网络·笔记·网络协议·http
羔羊++1 小时前
18_实验十七_其他命令与自定义启动变量
linux
柳鲲鹏3 小时前
老电脑X99安装WIN11 26H2总结、问题解决办法汇总
笔记
DYWorker0013 小时前
Linux驱动:RK3568 GMAC + YT8531C 千兆以太网全流程解剖
linux
lisanmengmeng5 小时前
NRPE 添加命令(一)
linux·运维·服务器
剑指offer.5 小时前
ARM裸机开发-SPI
arm开发·嵌入式硬件·嵌入式·arm
树下水月6 小时前
Typora破解
linux·服务器·前端
sunoo-2296 小时前
【ARM嵌入式学习笔记第十天】i.MX6ULL eLCDIF控制器驱动RGB LCD全解析(硬件原理+寄存器配置+裸机代码)
arm开发·笔记·学习
沫璃染墨6 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理