ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

iic总线的应用程序(电位器和光敏电阻)

2022-02-01 18:35:05  阅读:183  来源: 互联网

标签:P2 光敏电阻 写入 unsigned break 地址 iic 电位器


调用数码管显示的函数

调用iic协议来读取ad转换芯片的数值

初始化:模拟iic的时序开始

写入地址:写入ad转化芯片的地址,告诉它单片机要与它进行通信(0x90写入设备地址),(0x91读取设备地址)

等待应答:

写入地址: 写连接ad转换芯片的地址

等待应答:

终止iic协议:

数码管显示()

初始化 iic

写入地址:这次是写入读的地址 0x91 设备要读取它的信息

等待应答:

创建变量接收读取的数据

终止应答: 写入1位停止应答

终止iic协议:

数码管显示:

按键处理函数: 设置状态值的变化 ,期间按键按下的时候要显示数码管

主函数while中进行按键扫描,然后对状态值进行判断,然后调用相关的显示函数

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

}
void smgshowall()
{ 	
	select138(6);
	P0=0xff;
	select138(7);
	P0=0xff;

}

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

void  showdate(unsigned char channel, unsigned char date)
{
	smgshow_bite(SMG_NoDot[16],0);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[channel],1);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[16],2);
	delay_smg(500);
	
	smgshow_bite(0xff,3);
	delay_smg(500);
	smgshow_bite(0xff,4);
	delay_smg(500);
	
	smgshow_bite(SMG_NoDot[(date/100)%10],5);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[(date/10)%10],6);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[date%10],7);
	delay_smg(500);
	smgshowall();
}

void  power()
{
	IIC_Start(); 
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(0x01);
	IIC_WaitAck();
	IIC_Stop();

	showdate(1, dat_1);
	
	IIC_Start(); 
	IIC_SendByte(0x91);
	IIC_WaitAck();
	dat_1=IIC_RecByte();
	
	IIC_SendAck(1);
	IIC_Stop();
	showdate(1, dat_1);
}

void  light()
{
	IIC_Start(); 
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(0x03);
	IIC_WaitAck();
	IIC_Stop();
    showdate(3, dat_2);
	
	IIC_Start(); 
	IIC_SendByte(0x91);
	IIC_WaitAck();
	dat_2=IIC_RecByte();
	IIC_SendAck(1);
	IIC_Stop();
	showdate(3, dat_2);
}

void key()
{
	if(S4==0)
	{
		delay_smg(100);
		if(S4==0)
		{
			if(stat==0)
			{
				stat=1;
				while(S4==0)
				{
					showdate(1, dat_1);
				}
			}
			else if(stat==1)
			{	stat=0;
				while(S4==0)
				{
					showdate(3, dat_2);
				}
			}
		}
		
	}

}

void main()
{
	while(1)
	{
		key();
		if(stat==0)
		{
		light();
		}
		else if(stat==1)
		{
			power();
		}
	}
}

标签:P2,光敏电阻,写入,unsigned,break,地址,iic,电位器
来源: https://blog.csdn.net/w396255075/article/details/122765231

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有