楼主: 陈克雄

单片机C语言模块化编程方法

  [复制链接]
  • TA的每日心情
    奋斗
    2023-9-15 06:28
  • 签到天数: 3747 天

    连续签到: 60 天

    [LV.Master]伴坛终老

    发表于 2012-10-17 09:08:09 | 显示全部楼层
    分享到:
    不错,学习一下,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-15 06:28
  • 签到天数: 3747 天

    连续签到: 60 天

    [LV.Master]伴坛终老

    发表于 2012-10-17 09:31:43 | 显示全部楼层
    请教 sprintf()怎么用法
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-26 01:52
  • 签到天数: 120 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2012-10-17 10:16:41 | 显示全部楼层
    dwwzl 发表于 2012-10-17 09:31
    请教 sprintf()怎么用法

    类似于printf,不过printf是直接输出,而sprintf可以将处理后的结果存到一个指定地址
    比如:
    int num=26;
    char table[20];
    sprintf(table, "The num equals %d", num);
    printf(table);
    //Output: The num equals 26

    如果自己为液晶屏编写类似格式转换输出、浮点输出的程序,调用这个很方便的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-15 06:28
  • 签到天数: 3747 天

    连续签到: 60 天

    [LV.Master]伴坛终老

    发表于 2012-10-17 10:24:20 | 显示全部楼层
    谢谢,有点明白了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-15 06:28
  • 签到天数: 3747 天

    连续签到: 60 天

    [LV.Master]伴坛终老

    发表于 2012-10-17 10:24:41 | 显示全部楼层
    不过从sprintf(table, "The num equals %d", num);这一句,怎么会显示到显示屏上去呢?比如我用的lcd12864,要显示在第3行 起始空两格的位置?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-26 01:52
  • 签到天数: 120 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2012-10-17 10:44:53 | 显示全部楼层
    本帖最后由 Kite 于 2012-10-17 10:45 编辑
    dwwzl 发表于 2012-10-17 10:24
    不过从sprintf(table, "The num equals %d", num);这一句,怎么会显示到显示屏上去呢?比如我用的lcd12864 ...

    最简单的液晶输出就像下面这样的(包含两个部分)

    LCD_Set_XY(x, y);                   //设定显示位置
    LCD_Write_Data(table);             //输出字符串

    经过封装之后可以得到的函数:
    LCD_Printf(unsigned char x, unsigned char y, unsigne char *s)
    {
          LCD_Set_XY(x, y);
          LCD_Write_Data(s);
    }
    这样就是普通的输出。

    再加一个sprintf的话可以完成浮点输出:输入一个浮点数,显示在相应位置
    LCD_Printf_float(unsigned char x, unsigned char y, float f_num)
    {
          unsigned char table;
          sprintf(table, "The number equals %.2f", f_num);   //保留小数点后两位并插入字符串
          
          LCD_Set_XY(x, y);
          LCD_Write_Data(table);                 //液晶写数据
    }

    这样调用的时候就可以直接输入一个浮点数,比如:

    LCD_Printf_float(3, 2, 24.32);

    那么就会在第3行第2列的位置输出:The number equals 24.32
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-26 01:52
  • 签到天数: 120 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2012-10-17 10:55:28 | 显示全部楼层
    dwwzl 发表于 2012-10-17 10:24
    不过从sprintf(table, "The num equals %d", num);这一句,怎么会显示到显示屏上去呢?比如我用的lcd12864 ...

    如果对效率要求比较高的话,更好的办法是自己根据需求编写一个类似的格式转换的函数(把输入的数按十进制位权分离成独立位,然后分别转换成char型,即减去48)。

    自己编写比调用标准库效率要高很多,不过没有那么灵活
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-15 06:28
  • 签到天数: 3747 天

    连续签到: 60 天

    [LV.Master]伴坛终老

    发表于 2012-10-17 10:55:30 | 显示全部楼层
    感谢,看来底层函数还是要自个来移植的,
    不知有没有做好的STM的库函数可以直接调用呢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-15 06:28
  • 签到天数: 3747 天

    连续签到: 60 天

    [LV.Master]伴坛终老

    发表于 2012-10-17 10:58:31 | 显示全部楼层
    我试着改写一下,受教了,谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-26 01:52
  • 签到天数: 120 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2012-10-17 11:05:25 | 显示全部楼层
    dwwzl 发表于 2012-10-17 10:55
    感谢,看来底层函数还是要自个来移植的,
    不知有没有做好的STM的库函数可以直接调用呢 ...

    STM的库函数可以帮助快速搭建工程,不过一些非标准件的驱动还得自己写,官方不提供例程。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 09:34 , Processed in 0.188507 second(s), 30 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.