精华内容
下载资源
问答
  • struct tm定义

    2012-02-25 18:49:00
    1 struct tm { 2 int tm_sec; /* seconds */ 3 int tm_min; /* minutes */ 4 int tm_hour; /* hours */ 5 int...
     1 struct tm {
    2 int tm_sec; /* seconds */
    3 int tm_min; /* minutes */
    4 int tm_hour; /* hours */
    5 int tm_mday; /* day of the month */
    6 int tm_mon; /* month */
    7 int tm_year; /* year */
    8 int tm_wday; /* day of the week */
    9 int tm_yday; /* day in the year */
    10 int tm_isdst; /* daylight saving time */
    11
    12 };
    13
    14 tm_sec The number of seconds after the minute, normally in the range 0 to 59, but can be up to 60 to allow for leap seconds.
    15
    16 tm_min The number of minutes after the hour, in the range 0 to 59.
    17
    18 tm_hour
    19 The number of hours past midnight, in the range 0 to 23.
    20
    21 tm_mday
    22 The day of the month, in the range 1 to 31.
    23
    24 tm_mon The number of months since January, in the range 0 to 11.
    25
    26 tm_year
    27 The number of years since 1900.
    28
    29 tm_wday
    30 The number of days since Sunday, in the range 0 to 6.
    31
    32 tm_yday
    33 The number of days since January 1, in the range 0 to 365.
    34
    35 tm_isdst
    36 A flag that indicates whether daylight saving time is in effect at the time described. The value is positive if daylight saving time is in effect, zero if it is not, and negative if the information is not available.

    转载于:https://www.cnblogs.com/woainilsr/archive/2012/02/25/2368020.html

    展开全文
  • C++时间结构体(time_t和tm)

    千次阅读 2020-09-29 19:07:50
    存储时间常见的有两种存储方式,一种是从1970年到现在经过了多少秒,一种是用一个结构来分别存储年月日时分秒的。...而tm直接存储年月日的是一个结构: struct tm { int tm_sec; /*秒,正常范围0-59, 但

    存储时间常见的有两种存储方式,一种是从1970年到现在经过了多少秒,一种是用一个结构来分别存储年月日时分秒的。
    time_t 这种类型就是用来存储从1970年到现在经过了多少秒,要想更精确一点,可以用结构struct timeval,它精确到微妙。

    struct timeval
    {
        long tv_sec; /*秒*/
        long tv_usec; /*微秒*/
    };
    

    而tm直接存储年月日的是一个结构:

    struct tm
    {
        int tm_sec;  /*秒,正常范围0-59, 但允许至61*/
        int tm_min;  /*分钟,0-59*/
        int tm_hour; /*小时, 0-23*/
        int tm_mday; /*日,即一个月中的第几天,1-31*/
        int tm_mon;  /*月, 从一月算起,0-11*/  1+p->tm_mon;
        int tm_year;  /*年, 从1900至今已经多少年*/  1900+ p->tm_year;
        int tm_wday; /*星期,一周中的第几天, 从星期日算起,0-6*/
        int tm_yday; /*从今年1月1日到目前的天数,范围0-365*/
        int tm_isdst; /*日光节约时间的旗标*/
    };
    

    需要特别注意的是,年份是从1900年起至今多少年,而不是直接存储如2011年,月份从0开始的,0表示一月,星期也是从0开始的, 0表示星期日,1表示星期一。

    下面介绍一下我们常用的时间函数:

    #include <time.h>
    char *asctime(const struct tm* timeptr);
    //将结构中的信息转换为真实世界的时间,以字符串的形式显示
    
    char *ctime(const time_t* timep);
    

    将timep转换为真是世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不一样

    double difftime(time_t time1, time_t time2);
    

    返回两个时间相差的秒数

    int gettimeofday(struct timeval* tv,struct timezone* tz);
    

    返回当前距离1970年的秒数和微妙数,后面的tz是时区,一般不用

    //定义函数
    struct tm* gmtime(const time_t* timep);
    

    将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struct tm结构指针,C语言中gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。结构tm的定义为:

    struct tm
    {
    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_mday;
    int tm_mon;
    int tm_year;
    int tm_wday;
    int tm_yday;
    int tm_isdst;
    };
    int tm_sec /*代表目前秒数,正常范围为0-59,但允许至61秒*/
    int tm_min /*代表目前分数,范围0-59*/
    int tm_hour /*从午夜算起的时数,范围为0-23*/
    int tm_mday /*目前月份的日数,范围01-31*/
    int tm_mon /*代表目前月份,从一月算起,范围从0-11*/
    int tm_year /*从1900 年算起至今的年数*/
    int tm_wday /*一星期的日数,从星期一算起,范围为0-6*/
    int tm_yday /*从今年1月1日算起至今的天数,范围为0-365*/
    int tm_isdst /*日光节约时间的旗标*/
    };
    //此函数返回的时间日期未经时区转换,而是UTC时间。
    
    struct tm* localtime(const time_t* timep);
    

    和gmtime类似,但是它是经过时区转换的时间。

    time_t mktime(struct tm* timeptr);
    

    将struct tm 结构的时间转换为从1970年至今的秒数

    time_t time(time_t* t);
    

    取得从1970年1月1日至今的秒数。

    展开全文
  • tm1680参考程序

    2019-04-18 15:44:16
    TM1680 参考程序: 1、A1\A0 采用MCU进行控制,实际使用时,可以将A1\A0任意接高低电平,TM1680 ID改为相应指令即可; 2、该程序采用STC15W 芯片模拟IIC协议,IO口为双向IO口(无需设置输入与输出),如果MCU的IO口...
  • TM模式[定义].pdf

    2021-10-20 22:42:26
    TM模式[定义].pdf
  • TM1621参考程序

    2019-04-18 15:51:25
    /******************TM1621模块命令定义*********************/ #define SYSDIS 0x00 //关系统振荡器和LCD偏压发生器 #define SYSEN 0x02 //打开系统振荡器 #define LCDOFF 0x04 //关LCD偏压 #define LCDON 0x06 ...
  • tm1622参考程序

    2019-04-18 15:52:51
    *文 件 名:TM1622-V1.0 *当前版本:V1.0 *MCU 型号:STC12C5608AD *开发环境:Keil uVision4 *晶震频率:11.0592MHZ *完成日期:2013-09-09 *程序功能:1.LCD驱动:32SEG*8COM(由2组4COM LCD屏组成),分别...
  • 常见手咪接口定义
  • tm9665accwgwc4液晶屏驱动
  • TM1628.zip

    2020-11-16 17:12:49
    使用IO模拟I2C方式驱动TM1628(A),使用宏定义方式定义底层驱动需要的IO和时序,简单修改宏定义既可以移植到到任意平台上,C51、ARM轻松移植,使用简单。
  • TM1640点C和点H文件

    2019-04-27 15:42:00
    //#define TM1640MEDO_DISPLAY 0x88 //宏定义 亮度 最小 //#define TM1640MEDO_DISPLAY 0x89 //宏定义 亮度 #define TM1640MEDO_DISPLAY 0x8a //宏定义 亮度 //#define TM1640MEDO_DISPLAY 0x8b //宏定义 亮度 //#...
  • 保证能用注意要对应IO口 IO口定义里面有 楼主已经调通了 谢谢大家 非喜勿喷
  • 基于stm32的TM1650驱动程序,接口已经宏定义,方便移植。亲测可用
  • LatticeECP4^(TM)系列重新定义了低成本、低功耗FPGA.pdf
  • 四川省电赛TI杯 电赛 M4核 tm4c1294数据手册
  • 7寸 液晶屏 天马液晶规格书 tm070rdh13 分辨率800*480
  • TM4C123GH6PM一般管脚使用说明,通过它可以让人掌握基本的使用方法
  • 写频软件 好易通 Tm600

    2013-01-11 13:00:28
    写频软件 好易通 Tm600
  • TM4C123-JTAG

    2020-02-22 18:46:52
    二、JTAG的引脚定义 1.四种标准的JTAG接口 2.TM4C12X系列单片机JTAG硬件设计 适用于TM4C12X系列的仿真器 XDS100V2、XDS100V3、XDS200、XDS560V2 Stellaris ICDI、I-jet、ULINK2 三、TM4C12X JTAG...

    本文摘录于TI官方手册SPMA075,主要内容是对JTAG的认识及硬件设计。

    一、JTAG的基本认识

    JTAG接口主要是四个引脚
    TMS 、TDI 、TDO、TCK

    At power on, the TAP state machine (see Figure 1) is initialized to be in Test Logic Reset state. It moves from one state to another based on the TMS value (shown as logic 0 or 1 on the transition arrow) with every TCK. Once the state machine enters the Shift state, the TDI pin is used to serially shift in the IR or DR. At the same time, the value captured in the shift register during the Capture state is shifted out on to the TDO. When the Update state is executed, the value shifted in during the Shift state is updated to the TAP for the next JTAG cycle.

    JTAG核心是TAP状态机。上电后初始化为Test Logic Reset state,它根据每一个TCK时钟边沿TMS的逻辑电平进行状态转移。当进入移位状态时,TDI的数据移入IR或DR寄存器,当进入捕获状态时,移位寄存器中的Capture state 移出至TDO.当执行更新状态时,在移位状态移入移位寄存器中的数据被更新以准备下一个循环周期。
    在这里插入图片描述
    JTAG 可以有两种连接方式
    点对点
    在这里插入图片描述
    菊花链
    在这里插入图片描述
    菊花链模式下速度较慢,因为需要额外的移位操作以使每个TAP到正确的状态。
    JTAG access is slower as additional shifts are required to bring each device TAP to the correct state

    JTAG还可以有额外的两个引脚
    Besides the four JTAG pins, there are two more pins available on some devices: TRST and RTCK.
    • TRST: Test Reset. This pin is an optional pin and can be used to reset the JTAG TAP state machine. It is an active low signal.
    • RTCK: Return TCK. This is a clock that is sourced by the device. When available, the TDO is sampled with this clock allowing for higher JTAG operation frequency. This is also referred to as adaptive clocking.

    二、JTAG的引脚定义

    1.四种标准的JTAG接口
    在这里插入图片描述
    2.TM4C12X系列单片机JTAG硬件设计
    在这里插入图片描述
    适用于TM4C12X系列的仿真器
    XDS100V2、XDS100V3、XDS200、XDS560V2

    Stellaris ICDI、I-jet、ULINK2

    在这里插入图片描述
    在这里插入图片描述

    三、TM4C12X JTAG接口行为

    JTAG的功能受BOOTCFG寄存器中位0和位1的影响

    All TM4C12x devices have the BOOTCFG register. This register influences the behavior of the device boot after a power on reset. One of the functions is the ability to disable the JTAG function without
    configuring the GPIO port C as GPIO’s. This is achieved by clearing the bits 0 and 1. For more information, see device-specific data sheet. When the bits are cleared, the JTAG function is disabled.

    当出现引脚配置错误时,可执行Unlock Sequence。

    当初次使用时,可通过TEST CONNECTION功能验证连接的正确性。

    If the JTAG IR and DR Integrity scan-test succeeds, it means that the device core is out of reset and may
    not have initialized itself. If, however, the integrity scan-test fails, the issue is in the power up process.
    The following steps must be followed to make sure every known cause is eliminated till the source of the
    issue is found:

    1. Check with a digital multi-meter that the VDD and VDDA supply rails are 3.3 V.
      (a) If not, then check the power supply aspect of the design.
    2. Check with a digital multi-meter that the VDDC rail is 1.2 V.
      (a) If not and providing a power from an external power source, make sure that the current limit is set
      around 150 mA.
    3. If the VDDC rail is at 1.2 V, make sure that the capacitance on the rail is as per the device-specific
      data sheet and the layout of the capacitors are as per the system design guidelines and application
      reports (see Section 8).
    4. Check whether the JTAG header is correctly mounted and the TDIS pin (if available) is connected to
      GND.
    5. Check on the JTAG header the VTREF pin is 3.3 V.
    6. Check whether the Reset Pin of the microcontroller is at 3.3 V.
      (a) If not, connect an external pull up.
    7. If using an external crystal oscillator, connect an oscilloscope on pin OSC0.
      (a) If the crystal is not oscillating, check the solder on the crystal and capacitors.
      (b) Always use the recommended crystals as per the device-specific data sheet.
    8. If not using an external crystal oscillator, make sure that the pin OSC0 is connected to GND.
    9. If using a TM4C129x device with integrated PHY, make sure that the RBIAS resistor is populated as
      per device-specific data sheet recommendation.
    展开全文
  • TM035KDH03_V1.2

    2012-02-22 22:47:59
    天马微电子TM035KDH03_V1.2 3.5寸普通亮度液晶屏规格书
  • TM1650】STM8S TM1650芯片控制程序

    千次阅读 2019-01-29 16:05:03
    #ifndef __TM1650_I2C_H #define __TM1650_I2C_H #include "stm8s.h" #include "stm8s_gpio.h" #include "tim1.h" #include "usart2.h" #include &lt;iostm8s103f3.h&...

     

    以下为.h文件:

    
    #ifndef __TM1650_I2C_H
    #define __TM1650_I2C_H
    #include "stm8s.h"
    #include "stm8s_gpio.h"
    #include "tim1.h"
    #include "usart2.h"
    #include <iostm8s103f3.h>
    #include <intrinsics.h>
    
    
    /**********************************
    TM1650芯片控制20路灯函数
    PB7为SCL口
    PB6为SDA口
    **********************************/
    
    #define SCL_TM1650              PC_ODR_ODR7
    #define SDA_TM1650               PC_ODR_ODR6
    #define SDAM_TM1650              PC_IDR_IDR6
    #define SET_SCL_OUT_TM1650()    {PC_DDR_DDR7=1; PC_CR1_C17 = 1; PC_CR2_C27 = 0;}
    #define SET_SDA_OUT_TM1650()    {PC_DDR_DDR6=1; PC_CR1_C16 = 1; PC_CR2_C26 = 0;}
    #define SET_SDA_IN_TM1650()     {PC_DDR_DDR6=0; PC_CR1_C16 = 0; PC_CR2_C26 = 0;}
    
    
    void IIC_Init_TM1650(void);
    void TDelay_us(u8 z);
    void I2C_Start_TM1650(void);
    void I2C_Stop_TM1650(void);
    void IIC_Ack_TM1650(void);
    void IIC_NAck_TM1650(void);
    uint8_t IIC_Wait_Ack_TM1650(void);
    void IIC_WrByte_TM1650(uint8_t txd);
    
    //u8 Scan_Key(void);
    void TM1650_Set(u8 add,u8 dat);
    void Init_Tm1650(void);
    
    #endif

     

    以下为.c文件:

    #include "TM1650_I2C.h"
    
    //--------------------------------------------------------------
    // Prototype      : void IIC_Init_TM1650(void)
    // Calls          : 
    // Description    : 
    //--------------------------------------------------------------
    void IIC_Init_TM1650(void)
    {
       SET_SCL_OUT_TM1650();
       SET_SDA_OUT_TM1650(); 
       SCL_TM1650  = 1;
       SDA_TM1650  = 1;
    }
    //--------------------------------------------------------------
    // Prototype      : void Delay_us(void)
    // Description    : 大约延时 z us
    //--------------------------------------------------------------
    void TDelay_us(u8 z)
    {
       //u8 i;                   //fcpu 8MHz 时
       //for (i=50; i>0; i--);
    	while(z--)
      {
        nop();nop();nop();nop();
      }
    }
    //--------------------------------------------------------------
    // Prototype      : void I2C_Start(void)
    // Calls          : Delay_5us()
    // Description    : Start Singnal
    //--------------------------------------------------------------
    void I2C_Start_TM1650(void)
    {
        // SDA 1->0 while SCL High
      	//SCL高电平期间,SDA出现一个下降沿表示起始信号
      	SET_SDA_OUT_TM1650();
        SDA_TM1650 = 1;    	//数据线先保持为高,起始信号要该口的下降沿 
    	TDelay_us(4);
        SCL_TM1650 = 1;        //时钟线保持为高            
        TDelay_us(40);    //有一个大概5us的延时具体以器件而定            
        SDA_TM1650 = 0;        //数据线拉低出现下降沿           
        TDelay_us(4);    //延时 一小会,保证可靠的下降沿            
        SCL_TM1650 = 0;        //拉低时钟线,保证接下来数据线允许改变            
    }
    
    
    //--------------------------------------------------------------
    // Prototype      : void I2C_Stop(void)
    // Calls          : Delay_5us()
    // Description    : Stop Singnal
    //-------------------------------------------------------------- 
    void I2C_Stop_TM1650(void)
    {
        // SDA 0->1 while SCL High
        //SCL高电平期间,SDA产生一个上升沿 表示停止
      	SET_SDA_OUT_TM1650();
    	SCL_TM1650 = 0;
    	TDelay_us(2);
    	SDA_TM1650 = 0;		//保证数据线为低电平
    	TDelay_us(40);
        SCL_TM1650 = 1;		//先保证时钟线为高电平
        TDelay_us(10);    //延时 以得到一个可靠的电平信号            
        SDA_TM1650 = 1;        //数据线出现上升沿           
        TDelay_us(40);    //延时 保证一个可靠的高电平           
    }
    
    
    //应答函数
    void IIC_Ack_TM1650(void)
    {
        //数据线一直保持为低电平,时钟线出现上升沿即为应答
    
    	SET_SDA_OUT_TM1650();
    	TDelay_us(10);
        SDA_TM1650 = 0;
        TDelay_us(10);
        SCL_TM1650 = 0;
        TDelay_us(40);
    	SCL_TM1650 = 1;
    	TDelay_us(40);
        //应答完成后 将时钟线拉低 允许数据修改
        SCL_TM1650 = 0;
    }
    //非应答
    void IIC_NAck_TM1650(void)
    {
        //非应答即相反 与应答区别即为数据线保持高电平即可
    	SET_SDA_OUT_TM1650();
    	TDelay_us(10);
        SDA_TM1650 = 1;
        TDelay_us(10);
    	SCL_TM1650 = 0;
    	TDelay_us(40);
        SCL_TM1650 = 1;
        TDelay_us(40);
        //最后要将时钟线拉低 允许数据变化
        SCL_TM1650 = 0;
    }
    //等待应答
    uint8_t IIC_Wait_Ack_TM1650(void)//0为有应答,1为无应答
    {
        //应答等待计数
        uint8_t ackTime = 0;
        //先将数据线要设置成输入模式本程序未体现,有应答则会出现下降沿
    	SCL_TM1650 = 0;
    	SET_SDA_OUT_TM1650();
        TDelay_us(10);	
    	SDA_TM1650 = 1;//
    	TDelay_us(30);
    	SET_SDA_IN_TM1650();//切换为输入模式
    	
        //时钟线拉高
        SCL_TM1650 = 1;
        TDelay_us(30);
        //等待数据线拉低应答
        while(SDAM_TM1650){
            //如果在该时间内仍未拉低
            ackTime ++;
            if(ackTime > 250)
            {
                //认为非应答 停止信号
                I2C_Stop_TM1650();
                return 1;
            }
        }
        SCL_TM1650 = 0;
        return 0 ;
    }
    
    void IIC_WrByte_TM1650(uint8_t txd)
    {
        //定义一个计数变量
        uint8_t i;
    	SET_SDA_OUT_TM1650();
        //将时钟线拉低允许数据改变
    //    SCL = 0;
        //按位发送数据
        for(i = 0;i < 8; i ++)
        {
    	  	TDelay_us(2);
            if((txd&0x80)>>7) //0x80  1000 0000
    			SDA_TM1650=1;
    		else
    			SDA_TM1650=0;
            txd<<=1; 	  
    		TDelay_us(20);   
    		SCL_TM1650=1;
    		TDelay_us(20);  
    		SCL_TM1650=0;	
    		TDelay_us(20); 
        }
    }
    
    /***************************
    u8 Scan_Key(void)	  //按键扫描
    {
    	u8 i;
    	u8 rekey;
    	I2C_Start_TM1650();
    	IIC_WrByte_TM1650(0x49);//读按键命令
    	IIC_Ack_TM1650();
    	//DIO_H;
    	SET_SDA_IN_TM1650();//切换为输入模式
    	for(i=0;i<8;i++)
    	{
    	   SCL_TM1650=1;
    	   rekey = rekey<<1;
    	   
    	   if(SDAM_TM1650)
    	   {
    	   	rekey++;
    	   } 
    	   TDelay_us(5);
    	   SCL_TM1650=0;	
    	}
    	IIC_Ack_TM1650();
    	I2C_Stop_TM1650();
    	return(rekey);
    }
    ****************************/
    
    void TM1650_Set(u8 add,u8 dat) //数码管显示
    {
    	//写显存必须从高地址开始写
    	I2C_Start_TM1650();
    	IIC_WrByte_TM1650(add); //第一个显存地址
    	IIC_Ack_TM1650();
    	IIC_WrByte_TM1650(dat);
    	IIC_Ack_TM1650();
    	I2C_Stop_TM1650();
    }
    void Init_Tm1650(void)
    {
    	IIC_Init_TM1650();
    	delay_ms(50);			//需要延时一小段时间,否则开显示会无响应
    	TM1650_Set(0x48,0x31);//初始化为5级灰度,开显示
    	
    }
    
    
    
    
    
    
    

    注意:TM1650芯片启动可能需要一点时间,故发送开显示前应延时一小段时间,否则会收不到。


    20200420更新:发现新版TM1650芯片按键部分遇到问题。

    解决方法:新版本的晶圆有些因为方案设计会导致芯片振荡器打不开 所以要调一下指令。

     

     

    展开全文
  • Arduino环境使用TM1638扩展版

    千次阅读 2020-05-15 18:09:05
    TM1638深圳天微生产的一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动、键盘扫描等电路。使用TM1638的显式模块在市场上非常多,价格也很便宜。某宝10元左右...
  • TM035KDH03_V1.1

    2011-11-10 16:39:41
    TM035KDH03_V1.1.pd 3.5寸数字屏
  • 基于STM32F407的实时时钟程序,采用DS1302实时时钟模块和TM1637四位数码管,可用通过按键修改时间。已编写DS1302和TM1637模块的驱动程序,移植直接在宏定义中修改接口即可。 STM32F103程序另见主页。
  • 海能达-好易通TM-610写频软件,600也可以用,中文版
  • STM32硬件SPI控制TM1638按键数码管LED显示模块 从淘宝买来的,TM1638专门是控制LED的,LED组合起来就可以变成数码管,还有按键,这个我就没管了,不想管了,发这个帖子只是为了记录下经验,待以后会过头来看的时候...
  • TM1640驱动程序

    2021-06-07 22:01:35
    #define TM1640_GPIOPORT GPIOA //定义IO接口 #define TM1640_DIN GPIO_Pin_12 //定义IO接口 #define TM1640_SCLK GPIO_Pin_11 //定义IO接口 #define TM1640_LEDPORT 0xC8 //定义IO接口 void TM1640_Init(void);/...
  • 需要注意的是这个项目的定义并不打算与TI提供的TivaWare包兼容,并且对于CMSIS兼容性提供的TM4C特定的文件没有提供,维护,或由德州仪器或ARM认可。 支持 CMSIS 项目的文件: 处理器外设存储器映射定义头文件( ...
  • 遥感图像分类

    万次阅读 多人点赞 2019-01-28 21:36:02
    案例:数据源为ENVI自带的Landsat tm5数据Can-tmr.img,类别为:林地、草地/灌木、耕地、裸地、沙地、其它六类。 下面就分别用监督分类与非监督分类法次此案例进行简单分析。 首先我们来了解一下什么是监督分类? ...
  • MD-TM_工具-源码

    2021-02-24 05:52:41
    计算两个跨膜螺旋原子之间定义的截止距离的所有距离用来确定临界值以便随后建立联系图 计算轨迹上发现的每个残基对的频率用于建立联系方式 要求 运行脚本必须使用Python> = 3.6。 该脚本是用Python 3编写的,需要...
  • 基于STM32的四位TM1637完整程序

    千次阅读 热门讨论 2019-01-26 22:49:06
    TM1637四位数码管 累I2C通信 基于STM32单片机 有注释

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,132
精华内容 26,052
关键字:

tm定义