#include "FMD.H"
#include "FT60F01X.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define W_addr 0x46 //写操作指令
#define R_addr 0x47 //读操作指令
#define nop() {NOP();NOP();NOP();NOP();NOP();}
#define SDA RA2 //IIC数据引脚
#define SCL RA0 //IIC时钟引脚
#define INT RA1 //input mode
#define LED RA5
volatile bit b_2ms_t;
volatile uint r_4st_off;
volatile uint r_4st_on;
void Timer0_init(void);
void System_init(void);
void IIC_Iint(void);
void I2C_Start(void);
void I2C_Stop(void);
void I2C_Ack(void);
void I2C_NoAck(void);
void I2C_SendByte(uchar bye);
uchar I2C_RecByte(void);
void I2C_WriteData(uchar W_Addr,uchar W_Data);
uchar I2C_RadeData(uchar R_Addr);
void INT_LED(void);
void main(void)
{
System_init();
Timer0_init();
IIC_Iint();
I2C_WriteData(0x81,0x03); //设置寄存器0x81 开启PS
nop();nop();nop();nop();nop();
I2C_WriteData(0x82,0x7c);
nop();nop();nop();nop();nop();
I2C_WriteData(0x83,0x0f);
nop();nop();nop();nop();nop();
I2C_WriteData(0x84,0x02);
nop();nop();nop();nop();nop();
I2C_WriteData(0x90,0x28);
nop();nop();nop();nop();nop();
I2C_WriteData(0x91,0x00);
nop();nop();nop();nop();nop();
I2C_WriteData(0x92,0x00);
nop();nop();nop();nop();nop();
I2C_WriteData(0x93,0x00);
nop();nop();nop();nop();nop();
I2C_WriteData(0x95,0x00);
nop();nop();nop();nop();nop();
I2C_WriteData(0x94,0x00);
nop();nop();nop();nop();nop();
I2C_WriteData(0x8F,0x01); //设置寄存器0x8F 设置中断
nop();nop();nop();nop();nop();
I2C_WriteData(0x9E,0x70); //设置寄存器0x9E 设置中断
nop();nop();nop();nop();nop();
while(1)
{
if(b_2ms_t) //2ms
{
b_2ms_t = 0;
INT_LED();
}
}
}
void System_init(void)
{
OSCCON = 0x51; //4M/2(2T周期指令)=0.5us
TRISA = 0x02; //0:output mode 1:input mode
PORTA = 0x00;
WPUA = 0x00;
}
void Timer0_init(void)
{
OPTION = 0x02; //FOSC/4/8=8US
TMR0 = 0x06;
INTCON = 0xe0;
}
void interrupt ISR(void)
{
if(T0IF)
{
T0IF = 0;
TMR0 = 0x06; //250*8=2ms
b_2ms_t = 1;
}
}
void IIC_Iint(void) //IIC初始化
{
SDA = 1;
nop();
SCL = 1;
nop();
}
void I2C_Start(void) //IIC开始信号
{
SDA = 1;
nop();
SCL = 1;
nop();
SDA = 0;
nop();
SCL = 0;
nop();
}
void I2C_Stop(void) //IIC停止信号
{
SDA = 0;
nop();
SCL = 1;
nop();
SDA = 1;
nop();
}
void I2C_Ack(void) //IIC应答信号
{
SDA = 0;
nop();
SCL = 1;
nop();
SCL = 0;
nop();
}
void I2C_NoAck(void) //IIC非应答信号
{
SDA = 1;
nop();
SCL = 1;
nop();
SCL = 0;
nop();
}
void I2C_SendByte(uchar bye) //发送一个字节
{
uchar i;
for(i = 0;i < 8;i++)
{
if(bye & 0x80)
{SDA = 1;}
else
{SDA = 0;}
nop();
SCL = 1;
nop();
SCL = 0;
nop();
bye <<= 1;
}
}
uchar I2C_RecByte(void) //读一个字节
{
uchar i;
uchar data;
TRISA |= 0x04; //读数据,设置输入模式
for(i = 0;i < 8;i++)
{
SCL = 0;
nop();
SCL = 1;
nop();
if(SDA)
{data |= (0x80 >> i);}
}
SCL = 0;
TRISA &= 0xFB; //读完后切换成输出模式
return data;
}
void I2C_WriteData(uchar W_Addr,uchar W_Data) //发送数据
{
I2C_Start(); //启动信号
I2C_SendByte(W_addr); //写操作
I2C_Ack(); //应答信号
I2C_SendByte(W_Addr); //写地址
I2C_Ack();
I2C_SendByte(W_Data); //写数据
I2C_Ack();
I2C_Stop(); //停止信号
}
uchar I2C_RadeData(uchar R_Addr) //读数据
{
uchar data;
I2C_Start();
I2C_SendByte(W_addr); //写操作
I2C_Ack();
I2C_SendByte(R_Addr); //读地址
I2C_Ack();
I2C_Start();
I2C_SendByte(R_addr); //读操作
I2C_Ack();
data = I2C_RecByte();
I2C_NoAck(); //非应答
I2C_Stop();
return data;
}
void INT_LED(void)
{
if(!INT)
{
r_4st_on = 0;
r_4st_off++;
if(r_4st_off >= 2100)
{r_4st_off = 2099;}
if(r_4st_off == 2000) //防止误动作,延时4s灭灯
{LED = 0;}
}
else
{
r_4st_off = 0;
r_4st_on++;
if(r_4st_on >= 510)
{r_4st_on = 509;}
if(r_4st_on == 500)
{LED = 1;}
}
}
GuangGan_LTR_559ALS_辉芒微编程_辉芒微_559ALS_辉芒_源码
版权申诉
5星 · 超过95%的资源 132 浏览量
2021-10-04
02:07:48
上传
评论
收藏 1KB ZIP 举报
鹰忍
- 粉丝: 65
- 资源: 4707
最新资源
- 冯璐阳 42105650—祝福.docx
- 基于多种算法及改进算法实现的移动机器人路径规划matlab源码(含A星算法+PRM+RRT的改进等).zip
- 布里斯托尔纸细分市场、总体规模、先进性、市占率行业分析报告2024年.docx
- Obi绳子插件,好用的很 6.5.4版本
- openjfx-22.0.1-windows-x64-bin-sdk.zip
- 基于ros和stm32f1的小车代码(含串口通信)+项目说明.zip
- 人体姿态估计-基于Tensorflow实现的人体姿态估计算法-附项目源码-优质项目分享.zip
- java实现所有算法大全
- JDBC DAO模式 (复习)
- Proteus仿真AT89C51电子密码锁
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论3