STM32 ISL1208编程

发布者:冰雪勇士最新更新时间:2016-01-11 来源: eefocus关键字:STM32  ISL1208编程 手机看文章 扫描二维码
随时随地手机看文章
[html] view plaincopy
 
  1. //ISL1208.h  
  2. #ifndef _ISL1208_H_  
  3. #define _ISL1208_H_  
  4. #include "stm32f10x.h"  
  5.   
  6. typedef struct My_Time  
  7. {  
  8.     u8 _year;  
  9.     u8 _month;  
  10.     u8 _day;  
  11.     u8 _hour;  
  12.     u8 _min;  
  13.     u8 _sec;  
  14.     u8 _week;  
  15. } MY_TIME,*pMY_TIME;  
  16.   
  17. extern MY_TIME sMyTime;  
  18. void ISL128Init(void);  
  19. void SetTime(pMY_TIME _mytime);  
  20. void GetTime(pMY_TIME _mytime);  
  21. void Auto_Time_Set(void);  
  22. #endif //_ISL1208_H_  

 

 

[html] view plaincopy
 
  1. //ISL128.C  
  2. #include "isl1208.h"  
  3. #include "i2c_ee.h"  
  4.   
  5. const u8 *COMPILED_DATE=__DATE__;//获得编译日期  
  6. const u8 *COMPILED_TIME=__TIME__;//获得编译时间  
  7. const u8 Month_Tab[12][3]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};   
  8. u8 const table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正数据表   
  9.   
  10. MY_TIME sMyTime={0x13,0x04,0x13,0x14,0x10,0x05,0x03};  
  11. static int IntToBCD(int i);//十进制转BCD  
  12. static int BCDToInt(int bcd); //BCD转十进制  
  13. static u8 RTC_Get_Week(u16 year,u8 month,u8 day);  
  14.   
  15. int IntToBCD(int i) //十进制转BCD  
  16. {  
  17.     return (((i / 10) << 4) + ((i % 10) & 0x0f));  
  18. }  
  19.   
  20. int BCDToInt(int bcd) //BCD转十进制  
  21. {  
  22.     return (0xff & (bcd >> 4)) * 10 + (0xf & bcd);  
  23. }  
  24.   
  25. //比较两个字符串指定长度的内容是否相等  
  26. //参数:s1,s2要比较的两个字符串;len,比较长度  
  27. //返回值:1,相等;0,不相等  
  28. u8 my_strcmp(u8*s1,u8*s2,u8 len)  
  29. {  
  30.     u8 i;  
  31.     for(i=0;i
  32.     return 1;        
  33. }  
  34.   
  35. void ISL128Init()  
  36. {  
  37.     u8 SR_REG_DATA=0x91;  
  38.     u8 INT_REG_DATA=0xca;  
  39.     EEPROM_ADDRESS=ISL1208_ADDRESS;  
  40.     I2C_EE_ByteWrite(&SR_REG_DATA, 0x07);  
  41.     I2C_EE_ByteWrite(&INT_REG_DATA, 0x08);  
  42. }  
  43. void SetTime(pMY_TIME _mytime)  
  44. {  
  45.     EEPROM_ADDRESS=ISL1208_ADDRESS;  
  46.     I2C_EE_ByteWrite(&_mytime->_sec,  0x00);  
  47.     I2C_EE_ByteWrite(&_mytime->_min,  0x01);  
  48.     I2C_EE_ByteWrite(&_mytime->_hour, 0x02);  
  49.     I2C_EE_ByteWrite(&_mytime->_day,  0x03);  
  50.     I2C_EE_ByteWrite(&_mytime->_month,0x04);  
  51.     I2C_EE_ByteWrite(&_mytime->_year, 0x05);  
  52.     I2C_EE_ByteWrite(&_mytime->_week, 0x06);  
  53. }  
  54. void GetTime(pMY_TIME _mytime)  
  55. {  
  56.     EEPROM_ADDRESS=ISL1208_ADDRESS;  
  57.     I2C_EE_BufferRead(&_mytime->_sec,  0x00,1);  
  58.     I2C_EE_BufferRead(&_mytime->_min,  0x01,1);  
  59.     I2C_EE_BufferRead(&_mytime->_hour, 0x02,1);  
  60.     I2C_EE_BufferRead(&_mytime->_day,  0x03,1);  
  61.     I2C_EE_BufferRead(&_mytime->_month,0x04,1);  
  62.     I2C_EE_BufferRead(&_mytime->_year, 0x05,1);  
  63.     I2C_EE_BufferRead(&_mytime->_week, 0x06,1);  
  64.       
  65.     _mytime->_sec=BCDToInt(_mytime->_sec);  
  66.     _mytime->_min=BCDToInt(_mytime->_min);  
  67.     _mytime->_hour=BCDToInt(_mytime->_hour);  
  68.     _mytime->_day=BCDToInt(_mytime->_day);  
  69.     _mytime->_month=BCDToInt(_mytime->_month);  
  70.     _mytime->_year=BCDToInt(_mytime->_year);  
  71.     _mytime->_week=BCDToInt(_mytime->_week);  
  72. }  
  73.   
  74. void Auto_Time_Set()  
  75. {  
  76.     u8 temp[3];  
  77.     u8 i;  
  78.     u8 mon,date,week;  
  79.     u16 year;  
  80.     u8 sec,min,hour;  
  81.     for(i=0;i<3;i++)temp[i]=COMPILED_DATE[i];     
  82.     for(i=0;i<12;i++)if(my_strcmp((u8*)Month_Tab[i],temp,3))break;     
  83.     mon=i+1;//得到月份  
  84.     if(COMPILED_DATE[4]==' ')date=COMPILED_DATE[5]-'0';   
  85.     else date=10*(COMPILED_DATE[4]-'0')+COMPILED_DATE[5]-'0';    
  86.     year=10*(COMPILED_DATE[9]-'0')+COMPILED_DATE[10]-'0';        
  87.     hour=10*(COMPILED_TIME[0]-'0')+COMPILED_TIME[1]-'0';    
  88.     min=10*(COMPILED_TIME[3]-'0')+COMPILED_TIME[4]-'0';    
  89.     sec=10*(COMPILED_TIME[6]-'0')+COMPILED_TIME[7]-'0';    
  90.     week=RTC_Get_Week(year+2000,mon,date);  
  91.     sMyTime._day=IntToBCD(date);  
  92.     sMyTime._hour=IntToBCD(hour);  
  93.     sMyTime._min=IntToBCD(min);  
  94.     sMyTime._month=IntToBCD(mon);  
  95.     sMyTime._sec=IntToBCD(sec);  
  96.     sMyTime._year=IntToBCD(year);  
  97.     sMyTime._week=IntToBCD(week);  
  98.   
  99.     SetTime(&sMyTime);  
  100. }   
  101.   
  102.   
  103. u8 RTC_Get_Week(u16 year,u8 month,u8 day)  
  104. {     
  105.     u16 temp2;  
  106.     u8 yearH,yearL;  
  107.       
  108.     yearH=year/100; yearL=year%100;   
  109.     // 如果为21世纪,年份数加100    
  110.     if (yearH>19)yearL+=100;  
  111.     // 所过闰年数只算1900年之后的    
  112.     temp2=yearL+yearL/4;  
  113.     temp2=temp2%7;   
  114.     temp2=temp2+day+table_week[month-1];  
  115.     if (yearL%4==0&&month<3)temp2--;  
  116.     return(temp2%7);  
  117. }   

关键字:STM32  ISL1208编程 引用地址:STM32 ISL1208编程

上一篇:KEIL MDK LIB库文件的制作
下一篇:startup_stm32f10x_xx.s 启动代码文件选择

推荐阅读最新更新时间:2024-03-16 14:43

stm32 FSMC-TFTLCD显示
TFTLCD TFT液晶屏常用的通信模式主要有6800模式和8080模式,对于TFT彩屏通常都使用8080并口(简称80并口)模式 8080模式的读写时序其实跟LCD1602或者LCD12864的读写时序是差不多的。8080接口有5条基本的控制线和多条 数据线 , 数据线 的数量主要看液晶屏使用的是几位模式,有8根、9根、16根、18根四种类型 FSMC FSMC模块能够与同步或异步存储器和16位PC存储器卡接口 将AHB传输信号转换到适当的外部设备协议 满足访问外部设备的时序要求 所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一的片选信号加以区分。 FSMC在任一时
[单片机]
<font color='red'>stm32</font> FSMC-TFTLCD显示
STM32串口出现 ORE标志位的问题研究
测试环境,STM32L476, HAL库使用UART的时候,中断标志寄存器出现ORE错误,介绍如下: 代码错误原因: 1. 初始化串口,uart_USB_init();这个函数没有启动中断 2. 延时3000S,其中这个时候电脑有数据每隔50ms发给这个串口。 3. 启动中断接收。 HAL_NVIC_SetPriority(USART_IRQn, 5, 1); HAL_NVIC_EnableIRQ(USART_IRQn); 4. 出现ORE错误。 经过分析,可能2个原因,初始化串口之后,串口接收到数据(没处理),然后开中断又接收数据,所以两次接收中断和非中断处理有区别,也有可能是第一次非中断接收数据未处理。 解决办法:修改
[单片机]
<font color='red'>STM32</font>串口出现 ORE标志位的问题研究
STM32软件运行过程,如何查看全局变量的实时数据
下面是一个单片机STM32RCT6的PA8,PA9,PA10引脚输出PWM波形的仿真步骤,此外还展示了软件运行过程,如何查看全局变量的实时数据。每一步我都做了截图,大家照着一步步来,请大家放心参考! 1.点target图标,如下: 2.选择好单片机芯片的型号:我选的STM32RCT6型号,大家可以根据自己手上stm32开发板的型号来选择 3.外部晶振频率的选择:8Mhz(因为大部分单片机的外部晶振是8Mhz),为了使仿真更贴近实际,通常情况下都是选8Mhz 4.进入Debug页面进行设计,特别要注意第四点parameter,注意选正确好芯片的型号,我的是RC系列,所以写了RC,如果是RB系列,要后面改为RB 5
[单片机]
<font color='red'>STM32</font>软件运行过程,如何查看全局变量的实时数据
keil5中新建一个STM32工程
前言 相信很多stm32的初学者对于创建一个新的工程还是感觉比较困难的,即使学习了一段时间的stm32,创建一个新工程还是会感到无所适从。相信大家在学习stm32之初都是把整个例程工程文件copy下来,在这个基础上进行修改编程的,这样就省掉了很多烦恼。本人自学stm32已经有好久的一段时间了,现在在准备秋招,顺便也把之前学过的内容复习一遍。在整理stm32资料的时候,突然发现之前自己学习stm32的时候不会自己新建一个stm32工程,所以今天趁空闲之余,学习怎么去创建一个新工程,并记录下来跟大家分享。 创建一个stm32工程的步骤 1. 准备资料 大家可以点击一下网址,下载创建工程时所需的固件库: http://downloa
[单片机]
STM32模块化程序】定时器输入捕获实现超声波测距
一、输入捕获介绍 输入捕获模式可以用来测量脉冲宽度或者测量频率。 除了基本定时器,通用和高级均有输入捕获功能。 TIMx_CCMR1(捕获/比较模式寄存器) - 通道1和2的控制 TIMx_CCMR2(捕获/比较模式寄存器) - 通道3和4的控制 以下将分别使用通用定时器和高级定时器实现超声波测距。需要说明的是,代码中的TIM×CH×_CAPTURE_STA我们定义其低八位含义如下: 二、通用/高级定时器实现超声波测距 通用定时器输入捕获以TIM3的CH3为例,对应IO为PB1。PB0实现触发功能 当然还需要配合printf一起使用, 参考这里 完整工程可见github 传送门 timer.c #i
[单片机]
【<font color='red'>STM32</font>模块化程序】定时器输入捕获实现超声波测距
stm32 CubeMx 实现SD卡/sd nand FATFS读写测试
1. 前言 SD卡/SD nand是嵌入式开发中常为使用的大容量存储设备,SD nand虽然当前价格比SD卡高,但胜在价格、封装以及稳定性上有优势,实际操作和SD卡没什么区别。 关于 SD卡/SDnand 的驱动,有了CubeMx之后其实基本上都自动生成了对应的驱动了,基本上把驱动配置一下之后,自己写一些应用就可以完成基本的读写了,同时关于FATFS文件系统,也可以直接采用CubeMx配置,也不用自己移植,因此使用STM32开发这些还是比较爽的!不过使用过程中也有一些坑,自动生成的驱动有时候也还是有一些bug,因此还是需要大家对对应驱动有一定的了解。 本文将主要分享关于使用 CubeMx 配置 stm32 的工程,通过SD
[单片机]
<font color='red'>stm32</font> CubeMx 实现SD卡/sd nand FATFS读写测试
STM32】5—UART串口(中断模式)
0 实验预期效果 完成串口数据的接收和发送 1 相关原理图 2 软件配置 STM32CubeMX配置USART1: 在NVIC中配置USART中断优先级: 3 代码编写 3.1 函数认识 见博客【STM32】HAL库学习 2—hal_uart_kokoのadventure的博客-CSDN博客 3.1.1 串口发送 /** * @brief Sends an amount of data in non blocking mode. * @note When UART parity is not enabled (PCE = 0), and Wo
[单片机]
【<font color='red'>STM32</font>】5—UART串口(中断模式)
STM32 SysTick定时器讲解
STM32 SysTick定时器讲解 本文将介绍SysTick定时器、其工作原理与寄存器、及对应的应用实例 SysTick定时器简介 首先、我们先解释下定时器,“定时器”:能够定时、计数的器件 SysTick称为系统滴答定时器,它位于Cortex 内核中是一个定时器,可以对输入的时钟进行计数、若输入的时钟具有周期性的变化,则计数也相当于计时。 系统滴答定时器一般用于操作系统,为操作系统提供时基、维持操作系统的心跳; 系统滴答定时器每过一段时间会产生一个中断,根据这个特性、操作系统就可以实现时间片的任务调度。 工作原理分析 从上述两张图我们可以看出: 系统滴答定时器的时钟源是从SYSCLK处经过分频得到的,另外它处于内核中
[单片机]
<font color='red'>STM32</font> SysTick定时器讲解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved