[资料分享与下载] YL-KL26开发资料+IAR编译器+库函数学习

[复制链接]
 楼主| DreamofOven 发表于 2015-11-21 18:46 | 显示全部楼层 |阅读模式
I2C—AT24C02模块
看下程序发现山外的居然没有I2C好吧,那就仿照加速度传感器自己写个吧!

看一下24C02的地址:

地址:   MSB  0101         LSB 0 A2 A1 A0  

由于我们用的AT24C02 只有两个存储扇区  
           地址可取:   0x50  第一扇区    0x51第二扇区
  1. /*******************************    噬猎者编写    *******************************
  2. //这是AT24C02的程序:
  3. 包括:
  4. AT24C02_init()
  5. AT24C02_WriteByte(Addr,Data)  //写入一个字节
  6. AT24C02_ReadByte(Addr)              //读取一个地址的值
  7. Addr 0-255
  8. Data 数据


  9. *******************************************************************************/



  10. #ifndef _VCAN_24C02_H_
  11. #define _VCAN_24C02_H_

  12. #define AT24C02_I2C_ADDRESS                         0x50        //        AT24C02的地址
  13. #define AT24C02_PageSize                            8                //         AT24C02每页有8个字节


  14. #define AT24C02_init()                              i2c_init(I2C0, 50 * 1000); //频率为50K

  15. #define AT24C02_WriteByte(Addr,Data)                i2c_write_reg(I2C0,AT24C02_I2C_ADDRESS,Addr,Data)    //读取地址里的内容
  16. #define AT24C02_ReadByte(Addr)                      i2c_read_reg(I2C0,AT24C02_I2C_ADDRESS,Addr)          //从地址读取内容

  17. #endif  //_AT24C02_H_
  1. //AT24C02

  2. #include "VCAN_24C02.h"


 楼主| DreamofOven 发表于 2015-11-21 18:47 | 显示全部楼层
我只用了宏定义,所以.c文件是空的

这是我的程序,供大家参考:

6.I2C.zip

1.61 MB, 下载次数: 0

 楼主| DreamofOven 发表于 2015-11-21 18:49 | 显示全部楼层
ADC模块

对于ADC库没什么好讲的,山外的库写的很完善只需要会用这几个就可以了
  1. /***************************   ADC学习   ***************************************
  2. extern void     adc_init    (ADCn_Ch_e);                //ADC初始化
  3. extern uint16   adc_once    (ADCn_Ch_e, ADC_nbit);      //采集一次一路模拟量的AD值
  4.         ADCn_Ch_e//ADC通道
  5.         ADC_nbit//n = 8,12,16

  6. extern void     adc_stop    (ADCn_e);                   //停止ADC转换

  7. *******************************************************************************/

这是我写的printf_float()函数,方便串口检测电压
  1. void printf_float(float data)  //     printf_float(-30.00102);
  2. {
  3.   char k[10],ch[20];
  4.   char s[10]={'0','1','2','3','4','5','6','7','8','9'};
  5.   int        i=0,j=1;
  6.   long   data0;
  7.   data0 = data;
  8.   data -= data0;
  9.   if(data0<0)
  10.   {
  11.     ch[i++] = '-';
  12.     data0 = -data0;
  13.     data = -data;
  14.   }
  15.   do
  16.   {
  17.           k[j++]=s[data0%10];
  18.           data0/=10;
  19.   }while(data0!=0);
  20.   for(j--;j>0;j--)
  21.   {
  22.           ch[i++]=k[j];
  23.   }
  24.   data0=data*10000+0.5;//保留四位小数
  25.   if(data0!=0)
  26.   {
  27.           ch[i++]='.';
  28.         j=1;
  29.         for(j=1;j<=4;j++)
  30.           {
  31.                   k[j]=s[data0%10];
  32.                   data0/=10;
  33.           }
  34.           for(j=4;j>0;j--)
  35.           {
  36.                   ch[i++]=k[j];
  37.           }
  38.   }
  39.   ch[i++] = '\0';
  40.   printf("%s",ch);
  41. }
 楼主| DreamofOven 发表于 2015-11-21 18:49 | 显示全部楼层
ADC的程序

5.ADC.zip

1.7 MB, 下载次数: 0

 楼主| DreamofOven 发表于 2015-11-21 18:50 | 显示全部楼层
GPIO模块
  1. /********************该程序是由噬猎者编写************************************/
  2. void main()
  3. {
  4.           int i=2;//更改i切换不同模式
  5.         int data=0;
  6.         DisableInterrupts; //关闭中断使能
  7.         gpio_init(PTB18,GPO,1);//IO口初始化
  8.         
  9.         
  10.         while(1)
  11.         {
  12.           switch(i)
  13.           {
  14.                   case 0:
  15.                           GPIO_TURN(PTB18);
  16.                         DELAY_MS(500);
  17.                         break;
  18.                   case 1:        
  19.                               PTB18_OUT=1;
  20.                           DELAY_MS(500);
  21.                         PTB18_OUT=0;
  22.                           DELAY_MS(500);
  23.                         break;
  24.                  case 2:
  25.                         GPIO_SET_NBIT(1,PTB18,1);
  26.                         DELAY_MS(500);
  27.                         GPIO_SET_NBIT(1,PTB18,0);
  28.                         DELAY_MS(500);
  29.                         break;
  30.                   case 3:
  31.                           data = GPIO_GET(PTB18);
  32.                         if(data==0)
  33.                                  PTB18_OUT=1;
  34.                         else
  35.                                   PTB18_OUT=0;
  36.                         DELAY_MS(500);
  37.                         break;
  38.                
  39.           }
  40.                
  41.         }

  42.   
  43. }
  44. /******************************************************************************/



  45. /****************************GPIO学习指南************************************/
  46. /*************************** 编辑:噬猎者 ************************************
  47. 我的喜好,一般不采用函数形式,采用宏定义形式更加迅速,不过这里也指出来很多不得已用函数的。
  48. 【1.gpio_init(PTxn ptxn, uint8_t dir, uint8_t state)//GPIO初始化
  49.         PTx = PTA,PTB,PTC,PTD,PTE//端口名
  50.         n   = 0-31        //管脚号
  51.         dir =    //输入输出配置
  52.                     GPI         = 0,                          //定义管脚输入方向      GPIOx_PDDRn里,0表示输入,1表示输出
  53.                     GPO         = 1,                          //定义管脚输出方向

  54.                     GPI_DOWN    = 0x02,                       //输入下拉              PORTx_PCRn需要PE=1,PS=0
  55.                     GPI_UP      = 0x03,                       //输入上拉              PORTx_PCRn需要PE=1,PS=1
  56.                     GPI_PF      = 0x10,                       //输入,带无源滤波器,滤波范围:10 MHz ~ 30 MHz 。不支持高速接口(>=2MHz)  0b10000           Passive Filter Enable
  57.                     GPI_DOWN_PF = GPI_DOWN | GPI_PF ,         //输入下拉,带无源滤波器
  58.                     GPI_UP_PF   = GPI_UP   | GPI_PF ,         //输入上拉,带无源滤波器

  59.                     GPO_HDS     = 0x41,                        //输出高驱动能力   0b100 0001    High drive strength
  60.                     GPO_SSR     = 0x05,                        //输出慢变化率          0b101    Slow slew rate
  61.                     GPO_HDS_SSR = GPO_HDS | GPO_SSR,           //输出高驱动能力、慢变化率
  62.                 //带滤波器的可用于按键,不过也得消抖
  63.         state = 0,1  //引脚状态(输入的模式填0就可以了)
  64. 例子:gpio_init(PTB19,GPO,1);//PTB19初始化为输出模式,输出高电平。
  65.         
  66. 【2.GPIO_SET(PTxn,data)  //设置引脚状态
  67.         PTx  = PTA,PTB,PTC...//端口名
  68.         n      = 0-31        //管脚号
  69.         x      =  0,1   //引脚电平
  70. 例子:GPIO_SET(PTA18,1);//PTA18输出高电平

  71. 【3.GPIO_TURN(PTxn)        //翻转引脚电平
  72.         PTx  = PTA,PTB,PTC...//端口名
  73.         n      = 0-31        //管脚号
  74. 例子:GPIO_TURN(PTA18);//翻转PTA18引脚电平

  75. 【4.data =  GPIO_GET(PTxn);        //获取引脚电平
  76.         PTx  = PTA,PTB,PTC...//端口名
  77.         n      = 0-31        //管脚号
  78. 例子:data = GPIO_GET(PTA18);//读取PTA18的引脚电平

  79. 【5.对GPIO进行位操作:
  80.         GPIO_SET_NBIT(NBIT,PTxn,data)        //设定n位电平
  81.         GPIO_DDR_NBIT(NBIT,PTxn,ddr)        //设置n位输入输出模式
  82.         GPIO_GET_NBIT(NBIT,PTxn)         //读取n位电平

  83. 【6.GPIO_DDR(PTxn,ddr)        //设置输入输出状态
  84.         ddr = 输入输出配置  


  85. 【7.最常用的IO电平
  86.         PTxn_OUT = 1         PTxn输出高电平
  87.         data = PTxn_IN        读取PTxn输入的电平

  88. ****************************************************************************/






  89. /******************************延时函数*************************************/
  90. /***************************************************************************
  91. VCAN_MK60_conf.h
  92. #if  0
  93. #include "MKL_lptmr.h"//定时器延时
  94. #define     DELAY()         lptmr_delay_ms(500)
  95. #define     DELAY_MS(ms)    lptmr_delay_ms(ms)
  96. #define     DELAY_US(us)    lptmr_delay_us(us)
  97. #elif   0
  98. #include "MKL_pit.h"
  99. #define DELAY()         pit_delay_ms(PIT1,500)
  100. #define DELAY_MS(ms)    pit_delay_ms(PIT1,ms)
  101. #define DELAY_US(us)    pit_delay_us(PIT1,us)
  102. #else
  103. #include "MKL_SysTick.h"//系统时钟
  104. #define DELAY()         systick_delay_ms(500)
  105. #define DELAY_MS(ms)    systick_delay_ms(ms)
  106. #define DELAY_US(us)    systick_delay_us(us)

  107. 也就是说要想更改延时就直接去 VCAN_MK60_conf.h,换一下选择函数即可
  108. DELAY()       //500ms延时
  109. DELAY_MS(ms)  //ms级延时
  110. DELAY_US(us)  //us级延时
  111. ****************************************************************************/
 楼主| DreamofOven 发表于 2015-11-21 18:51 | 显示全部楼层
GPIO的程序在这

1.GPIO.zip

1.7 MB, 下载次数: 0

cowboy2014 发表于 2015-11-22 17:23 | 显示全部楼层
资料可真是够丰富的啊,谢谢分享啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

178

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

27

主题

178

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部