IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 智能照明控制器(基于24c02和光敏电阻的使用) -> 正文阅读

[嵌入式]智能照明控制器(基于24c02和光敏电阻的使用)

需要用到的函数和变量来实现相应的功能:

数码管显示一般只直接显示数据,所以先要将数据给处理好

调用相关的函数将光敏电阻传感器产生的值放入到一个变量中

进行数据的分析函数:根据光照强度点亮相关的led灯,等级

打开24c02

定义按键函数: 按键1 实时显示数码管的值,然后将光敏电阻产生的数据放入到24c02的存储器中

按键2 显示 24c02中的数据

主函数while中 一直判断一直显示

存储变化的数值要用全局变量

实现具体步骤:

定义4个变量,用来存放实时的光敏电阻的值和将数据保存到24c02中的数据

调用数码管显示函数

先显示实时光敏电阻的值:

调用iic协议:

iic初始化,写入器件地址(0x90),等待应答,写入芯片对应的外设的地址光敏电阻(0x01),等待应答,iic结束 数码管显示相关的值 iic初始化 ,写入器件地址(0x91),等待应答,创建变量接收数值,发送终止iic信号(1),iic结束

led处理函数:需要将光敏电阻的显示调用到,根据光敏电阻的值来进行等级的划分

调用24c02:

写入函数 :需要填入地址,和数据

将地址和数据写入到24c02中:iic初始化,写入设备地址地址(0xa0),等待应答,写入需要存储的地址(addr),等待应答,写入数据(date),等待应答,终止iic

读取函数: 需要填入地址

????????为写操作:iic初始化,等待应答,写入设备地址(0xa0),等待应答,写入要读取数据的地址(addr),等待应答,iic初始化,写入设备地址(0xa1),等待应答,创建变量接收数据,发送终止信号(1),停止iic,返回变量

按键处理函数:按键1按下,将数据写入到相关的地址中,等待按键松开显示实时数据

? ? ? ? 按键2按下,利用创建的变量接收读取的数据,数码管显示数据(不是实时显示数据)

注意的是:数码管需要定义两个用来显示实时数据和存储在24c02中的数据

调用24c02函数时,是将数据写入到地址中,写两个数据中间不需要用到延时函数

#include <STC15F2K60S2.H>
#include"iic.h"
unsigned char dat_1;
unsigned char level;
unsigned char dat_2=0;
unsigned char level_1=0;
sbit S5=P3^2;
sbit S4=P3^3;
code SMG_NoDot[18] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
     0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
     0xbf,0x7f};
void delay(unsigned int i);
void select138(unsigned char n)
{
	switch(n)
	{
		case 4: P2=(P2&0x1f)|0x80;
		break;
		case 5: P2=(P2&0x1f)|0xa0;
		break;
		case 6: P2=(P2&0x1f)|0xc0;
		break;
		case 7: P2=(P2&0x1f)|0xe0;
		break;
	}
}

void smg_bite(unsigned char date, unsigned char pos)
{
	select138(6);
	P0=0x01<<pos;
	select138(7);
	P0=date;
}

void  shoutdown(unsigned char date)
{
	select138(6);
	P0=0xff;
	P0=date;

}
void smg_show()
{
	smg_bite(SMG_NoDot[16],0);
	delay(500);
	smg_bite(SMG_NoDot[level],1);
	delay(500);
	smg_bite(SMG_NoDot[16],2);
	delay(500);
	smg_bite(0xff,3);
	delay(500);
	smg_bite(0xff,4);
	delay(500);
	smg_bite(SMG_NoDot[(dat_1/100)%10],5);
	delay(500);
	smg_bite(SMG_NoDot[(dat_1%100)/10],6);
	delay(500);
	smg_bite(SMG_NoDot[dat_1%10],7);
	delay(500);
	shoutdown(0xff);
	delay(500);
}
void smg_show_1()
{
	smg_bite(SMG_NoDot[16],0);
	delay(500);
	smg_bite(SMG_NoDot[level_1],1);
	delay(500);
	smg_bite(SMG_NoDot[16],2);
	delay(500);
	smg_bite(0xff,3);
	delay(500);
	smg_bite(0xff,4);
	delay(500);
	smg_bite(SMG_NoDot[(dat_2/100)%10],5);
	delay(500);
	smg_bite(SMG_NoDot[(dat_2%100)/10],6);
	delay(500);
	smg_bite(SMG_NoDot[dat_2%10],7);
	delay(500);
	shoutdown(0xff);
	delay(500);
}

void delay(unsigned int i)
{
	while(i--);
}

void RD1()
{
	IIC_Start(); 
	IIC_SendByte(0x90); 
	IIC_WaitAck(); 
	IIC_SendByte(0x01);
	IIC_WaitAck();
	IIC_Stop(); 
	
	smg_show();
	
	IIC_Start(); 
	IIC_SendByte(0x91); 
	IIC_WaitAck(); 
	dat_1=IIC_RecByte(); 
	IIC_SendAck(1); 
	IIC_Stop(); 
	
	smg_show();
}

void auto_show()
{		RD1();
		select138(4);
		if(dat_1>200)
					{
						level=1;
						P0=0xfe;
					}
					
					else if( dat_1>150 && dat_1<200)
					{
						level=2;
						P0=0xfc;
					}
					
					else if(dat_1>100&& dat_1<150)
					{
						level=3;
						P0=0xf0;
					}
					
					else if(dat_1>50&&dat_1<100)
					{
						level=4;
						P0=0xc0;
					}
					
					else 
					{
						level=5;
						P0=0x00;
					}
}



void _24c02(unsigned char date,unsigned char addr)
{
	IIC_Start(); 
	IIC_SendByte(0xa0); 
	IIC_WaitAck(); 
	IIC_SendByte(addr);
	IIC_WaitAck();
	IIC_SendByte(date);
	IIC_WaitAck();
	IIC_Stop(); 
	
}

unsigned char _24c02read(unsigned char addr)
{
	unsigned char date;
	IIC_Start(); 
	IIC_SendByte(0xa0); 
	IIC_WaitAck(); 
	IIC_SendByte(addr);
	IIC_WaitAck();
	
	IIC_Start(); 
	IIC_SendByte(0xa1); 
	IIC_WaitAck(); 
	date=IIC_RecByte(); 
	IIC_SendAck(1);
	IIC_Stop();
	return date;

}

void key()
{
					
	if(S4==0)
	{
		delay(500);
			if(S4==0)
			{
				_24c02(dat_1,0x06);
				
				_24c02(level,0x05);
				
				
			
				
				
				while(S4==0)
				{
					
					smg_show();
					
				}
			}
	}
	if(S5==0)
	{
		delay(500);
		if(S5==0)
		{
				level_1=_24c02read(0x05);
				
				dat_2 = _24c02read(0x06);
			
				
			while(S5==0)
			{
				smg_show_1();
			}
		
		}
	
	}

}



void  main()
{	
	while(1)
	{
	auto_show();
	smg_show();
	key();
	}
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 11:11:54  更:2022-02-04 11:12:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:29:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码