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

}
相关推荐
a59865243 分钟前
云手机怎么选?ARM服务器原生架构和X86模拟器差别很大
服务器·arm开发·智能手机
readhere9 小时前
从ZYNQ7000开发板,学会启动嵌入式Linux系统——入门学习:EBAZ4205篇目录
linux·启动·嵌入式linux·zynq7000·ebaz4205
打工仔折腾 AI10 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
‎ദ്ദിᵔ.˛.ᵔ₎11 小时前
关于Linux 线程局部存储的认识
linux·运维
小小de风呀13 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
李某学编程13 小时前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习
sbjdhjd14 小时前
AI产业周度动态:从“更强模型”走向“可执行、可治理、可计价”的系统竞争 (2026年10月19日—10月25日)
人工智能·笔记·ai·开源·gemini·信息差·claude code
晚风吹北巷14 小时前
Linux复习篇(自用)
linux·运维·服务器·1024程序员节
ss27315 小时前
AI时代首先数据库-PostgreSQL实战笔记 27 PostgreSQL数据写入与读取流程解析
数据库·笔记·postgresql