⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x76f100.c

📁 《MSP430单片机常用模块与综合系统实例精讲》整书的源代码有30个
💻 C
字号:
#include <msp430xw42x.h>
#include "I2C.h"
#include "X76F100.h"

#define CS    BIT0
#define RST   BIT7
char pResetBuf[4];

//设备码 100
void writeX76F100(int addr,char pWritePassBuf[],char pBuf[])
{
    char command;
    char temp;
    int i;
    int flag = 0;
    //命令字节组成
    command = 0x80;
    temp = (char)(addr & 0x0f);
    command |= (temp << 1);
    
    //启动总线
    I2C_START();
    // 发送控制命令
    I2C_TxHToL(command);
    // 等待 ACK
    I2C_GetACK();	
    //发送密码
    for(i = 0;i < 8;i++)
    {
        //从最高位密码开始发送
        I2C_TxHToL(pWritePassBuf[7 - i]);
        // 等待 ACK
        I2C_GetACK();
    }
    
    //尝试5次
    for(i = 0;i < 5;i++)
    {
        //启动总线
        I2C_START();
        // 发送密码ACK命令
        I2C_TxHToL(0x55);
        // 等待 ACK
        temp = I2C_GetACK();
        if(temp == 0) 
        {
             flag = 1;
             break;
        }
    }
    
    //失败
    if(flag == 0) return;
    
    //写入数据
    for(i = 0;i < 8;i++)
    {
        // 发送数据
        I2C_TxHToL(pBuf[i]);
        // 等待 ACK
        I2C_GetACK();
    }
    // 停止总线
    I2C_STOP();		
}
void readX76F100(int addr,char pReadPassBuf[],char pBuf[])
{
    char command;
    char temp;
    int i;
    int flag;
    //命令字节组成
    command = 0x80;
    temp = (char)(addr & 0x0f);
    command |= (temp << 1);
    //读控制位
    command |= 1;
    
    //启动总线
    I2C_START();
    // 发送控制命令
    I2C_TxHToL(command);
    // 等待 ACK
    I2C_GetACK();	
    //发送密码
    for(i = 0;i < 8;i++)
    {
        //从最高位密码开始发送
        I2C_TxHToL(pReadPassBuf[7 - i]);
        // 等待 ACK
        I2C_GetACK();
    }
    
    //尝试5次
    for(i = 0;i < 5;i++)
    {
        //启动总线
        I2C_START();
        // 发送密码ACK命令
        I2C_TxHToL(0x55);
        // 等待 ACK
        temp = I2C_GetACK();
        if(temp == 0) 
        {
             flag = 1;
             break;
        }
    }
    
    //失败
    if(flag == 0) return;
    
    //读入数据
    for(i = 0;i < 8;i++)
    {
        // 读取数据
        pBuf[i] = I2C_RxHToL();
        // 设置 ACK
        I2C_SetACK();
    }
    // 停止总线
    I2C_STOP();	
}
void setReadPass(char pReadPassBuf[],char pBuf[])
{
    int i;
    int flag;
    char temp;
    
    //启动总线
    I2C_START();
    // 发送控制命令
    I2C_TxHToL(0xfc);
    // 等待 ACK
    I2C_GetACK();	
    //发送密码
    for(i = 0;i < 8;i++)
    {
        //从最高位密码开始发送
        I2C_TxHToL(pReadPassBuf[7 - i]);
        // 等待 ACK
        I2C_GetACK();
    }
    
    //尝试5次
    for(i = 0;i < 5;i++)
    {
        //启动总线
        I2C_START();
        // 发送密码ACK命令
        I2C_TxHToL(0x55);
        // 等待 ACK
        temp = I2C_GetACK();
        if(temp == 0) 
        {
             flag = 1;
             break;
        }
    }
    
    //失败
    if(flag == 0) return;
    
    //读入数据
    for(i = 0;i < 8;i++)
    {
        // 读取数据
        pBuf[i] = I2C_RxHToL();
        // 设置 ACK
        I2C_SetACK();
    }
    // 停止总线
    I2C_STOP();	
    
    //保存新密码
    for(i = 0;i < 8;i++)
    {
        pReadPassBuf[i] = pBuf[i];
    }
}
void setWritePass(char pWritePassBuf[],char pBuf[])
{
    int i;
    int flag;
    char temp;
    
    //启动总线
    I2C_START();
    // 发送控制命令
    I2C_TxHToL(0xfe);
    // 等待 ACK
    I2C_GetACK();	
    //发送密码
    for(i = 0;i < 8;i++)
    {
        //从最高位密码开始发送
        I2C_TxHToL(pWritePassBuf[7 - i]);
        // 等待 ACK
        I2C_GetACK();
    }
    
    //尝试5次
    for(i = 0;i < 5;i++)
    {
        //启动总线
        I2C_START();
        // 发送密码ACK命令
        I2C_TxHToL(0x55);
        // 等待 ACK
        temp = I2C_GetACK();
        if(temp == 0) 
        {
             flag = 1;
             break;
        }
    }
    
    //失败
    if(flag == 0) return;
    
    //读入数据
    for(i = 0;i < 8;i++)
    {
        // 读取数据
        pBuf[i] = I2C_RxHToL();
        // 设置 ACK
        I2C_SetACK();
    }
    // 停止总线
    I2C_STOP();	
    
    for(i = 0;i < 8;i++)
    {
        pWritePassBuf[i] = pBuf[i];
    }
}
void resetX76F100()
{
    //CS拉低
    CS_LOW();
    //RST拉低
    RST_LOW();
    //RST拉高
    RST_HIGH();
    //RST拉低
    RST_LOW();
    //读字节
    pResetBuf[0] = I2C_RxByte();
    pResetBuf[1] = I2C_RxByte();
    pResetBuf[2] = I2C_RxByte();
    pResetBuf[3] = I2C_RxByte();
}
void CS_HIGH(void)
{
    P2DIR |= CS;
    P2OUT |= CS;
}
void CS_LOW(void)
{
    P2DIR |= CS;
    P2OUT &= ~CS;
}
void RST_HIGH(void)
{
    P1DIR |= RST;
    P1OUT |= RST;
}
void RST_LOW(void)
{
    P1DIR |= RST;
    P1OUT &= ~RST;
}
void openX76F100(void)
{
    //片选使能
    CS_LOW();
    //RST管脚复位
    resetX76F100();
}
void closeX76F100(void)
{
    //片选禁止
    CS_HIGH();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -