打印
[学习资料]

printf语句输出到lcd1602

[复制链接]
307|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juliestephen|  楼主 | 2023-5-17 08:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


#include<reg52.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char

sbit lcd_rs=P2^0;
sbit lcd_rw=P2^1;
sbit lcd_en=P2^2;
#define lcd_data P0
//------------------------------------------------
void check_busy(void);                                                //判忙
void write_command(uchar com);        //写指令
void write_data(uchar dat);                                //写数据
void LCD_init(void);                                                        //初始化
void weizhi(uchar line,uchar col);                //光标定位--参数  行(1-2)、列(0-15)
char putchar(char c);                                                        //重写putchar,用于printf调用
//-----------------------------------------------
void check_busy(void)
{ do                                                                //do循环,最少执行一次。
    {
                lcd_data =0x80;                //BF置1,假设 忙
                lcd_en=0;
                lcd_rs=0;
                lcd_rw = 1;
                lcd_en = 1;                          //读状态字
                lcd_en = 1;                                //脉冲展宽 ,手册上对lcd_e宽度有要求。
    } while(lcd_data & 0x80);  //读端口看BF是1吗,是1 则继续循环。
   lcd_en = 0;
}
//----
void write_command(uchar com)
{
        check_busy();
        lcd_en = 0;
        lcd_rs= 0;
        lcd_rw = 0;
        lcd_data = com;
        lcd_en= 1;
        lcd_en= 1;
        lcd_en= 0;
}

// Write Data
void write_data(uchar dat)
{
         check_busy();
        lcd_en= 0;
        lcd_rs = 1;
        lcd_rw = 0;
        lcd_data = dat;
        lcd_en= 1;
        lcd_en= 1;       
   lcd_en= 0;
}
// Initialize LCD controller
void LCD_init(void)
{ write_command(0x38); // 8-bits, 2 lines, 7x5 dots
   write_command(0x0C); // no cursor, no blink, enable display
   write_command(0x06); // auto-increment on
   write_command(0x01); // clear screen
}
//----
void weizhi(uchar line,uchar col)
{
        if(line<2)
        {
                write_command(0x80+col);
        }
        else
        {
                write_command(0xc0+col);
        }
}
char putchar(char c)                //重写putchar以输出到1602
{
        write_data(c);
        return(c);
}

void main()
{
        uint a=2+3;
        LCD_init();
        weizhi(1,0);
        printf("the sp of printf");        //调用printf 通过putchar来输出字符串
        weizhi(2,0);
        printf("2+3=%d",a);                        //printf的优点在于可以格式化输出
        while(1)
        {
                ;
        }
}




使用特权

评论回复
沙发
mollylawrence| | 2023-6-10 17:47 | 只看该作者
C语言如何让printf在屏幕指定位置输出数据?

使用特权

评论回复
板凳
maudlu| | 2023-6-13 22:11 | 只看该作者
将printf函数输出重定向到lcd1602。

使用特权

评论回复
地板
ingramward| | 2023-6-13 22:21 | 只看该作者
可以通过重定向printf函数的输出流来实现将输出内容发送到LCD1602的功能

使用特权

评论回复
5
uytyu| | 2023-6-13 23:02 | 只看该作者
需要直接用lcd1602printf一些字符应该如何调用函数并使用呢?

使用特权

评论回复
6
loutin| | 2023-6-13 23:28 | 只看该作者
在使用printf函数输出内容时,需要特别留意输出的长度和格式

使用特权

评论回复
7
51xlf| | 2023-6-14 09:28 | 只看该作者
在单片机中使用 printf 函数需要占用大量的程序存储空间和数据存储空间

使用特权

评论回复
8
averyleigh| | 2023-6-14 10:33 | 只看该作者
怎么用printf输出2个字节的十六进制数

使用特权

评论回复
9
caigang13| | 2023-7-6 19:30 | 只看该作者
你可以直接调用格式化函数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

1073

帖子

2

粉丝