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

2022/2/1 20:10:47

本文主要是介绍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();
		}
	}
}



这篇关于iic总线的应用程序(电位器和光敏电阻)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程