找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1596|回复: 10
打印 上一主题 下一主题
收起左侧

不太明白LCD1602的单片机程序 求解释

[复制链接]
跳转到指定楼层
楼主
ID:729709 发表于 2020-6-4 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void Lcd_ram()      
{
        uint i,j,k=0,temp=0x40;
        for(i=0;i<7;i++)
        {
           for(j=0;j<8;j++)
           {
            write_com(temp+j);
            write_date(zifu[k]);
            k++;
           }
           temp=temp+8;
        }
}
大佬们 这段程序是什么意思。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:97554 发表于 2020-6-4 18:04 | 只看该作者
本帖最后由 杨雪飞 于 2020-6-5 08:57 编辑

void Lcd_ram()          //   LCD显示子程序
{
        uint i,j,k=0,temp=0x40;      //定义四个无符号整数变量 i  j  k  temp。temp的起始数值为0x40,后边的write_com(temp+j);就是写完一个字符这个地址加1的意思,也就是往后移一位写写一个字符。

        for(i=0;i<7;i++)    //这个就很简单了吧,i自己加,加到8停止,也就是i的值会依次+1从0到7停止。
        {
           for(j=0;j<8;j++)   //同理,这个j也是从0到8
           {
            write_com(temp+j);    //上边说过了,这个就是往后移一个位置的意思。
            write_date(zifu[k]);     //这个在程序的开头有个定义的名字为zifu的table,[ ] 里边会有N个字符,比如a b c d啥的,这个k就是这N个字符中的第几个的意思,下边的一句k++就是k自己每次+1的意思,这样就会配合上边的语句,把zifu[xxxxxxxxxxx]里的字符一个一个的在屏幕上挨个的显示出来了。
            k++;
           }
           temp=temp+8;      //这个是把上边的写完了之后直接把字符的显示位置的地址直接+8。
        }
}


回复

使用道具 举报

板凳
ID:669432 发表于 2020-6-4 19:43 | 只看该作者
循环看得懂吧,0x40是第二行,意思就是在第二行写入数组zifu[]
回复

使用道具 举报

地板
ID:760179 发表于 2020-6-4 20:04 来自手机 | 只看该作者
把程序都写出来,一段程序不怎么好弄懂
回复

使用道具 举报

5#
ID:155507 发表于 2020-6-5 09:55 | 只看该作者
对1602 的CGRAM 一个自定义字符操作

http://www.51hei.com/bbs/dpj-42528-1.html
回复

使用道具 举报

6#
ID:729709 发表于 2020-6-5 12:36 | 只看该作者
angmall 发表于 2020-6-5 09:55
对1602 的CGRAM 一个自定义字符操作

http://www.51hei.com/bbs/dpj-42528-1.html

好的 谢谢
回复

使用道具 举报

7#
ID:729709 发表于 2020-6-5 12:37 | 只看该作者
回复

使用道具 举报

8#
ID:770266 发表于 2020-6-5 13:08 | 只看该作者
write_com这个函数是什么内容
回复

使用道具 举报

9#
ID:267932 发表于 2020-6-5 13:56 | 只看该作者
太热 发表于 2020-6-5 13:08
write_com这个函数是什么内容

#define LCD_RS(x)  P3DIR &= ~BIT(0);x?(P3 |= BIT(0)) : (P3 &= ~BIT(0))
#define LCD_RW(x)  P1DIR &= ~BIT(3);x?(P1 |= BIT(3)) : (P1 &= ~BIT(3))
#define LCD_EN(x)   P1DIR &= ~BIT(2);x?(P1 |= BIT(2)) : (P1 &= ~BIT(2))
#define LCD_4(x)   P02_set_dir(0);x?(P0 |= BIT(2)) : (P0 &= ~BIT(2))
#define LCD_5(x)   P00_set_dir(0);x?(P0 |= BIT(0)) : (P0 &= ~BIT(0))
#define LCD_6(x)   P01_set_dir(0);x?(P0 |= BIT(1)) : (P0 &= ~BIT(1))
#define LCD_7(x)   P11_set_dir(0);x?(P1 |= BIT(1)) : (P1 &= ~BIT(1))


void write_command(u8 dat)    //写命令
{   
  //uchar dat_half;
        u8 Hdata,Ldata;
    LCD_RS(0);                         //指令 写入
   //RW_CLR;                    //先写入高四位
    LCD_RW(0);
    delay_RWC;
    Hdata=dat&0xf0;                    //è???????
    Ldata=(dat<<4)&0xf0;    //è?μí????
        LCD_4(Hdata&0x10);
        LCD_5(Hdata&0x20);
        LCD_6(Hdata&0x40);
        LCD_7(Hdata&0x80);

       
  delay_Dat;
   LCD_EN(1);
   delay_Eset;
   LCD_EN(0);                        //下降沿,执行指令
   check_busy_ff();

   LCD_RS(0);                         //指令 写入
   LCD_RW(0);
   delay_RWC;
   LCD_4(Ldata&0x10);
   LCD_5(Ldata&0x20);
   LCD_6(Ldata&0x40);
   LCD_7(Ldata&0x80);        //再写入低四位
   delay_Dat;
   LCD_EN(1);
   delay_Eset;
   LCD_EN(0);                        //下降沿,执行指令
   check_busy();
}


我这个是四个数据io, 分两次发,一次高四,一次发低四
回复

使用道具 举报

10#
ID:744327 发表于 2020-6-5 15:17 | 只看该作者
write_com这个函数是向LCD液晶写数据,写子函数。
回复

使用道具 举报

11#
ID:663230 发表于 2020-6-8 21:17 | 只看该作者
write_com 这个是LCD1602写命令函数,见下面函数.
void WriteLcdCom(uchar Com)
{
        rs=0;
        rw=0;
        LcdE=0;
        LcdDat=Com;
        delayms(1);
        LcdE=1;
        delayms(3);
        LcdE=0;

}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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