[学习资料] printf语句输出到lcd1602

[复制链接]
1887|15
 楼主| juliestephen 发表于 2023-5-17 08:00 | 显示全部楼层 |阅读模式


  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. sbit lcd_rs=P2^0;
  6. sbit lcd_rw=P2^1;
  7. sbit lcd_en=P2^2;
  8. #define lcd_data P0
  9. //------------------------------------------------
  10. void check_busy(void);                                                //判忙
  11. void write_command(uchar com);        //写指令
  12. void write_data(uchar dat);                                //写数据
  13. void LCD_init(void);                                                        //初始化
  14. void weizhi(uchar line,uchar col);                //光标定位--参数  行(1-2)、列(0-15)
  15. char putchar(char c);                                                        //重写putchar,用于printf调用
  16. //-----------------------------------------------
  17. void check_busy(void)
  18. { do                                                                //do循环,最少执行一次。
  19.     {
  20.                 lcd_data =0x80;                //BF置1,假设 忙
  21.                 lcd_en=0;
  22.                 lcd_rs=0;
  23.                 lcd_rw = 1;
  24.                 lcd_en = 1;                          //读状态字
  25.                 lcd_en = 1;                                //脉冲展宽 ,手册上对lcd_e宽度有要求。
  26.     } while(lcd_data & 0x80);  //读端口看BF是1吗,是1 则继续循环。
  27.    lcd_en = 0;
  28. }
  29. //----
  30. void write_command(uchar com)
  31. {
  32.         check_busy();
  33.         lcd_en = 0;
  34.         lcd_rs= 0;
  35.         lcd_rw = 0;
  36.         lcd_data = com;
  37.         lcd_en= 1;
  38.         lcd_en= 1;
  39.         lcd_en= 0;
  40. }

  41. // Write Data
  42. void write_data(uchar dat)
  43. {
  44.          check_busy();
  45.         lcd_en= 0;
  46.         lcd_rs = 1;
  47.         lcd_rw = 0;
  48.         lcd_data = dat;
  49.         lcd_en= 1;
  50.         lcd_en= 1;       
  51.    lcd_en= 0;
  52. }
  53. // Initialize LCD controller
  54. void LCD_init(void)
  55. { write_command(0x38); // 8-bits, 2 lines, 7x5 dots
  56.    write_command(0x0C); // no cursor, no blink, enable display
  57.    write_command(0x06); // auto-increment on
  58.    write_command(0x01); // clear screen
  59. }
  60. //----
  61. void weizhi(uchar line,uchar col)
  62. {
  63.         if(line<2)
  64.         {
  65.                 write_command(0x80+col);
  66.         }
  67.         else
  68.         {
  69.                 write_command(0xc0+col);
  70.         }
  71. }
  72. char putchar(char c)                //重写putchar以输出到1602
  73. {
  74.         write_data(c);
  75.         return(c);
  76. }

  77. void main()
  78. {
  79.         uint a=2+3;
  80.         LCD_init();
  81.         weizhi(1,0);
  82.         printf("the sp of printf");        //调用printf 通过putchar来输出字符串
  83.         weizhi(2,0);
  84.         printf("2+3=%d",a);                        //printf的优点在于可以格式化输出
  85.         while(1)
  86.         {
  87.                 ;
  88.         }
  89. }




mollylawrence 发表于 2023-6-10 17:47 | 显示全部楼层
C语言如何让printf在屏幕指定位置输出数据?
maudlu 发表于 2023-6-13 22:11 | 显示全部楼层
将printf函数输出重定向到lcd1602。
ingramward 发表于 2023-6-13 22:21 | 显示全部楼层
可以通过重定向printf函数的输出流来实现将输出内容发送到LCD1602的功能
uytyu 发表于 2023-6-13 23:02 | 显示全部楼层
需要直接用lcd1602printf一些字符应该如何调用函数并使用呢?
loutin 发表于 2023-6-13 23:28 | 显示全部楼层
在使用printf函数输出内容时,需要特别留意输出的长度和格式
51xlf 发表于 2023-6-14 09:28 | 显示全部楼层
在单片机中使用 printf 函数需要占用大量的程序存储空间和数据存储空间
averyleigh 发表于 2023-6-14 10:33 | 显示全部楼层
怎么用printf输出2个字节的十六进制数
caigang13 发表于 2023-7-6 19:30 来自手机 | 显示全部楼层
你可以直接调用格式化函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

1529

帖子

2

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