首页 > 其他分享 >IIC驱动--TM1651

IIC驱动--TM1651

时间:2024-07-08 15:46:36浏览次数:6  
标签:delay -- void us DELAY IIC TM1651 GPIO define

 

/**
  ******************************************************************************
  * @file    GPIO_Toggle\main.c
  * @author  MCD Application Team
  * @version  V2.0.1
  * @date     18-November-2011
  * @brief   This file contains the main function for GPIO Toggle example.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */ 

/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"
#include "tm1628.h"
/**
  * @addtogroup GPIO_Toggle
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Evalboard I/Os configuration */

#define LED_GPIO_PORT  (GPIOB)
#define LED_GPIO_PINS  (GPIO_PIN_5)



/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void Delay (uint16_t nCount);

/* Private functions ---------------------------------------------------------*/
/* Public functions ----------------------------------------------------------*/

/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */

#define PA3 GPIO_ReadInputPin(GPIOA, (GPIO_Pin_TypeDef)GPIO_PIN_3)  //按键切换输出


uint8_t g_flag = 0;
uint8_t g_onetime = 0;


void Init_UART1(void)
{
    UART1_DeInit();
    UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
    
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);

//    UART1_Cmd(ENABLE);
}
void Send(uint8_t dat)
{
  while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));
    
        UART1_SendData8(dat);
    
}
void UART1_SendData8_Buff(uint8_t* data,uint8_t len)
{
    uint8_t i = 0;
    for(i=0;i<len;i++)
    {
        while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));
      UART1_SendData8(data[i]);    
    }


}
unsigned char num[8];    
unsigned char  tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                           0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void main(void)
{
    uint8_t ret=0;
    uint8_t i=0;
    GPIO_Init(GPIOA, (GPIO_Pin_TypeDef)GPIO_PIN_3,GPIO_MODE_IN_FL_NO_IT);
    TM1651_init();
    Init_UART1();
    Delay(0XFFFF);
  while (1)
  {
        ret=GetKey();
        if(ret==0xf2)
        {
            Seg_Shows(0xc0,0xee);
            Seg_Shows(0xc1,0xee);
            Seg_Shows(0xc2,0xee);
            Seg_Shows(0xc3,0xee);
        }
        else if(ret==0xf1)
        {
            Seg_Shows(0xc0,0x77);
            Seg_Shows(0xc1,0x77);
            Seg_Shows(0xc2,0x77);
            Seg_Shows(0xc3,0x77);
        }
        else if(ret==0xf3)
        {
            Seg_Shows(0xc0,0xbb);
            Seg_Shows(0xc1,0xbb);
            Seg_Shows(0xc2,0xbb);
            Seg_Shows(0xc3,0xbb);
        }
        //UART1_SendData8(ret);    
        //while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));    
        
#if 1
    if(PA3==0)
        {
            while(PA3==0);
            g_flag++;
            g_onetime=1;
                
        }
        if(g_flag==1 && g_onetime==1)
        {
            Seg_Shows(0xc0,0xff);
            Seg_Shows(0xc1,0x00);
            Seg_Shows(0xc2,0xff);
            Seg_Shows(0xc3,0x00);
            g_onetime=0;
        }
        else if(g_flag==2 && g_onetime==1)
        {
            Seg_Shows(0xc0,0x00);
            Seg_Shows(0xc1,0xff);
            Seg_Shows(0xc2,0x00);
            Seg_Shows(0xc3,0xff);    
            g_onetime=0;
        }
        else if(g_flag==3 && g_onetime==1)
        {
            Seg_Shows(0xc0,0xaa);
            Seg_Shows(0xc1,0xaa);
            Seg_Shows(0xc2,0xaa);
            Seg_Shows(0xc3,0xaa);    
            g_onetime=0;
        }
        else if(g_flag==4 && g_onetime==1)
        {
            Seg_Shows(0xc0,0x55);
            Seg_Shows(0xc1,0x55);
            Seg_Shows(0xc2,0x55);
            Seg_Shows(0xc3,0x55);
            g_onetime=0;
        }
        else 
        {
        }
        if(g_flag>=4)
        {
            g_flag=0;
        }
#endif
    }

}

/**
  * @brief Delay
  * @param nCount
  * @retval None
  */
void Delay(uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {
    nCount--;
  }
}

#ifdef USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param file: pointer to the source file name
  * @param line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{ 
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif

/**
  * @}
  */

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
mian

 

 #include "tm1628.h"


 #define DELAY_TM  50
 void Delay (uint16_t nCount);
 /**
  * @brief Delay
  * @param nCount
  * @retval None
  */
void delay_us(uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {
    nCount--;
  }
}

/*********************define and global variables*********************************************/
//#define STB GPIO_PIN_6                          //chip-select line
#define MCLK GPIO_PIN_5                                         //clock line
#define DIO GPIO_PIN_4    
#define Set(x) GPIO_WriteHigh(GPIOC,(GPIO_Pin_TypeDef)(x))                //Sets the selected data port bits
#define Reset(x) GPIO_WriteLow(GPIOC,(GPIO_Pin_TypeDef)(x))            //Resets the selected data port bits
#define Get(x) GPIO_ReadInputPin(GPIOC,(GPIO_Pin_TypeDef)(x))==DIO           //Read the specified input port pin
#define SDA_OUT  GPIO_Init(GPIOC, (GPIO_Pin_TypeDef)DIO, GPIO_MODE_OUT_PP_LOW_FAST)
#define SDA_IN  GPIO_Init(GPIOC, (GPIO_Pin_TypeDef)DIO, GPIO_MODE_IN_PU_NO_IT);

void I2CStart(void) // 1651 开始
{
    SDA_OUT;
    Set(MCLK);
    Set(DIO);
    delay_us(DELAY_TM);
    Reset(DIO);        
    Reset(MCLK);    
  delay_us(DELAY_TM);    
}

//=============================================
void I2Cask(void) //1651 应答
{
    Reset(MCLK);
    delay_us(DELAY_TM);
    SDA_IN;
    while(Get(DIO));
    delay_us(DELAY_TM);
    Set(MCLK);
    delay_us(DELAY_TM);
}

//========================================
void I2CStop(void) // 1651 停止
{
    SDA_OUT;
    Reset(MCLK);
    Reset(DIO);
    delay_us(DELAY_TM);
    Set(MCLK);
    delay_us(DELAY_TM);
    Set(DIO);
    delay_us(DELAY_TM);
    Reset(MCLK);
    Reset(DIO);
}

//=========================================
void I2CWrByte(uint8_t oneByte) //写一个字节
{
        unsigned char i;
        SDA_OUT;
    for(i=0; i<8; i++) {
            Reset(MCLK);
            if(oneByte&0x01) {
                    Set(DIO);
            } else {
                    Reset(DIO);
            }
            oneByte=oneByte>>1;
            delay_us(DELAY_TM);
            Set(MCLK);
            delay_us(DELAY_TM);
    }
//8位数据传送完
    I2Cask();
}

//-------------------------------------------------
uint8_t GetKey(void) //读按键
{
        uint8_t rekey=0, i=0;

        I2CStart();
        I2CWrByte(0x46); //读按键命令
        //I2Cask();
    SDA_OUT;
        Set(DIO);// 在读按键前拉高数据线
        for(i=0;i<8;i++) //从低位开始读
        {
            Reset(MCLK);
            rekey = rekey>>1;
            delay_us(DELAY_TM);
            delay_us(DELAY_TM);
            Set(MCLK);
            SDA_IN;
            if(Get(DIO))
            {
                rekey = rekey|0x80;
            }
            else
            {
                rekey = rekey|0x00;
            }
            delay_us(DELAY_TM);
            delay_us(DELAY_TM);
        }
        I2Cask();
        I2CStop();
        return (rekey);
}
void GPIO_Config(void){
    GPIO_Init(GPIOC, (GPIO_Pin_TypeDef)MCLK|DIO, GPIO_MODE_OUT_PP_LOW_FAST);    
} 
void TM1651_init(void)
{
    GPIO_Config();
}


/************显示函数,地址自加一************/
void disp0(unsigned char *p) {
    unsigned char i;
    I2CStart();
    I2CWrByte(0x40);  //数据命令设置:地址自动加1,写数据到显示寄存器
    I2CStop();
    I2CStart();
    I2CWrByte(0xc0);  //地址命令设置:初始地址为00H
    for(i=0; i<4; i++) { //发送4字节数据到显存
        I2CWrByte(*p);
        p++;
    }
    I2CStop();
    I2CStart();
    I2CWrByte(0x8C); //显示控制命令:开显示,脉冲宽度为11/16.
    I2CStop();
}
unsigned char  CODE[10]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};
/************显示函数,固定地址写数据************/
void Seg_Shows(unsigned char add, unsigned char value) {
    I2CStart();
    I2CWrByte(0x44); //数据命令设置:固定地址,写数据到显示寄存器
    I2CStop();
    I2CStart();
    I2CWrByte(add);//地址命令设置:写入add对应地址
    I2CWrByte(value);//给add地址写数据
    I2CStop();
    I2CStart();
    I2CWrByte(0x8C);//显示控制命令:开显示,脉冲宽度为11/16.
    I2CStop();
}
tm1651

 

#ifndef __TM1628_H
#define __TM1628_H     
#include "stm8s.h"
/*******************************************************************************
Typedef definitions
*******************************************************************************/
#define uchar unsigned char
#define uint  unsigned int


void TM1651_init(void);
uint8_t GetKey(void);
void Seg_Shows(unsigned char add, unsigned char value);
void disp0(unsigned char *p);
#endif
__TM1651_H

 

标签:delay,--,void,us,DELAY,IIC,TM1651,GPIO,define
From: https://www.cnblogs.com/zhouyuqing1024/p/18290006

相关文章

  • List 转 Page
    packagecom.leo.boot.jpa.stream;importorg.apache.commons.collections4.CollectionUtils;importorg.apache.commons.collections4.IterableUtils;importorg.springframework.beans.BeanUtils;importorg.springframework.data.domain.Page;importorg.springfram......
  • Java读取properties文件之中文乱码问题及解决
    Java读取properties文件之中文乱码问题及解决−目录Java读取properties文件中文乱码两种方式读取properties配置文件方式一:使用Properties集合工具类读取配置文件。方式二:使用ResourceBundle工具类读取配置文件Java读写资源文件类properties1.资源文件要求如下2.功能大致如下3.......
  • turtle绘制五星红旗
    importturtle#背景色turtle.bgcolor('red')turtle.color('yellow')#画笔颜色turtle.fillcolor('yellow')#填充色turtle.up()turtle.goto(-600,180)turtle.down()#主星turtle.begin_fill()#开始着色foriinrange(5):turtle.forward(50)......
  • Markdown学习
    Markdown学习标题对应井号#+空格+标题名多少个井号就是多少级标题字体helloworld斜体-->*内容*helloworld粗体-->**内容**helloworld倾斜加粗***helloworld删除线~~引用helloworld分割线***或者---图片语法:网络图片:超链接点击跳转......
  • MybatisPlus配置逻辑删除
    MybatisPlus配置逻辑删除逻辑删除,可以方便地实现对数据库记录的逻辑删除而不是物理删除。逻辑删除是指通过更改记录的状态或添加标记字段来模拟删除操作,从而保留了删除前的数据,便于后续的数据分析和恢复。物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数......
  • 怎么看时序图
    时序图看法从上到下,从左到右看一个单位时间,拆分成一个一个模块简单的时序图,一根线串口通信SPIS时序图总体传输24个bit注意无效电平可能传输不同的电平......
  • java springboot监听事件和处理事件
    在SpringBoot中,监听和处理事件是一种常用的模式,用于在应用程序的不同部分之间传递信息。Spring的事件发布/订阅模型允许我们创建自定义事件,并在这些事件发生时由注册的监听器进行处理。这里,我将提供一个简单的SpringBoot应用程序示例,其中将包括事件的定义、事件的发布以及事件......
  • 工程仪器振弦采集仪的设计与研发进展
    工程仪器振弦采集仪的设计与研发进展工程仪器振弦采集仪是一种用于测量和记录物体振动参数的仪器。它能够实时采集物体的振动信号,并通过内部的传感器将振动信号转化为电信号,然后进行信号放大和处理,最终以数字形式显示或存储。 河北稳控科技振弦采集仪的设计与研发进展主要集......
  • 逆向内存加载Dex(动态加载class)
    逆向一个app,其核心算法是通过反射调用的,反编译软件中无法找到该类,并且也无法hook.Java.perform(function(){Java.enumerateClassLoaders({onMatch:function(loader){ try{ if(loader.loadClass("com.xxxxx")){ console.log("=============......
  • 计算机网络概述
    计算机网络基本概念从技术范畴来看,计算机网络是计算机技术与通信技术相互融合的产物更为简短、概括性的定义:计算机网络是互连的、自治的计算机的集合。目前最大的、应用最广泛的计算机网络就是Internet或称因特网。Internet中互连的端系统、分组交换设备或其他网络设备在进行......