楼主: 噬猎者

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

[复制链接]
  • TA的每日心情
    慵懒
    2017-1-7 14:37
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    2

    主题

    122

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    389
    最后登录
    2017-1-7
    发表于 2015-11-9 16:20:43 | 显示全部楼层
    感谢分享
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-9 19:20:17 | 显示全部楼层
    oo_ee 发表于 2015-11-9 13:32
    不建议楼主,一个帖子分开写
    没有系统连贯性,也不利于评分哦

    不好意思,我这是学到哪写到哪,不过我觉得分版块写挺好的,能不能给个模板参考一下,我没大懂该怎么写
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-9 19:38:12 | 显示全部楼层
    五、按键模块

    对于山外的KEY我也改动不少,由于我们用按键主要是方便使用,没有必要添加一连串的KEY
    这是我所改动的地方
    1.在vcan_key.h即KEY头文件里直接采用宏定义方法(由于我们所用的开发板上有两个按键那就先用两个,将最后一个注释掉)
    1. /******************************噬猎者编辑***********************************/
    2. #ifndef __VCAN_KEY_H__
    3. #define __VCAN_KEY_H__

    4. //配置系统板的KEY硬件
    5. #define KEY0  PTD6_IN
    6. #define KEY1  PTA4_IN
    7. //#define KEY2  PTC17_IN

    8. //定义按键IO口
    9. #define KEY0_IN  PTD6
    10. #define KEY1_IN  PTA4
    11. //#define KEY2_IN  PTC17

    12.           //对应的端口号


    13. // KEY初始化    宏定义   效率高
    14. #define KEY_INIT()             gpio_init(KEY0_IN,GPI,0);   \
    15.                                        gpio_init(KEY1_IN,GPI,0)//;   \
    16.                               //         gpio_init(KEY2_IN,GPI,0)
    17.                
    18.                                                                

    19. //定义延时,方便延时
    20. #include    "MKL_mcg.h"
    21. #define   KEY_DELAY           DELAY()
    22. #define   KEY_DELAY_MS(x)     DELAY_MS(x)
    23. void key();


    24. #endif  //__VCAN_KEY_H__
    复制代码
    2.VCAN_key.c文件中: 只包含key函数,如果还有其他KEY可以从注释掉的里面添加
    不过要注意在.c文件中使用其他文件里面的功能时需要附上其他的.c文件
    1. /************************噬猎者编辑***********************************
    2. //KEY主程序
    3. KEY0 = PTD6

    4. //KEY1 = PTC19

    5. KEY函数:
    6. KEY_INIT();//按键初始化
    7. data = KEY0; //获取按键输入值  
    8. ************************************************************************/
    9. /*
    10. * 包含头文件
    11. */
    12. #include "common.h"
    13. #include "MKL_port.h"
    14. #include "MKL_gpio.h"
    15. #include "VCAN_key.h"
    16. /******************用户的程序头文件*************************************/
    17. #include "VCAN_LED.H"//由于使用LED所以就加上其头文件



    18. void key()
    19. {
    20.   u8 i=0;
    21. //============================   0   ===============================//
    22.   if(0==KEY0)
    23.   {
    24.       KEY_DELAY_MS(10);
    25.       if(0==KEY0)
    26.       {
    27.         LED_TURN(LED0);
    28.        
    29.         i=0;while((0==KEY0)&&(i<50)){i++;KEY_DELAY_MS(10);}
    30.       }
    31.   }
    32. //============================   1   ===============================//
    33.   if(0==KEY1)
    34.   {
    35.       KEY_DELAY_MS(10);
    36.       if(0==KEY1)
    37.       {
    38.         LED_TURN(LED1);
    39.        
    40.         i=0;while((0==KEY1)&&(i<50)){i++;KEY_DELAY_MS(10);}
    41.       }
    42.   }

    43. }




















    44. /********************************噬猎者编辑*******************************
    45. void key()
    46. {
    47.   u8 i=0;
    48. //============================   0   ===============================//
    49.   if(0==KEY0)
    50.   {
    51.       KEY_DELAY_MS(10);
    52.       if(0==KEY0)
    53.       {
    54.         LED_TURN(LED0);
    55.        
    56.         i=0;while((0==KEY0)&&(i<50)){i++;KEY_DELAY_MS(10);}
    57.       }
    58.   }
    59. //============================   1   ===============================//
    60.   if(0==KEY1)
    61.   {
    62.       KEY_DELAY_MS(10);
    63.       if(0==KEY1)
    64.       {
    65.         LED_TURN(LED1);
    66.        
    67.         i=0;while((0==KEY1)&&(i<50)){i++;KEY_DELAY_MS(10);}
    68.       }
    69.   }
    70. //============================   2   ===============================//
    71.   if(0==KEY2)
    72.   {
    73.       KEY_DELAY_MS(10);
    74.       if(0==KEY2)
    75.       {
    76.         LED_TURN(LED2);
    77.        
    78.         i=0;while((0==KEY2)&&(i<50)){i++;KEY_DELAY_MS(10);}
    79.       }
    80.   }
    81. //============================   3   ===============================//
    82.   if(0==KEY3)
    83.   {
    84.       KEY_DELAY_MS(10);
    85.       if(0==KEY3)
    86.       {
    87.         LED_TURN(LED3);
    88.        
    89.         i=0;while((0==KEY3)&&(i<50)){i++;KEY_DELAY_MS(10);}
    90.       }
    91.   }
    92. //============================   4   ===============================//
    93.   if(0==KEY4)
    94.   {
    95.       KEY_DELAY_MS(10);
    96.       if(0==KEY4)
    97.       {

    98.        
    99.         i=0;while((0==KEY4)&&(i<50)){i++;KEY_DELAY_MS(10);}
    100.       }
    101.   }
    102. //============================   5   ===============================//
    103.   if(0==KEY5)
    104.   {
    105.       KEY_DELAY_MS(10);
    106.       if(0==KEY5)
    107.       {

    108.        
    109.         i=0;while((0==KEY5)&&(i<50)){i++;KEY_DELAY_MS(10);}
    110.       }
    111.   }
    112. //============================   6   ===============================///
    113.   if(0==KEY6)
    114.   {
    115.       KEY_DELAY_MS(10);
    116.       if(0==KEY6)
    117.       {
    118.        
    119.        
    120.         i=0;while((0==KEY6)&&(i<50)){i++;KEY_DELAY_MS(10);}
    121.       }
    122.   }
    123. //================================================================//
    124.   if(0==KEY7)
    125.   {
    126.       KEY_DELAY_MS(10);
    127.       if(0==KEY7)
    128.       {
    129.        
    130.        
    131.         i=0;while((0==KEY7)&&(i<50)){i++;KEY_DELAY_MS(10);}
    132.       }
    133.   }
    134. //=================================================================//
    135. }
    136. ***************************************************************************/











    复制代码
    好了,不多说了,大家按照我的提示写吧,我觉得这样使用更加灵活方便,毕竟我们是自己用,不是来做库文件的!
    这是我的程序:(按键控制LED点亮熄灭): 3.KEY.zip (1.69 MB, 下载次数: 11)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-9 21:45:14 | 显示全部楼层
    六、UART模块

    这是我写的UART程序,包含三个部分:

    串口发送例程: 4.UART-1-串口发送例程.zip (1.7 MB, 下载次数: 8)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-10 09:43:48 | 显示全部楼层
    本帖最后由 噬猎者 于 2015-11-10 15:38 编辑

    七、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. }
    复制代码
    好了剩下的看我的程序吧: 5.ADC.zip (1.7 MB, 下载次数: 26)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 2 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-10 15:26:29 | 显示全部楼层
    八、I2C—AT24C02模块
    看下程序发现山外的居然没有I2C好吧,那就仿照加速度传感器自己写个吧!

    看一下24C02的地址:
    1.png
    地址:   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"
    复制代码
    我只用了宏定义,所以.c文件是空的

    这是我的程序,供大家参考: 6.I2C.zip (1.61 MB, 下载次数: 51)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 2 反对 0

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 22:26
  • 签到天数: 2453 天

    连续签到: 9 天

    [LV.Master]伴坛终老

    17

    主题

    5362

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    11299
    最后登录
    2025-7-21
    发表于 2015-11-10 21:56:25 | 显示全部楼层
    学习了,感谢分享!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-1-7 14:37
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    2

    主题

    122

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    389
    最后登录
    2017-1-7
    发表于 2015-11-11 13:34:46 | 显示全部楼层

    谢谢分享谢谢分享谢谢分享
           谢谢分享谢谢分享                       谢谢分享
           谢谢分享谢谢分享                谢谢分享         
                 谢谢分享              谢谢分享谢谢分享谢谢分享
                 谢谢分享              谢谢分享        谢                谢
                 谢谢分享              谢谢分享        谢                谢
                 谢谢分享              谢谢分享        分                分
                 谢谢分享              谢谢分享        享                享
                 谢谢分享              谢谢分享        谢                谢
                 谢谢分享              谢谢分享        谢                谢
    谢        谢谢分享               谢谢分享       分                分
    谢谢     谢谢分享              谢谢分享        享                享
    谢谢分 谢谢分享              谢谢分享        谢                谢
    谢谢分 谢谢分享                               谢       谢
    谢谢分谢谢分享                         谢                 谢
             谢谢谢谢                    分                               分
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-11 16:38:59 | 显示全部楼层
    九、DAC模块
    这几天看了DAC语音播报的帖子,恰好我也在使用DAC,那就顺便写个程序吧,还能加深DAC库函数的理解


    1. /******************************   DAC    **************************************
    2. DAC管脚在#include    "PORT_cfg.h"              //管脚复用配置

    3. extern void dac_init(DACn_e);               //DAC一次转换初始化
    4. extern void dac_out(DACn_e, uint16 val);    //DAC一次转换操作


    5. ******************************************************************************/
    复制代码
    这是我写的程序: 7.DAC.zip (1.67 MB, 下载次数: 5)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2015-11-11 17:29:38 | 显示全部楼层
    本帖最后由 噬猎者 于 2015-11-12 05:09 编辑

    十、PWM模块
    对我们来说,PWM模块是最重要的部分,好了那就做个呼吸灯吧!

    1. /*****************************    PWM学习     **********************************
    2. 我采用宏定义方式进行了PWM的初始化,定时器口配置在 #include    "PORT_cfg.h"              //管脚复用配置
    3. #define PWM_INIT()        tpm_pwm_init(TPM0, TPM_CH1, 10000, 0);        \
    4.                         tpm_pwm_init(TPM2, TPM_CH0, 10000, 0);        \
    5.                         tpm_pwm_init(TPM2, TPM_CH1, 10000, 0)        
    6.                           //初始化PWM设置:PTB18 PTB19 PTD1   10KHZ   
    7. #define PWM1_SET(duty)                tpm_pwm_duty(TPM2, TPM_CH0,duty)        //LED0
    8. #define PWM2_SET(duty)                tpm_pwm_duty(TPM2, TPM_CH1,duty)        //LED1                  
    9. #define PWM3_SET(duty)                tpm_pwm_duty(TPM0, TPM_CH1,duty)        //LED2        
    10.         
    11.                           
    12. *******************************************************************************/
    复制代码

    参考我的程序:     
    8.PWM.zip (1.63 MB, 下载次数: 6)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 06:04 , Processed in 0.105396 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表