久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1831|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32單片機(jī)用WTC7514DSI觸摸芯片IIC的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:61632 發(fā)表于 2024-6-3 13:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
今天用STM32F103C8T6單片機(jī)I/O口模擬IIC與WTC7514DSI觸摸芯片通訊問題,按觸摸按鍵,沒有反應(yīng),想向各位請教一下,代碼有沒有問題

/****************
main.c文件開始
****************/
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "Key.h"
#include "Demo_iic_7514.h"
#include "stm32f10x.h"
u16  tim4Cnt=5000;
u8 k=0;
u16        sec=0,min=0,hour=00;
extern u16   count;
extern  u8 Flag_off;
// u16 count=0;
/*******************************************************************************
* 函 數(shù) 名         : main
* 函數(shù)功能                   : 主函數(shù)
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
int main()
{
        SysTick_Init(72);
        LED_Init();
        IIC_Init();
        u16 u16_key_value;
      
        fun_wtc7514dsi_write_data(15);
        delay_ms(50);
        while(1)
        {
                 u16_key_value=fun_wtc7514dsi_read_data();
                //u16_key_value &= 0x0FF8;
                if(u16_key_value==KEY1_VALUE)
                {
                        D1_LED=1;
                }      
                else
                        D1_LED=0;
        }
}
/****************

                                                                key.c文件開始
****************/

#include "SysTick.h"
#include "Demo_iic_7514.h"
#include "Key.h"
#include "led.h"
u8 Flag_off=0,Flag_Fun=0,Flag_add=0,Flag_Redu=0;
u16 fun_wtc7514dsi_read_data(void)
{
        u8 u8_high=0;
        u8 u8_low=0;
        u16 u16_key_value=0;
        IIC_Start();
        IIC_Send_Byte(0x71);
        if(IIC_Wait_Ack())
        {
                return 0;
        }
        u8_high=IIC_Read_Byte(1);
        u8_low=IIC_Read_Byte(0);
        u16_key_value= (u8_high<<8) | u8_low;
        IIC_Stop();
        return u16_key_value;

}
void fun_wtc7514dsi_write_data(u8 u8_data)
{                                               
    IIC_Start();  
    IIC_Send_Byte(0x70);      
    IIC_Wait_Ack();
    IIC_Send_Byte(u8_data);           
    IIC_Stop();  
}


/****************

                                                                    Demo_iic_7514.h文件開始
****************/

#ifndef _Demo_iic_7514_H
#define _Demo_iic_7514_H
#include "system.h"
/*  IIC_SCL時鐘端口、引腳定義 */
#define IIC_SCL_PORT                         GPIOB   
#define IIC_SCL_PIN                                (GPIO_Pin_4)
#define IIC_SCL_PORT_RCC                RCC_APB2Periph_GPIOB
/*  IIC_SDA時鐘端口、引腳定義 */
#define IIC_SDA_PORT                         GPIOB  
#define IIC_SDA_PIN                         (GPIO_Pin_5)
#define IIC_SDA_PORT_RCC                RCC_APB2Periph_GPIOB
//IO操作函數(shù)         
#define IIC_SCL                  PBout(4) //SCL
#define IIC_SDA                 PBout(5) //SDA         
#define READ_SDA             PBin(5)  //輸入SDA
//IIC所有操作函數(shù)
void IIC_Init(void);                //初始化IIC的IO口                                 
void IIC_Start(void);                                //發(fā)送IIC開始信號
void IIC_Stop(void);                                  //發(fā)送IIC停止信號
void IIC_Send_Byte(u8 txd);                        //IIC發(fā)送一個字節(jié)
u8 IIC_Read_Byte(u8 ack);                        //IIC讀取一個字節(jié)
u8 IIC_Wait_Ack(void);                                 //IIC等待ACK信號
void IIC_Ack(void);                                        //IIC發(fā)送ACK信號
void IIC_NAck(void);                                //IIC不發(fā)送ACK信號
#endif

/****************

                                                              Demo_iic_7514.C文件開始
****************/
#include "Demo_iic_7514.h"
#include "SysTick.h"
/*******************************************************************************
* 函 數(shù) 名         : IIC_Init
* 函數(shù)功能                   : IIC初始化
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void IIC_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
      
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
      
        IIC_SCL=1;
        IIC_SDA=1;      
}
/*******************************************************************************
* 函 數(shù) 名         : SDA_OUT
* 函數(shù)功能                   : SDA輸出配置         
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void SDA_OUT(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
      
        GPIO_InitStructure.GPIO_Pin=IIC_SDA_PIN;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(IIC_SDA_PORT,&GPIO_InitStructure);
}
/*******************************************************************************
* 函 數(shù) 名         : SDA_IN
* 函數(shù)功能                   : SDA輸入配置         
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void SDA_IN(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
      
        GPIO_InitStructure.GPIO_Pin=IIC_SDA_PIN;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Init(IIC_SDA_PORT,&GPIO_InitStructure);
}
/*******************************************************************************
* 函 數(shù) 名         : IIC_Start
* 函數(shù)功能                   : 產(chǎn)生IIC起始信號   
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void IIC_Start(void)
{
        SDA_OUT();     //sda線輸出
        IIC_SDA=1;                    
        IIC_SCL=1;
        delay_us(5);
        IIC_SDA=0;//START:when CLK is high,DATA change form high to low
        delay_us(6);
        IIC_SCL=0;//鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)
}      
/*******************************************************************************
* 函 數(shù) 名         : IIC_Stop
* 函數(shù)功能                   : 產(chǎn)生IIC停止信號   
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void IIC_Stop(void)
{
        SDA_OUT();//sda線輸出
        IIC_SCL=0;
        IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
        delay_us(6);
        IIC_SCL=1;        
        IIC_SDA=1;//發(fā)送I2C總線結(jié)束信號
        delay_us(6);                                                                  
}
/*******************************************************************************
* 函 數(shù) 名         : IIC_Wait_Ack
* 函數(shù)功能                   : 等待應(yīng)答信號到來   
* 輸    入         : 無
* 輸    出         : 1,接收應(yīng)答失敗
                                 0,接收應(yīng)答成功
*******************************************************************************/
u8 IIC_Wait_Ack(void)
{
        u8 tempTime=0;
      
        SDA_IN();      //SDA設(shè)置為輸入            
        IIC_SDA=1;
        delay_us(1);
      
        IIC_SCL=1;
        delay_us(1);         
        while(READ_SDA)
        {
                tempTime++;
                if(tempTime>250)
                {
                        IIC_Stop();
                        return 1;
                }
        }
        IIC_SCL=0;//時鐘輸出0           
        return 0;  
}
/*******************************************************************************
* 函 數(shù) 名         : IIC_Ack
* 函數(shù)功能                   : 產(chǎn)生ACK應(yīng)答  
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void IIC_Ack(void)
{
        IIC_SCL=0;
        SDA_OUT();
        IIC_SDA=0;
        delay_us(2);
        IIC_SCL=1;
        delay_us(5);
        IIC_SCL=0;
}
/*******************************************************************************
* 函 數(shù) 名         : IIC_NAck
* 函數(shù)功能                   : 產(chǎn)生NACK非應(yīng)答  
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/                    
void IIC_NAck(void)
{
        IIC_SCL=0;
        SDA_OUT();
        IIC_SDA=1;
        delay_us(2);
        IIC_SCL=1;
        delay_us(5);
        IIC_SCL=0;
}      

/*******************************************************************************
* 函 數(shù) 名         : IIC_Send_Byte(u8 txd)
* 函數(shù)功能                   : 向IIC發(fā)送一個8字節(jié)數(shù)據(jù),并請求一個應(yīng)答信號ACK,如果成功收到ACK返回1,否則返回0.
* 輸    入         : txd:需要發(fā)送到IIC從機(jī)的數(shù)據(jù)
* 輸    出         : 收到I2C的ACK信號,返回1(TRUE),否則為0(false)
*******************************************************************************/                  
void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
        SDA_OUT();            
    IIC_SCL=0;//拉低時鐘開始數(shù)據(jù)傳輸
    for(t=0;t<8;t++)
    {              
        if((txd&0x80)>>7) //0x80  1000 0000
                        IIC_SDA=1;
                else
                        IIC_SDA=0;
        txd<<=1;           
                delay_us(1);   //對TEA5767這三個延時都是必須的
                IIC_SCL=1;
                delay_us(2);
                IIC_SCL=0;      
                delay_us(1);
    }         
}
/*******************************************************************************
* 函 數(shù) 名         : IIC_Read_Byte
* 函數(shù)功能                   : IIC讀一個字節(jié)
* 輸    入         : ack=1時,發(fā)送ACK,ack=0,發(fā)送nACK
* 輸    出         : 應(yīng)答或非應(yīng)答
*******************************************************************************/  
u8 IIC_Read_Byte(u8 ack)
{
        u8 i,receive=0;
        u8 u8_data;
        u8 ucErrTime = 0;
        for (i = 0; i < 8; i++)
    {
       IIC_SCL=0;
        u8_data = receive;
        SDA_IN();
        IIC_SCL=1;
        u8_data <<= 1;
        receive = u8_data;
        ucErrTime = 0;
        while (READ_SDA)
        {
            ucErrTime++;
            if (ucErrTime > 250 || i > 0)
            {
                receive |= 0x01;  //讀到數(shù)據(jù)1
                break;
            }
        }  
        if (READ_SDA)
        {
            receive |= (1 << i);
        }
    }                    
    if (!ack)
    {
        IIC_NAck();
    }
    else
    {
        IIC_Ack();
    }
    return receive;
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区av | 久久三区 | 999精品视频在线观看 | 成在线人视频免费视频 | 在线免费黄色小视频 | 久久国产一区 | 亚洲欧美中文日韩在线v日本 | www.jizzjizz| 国产日韩欧美一区二区 | 久久久亚洲精品视频 | 午夜久久av | 亚洲免费在线 | 欧美日韩国产一区二区三区 | 精品国产一区二区三区av片 | 黑人久久 | 日韩一级免费电影 | 九色av| 免费日韩av网站 | 欧美白人做受xxxx视频 | 亚洲精品乱码久久久久v最新版 | 99久久精品国产一区二区三区 | 全免费a级毛片免费看视频免 | 在线一区 | 天堂色区 | 玖玖爱365| 日韩影音 | 精品亚洲一区二区三区四区五区高 | 国产日韩欧美在线 | 亚洲免费影院 | 国产在线精品免费 | 精品乱码一区二区三四区 | 国产免费xxx | 色永久 | 天堂素人约啪 | 在线观看 亚洲 | 日韩在线电影 | 国产成人精品一区二 | 久久久久国产 | 亚洲人成人一区二区在线观看 | 91成人在线 | 精品国产欧美一区二区三区成人 |