物联网技术
直播中

万物死

8年用户 1314经验值
擅长:MEMS/传感技术
私信 关注
[问答]

怎么实现宠物自动喂食器的设计?

怎么实现宠物自动喂食器的设计?

回帖(1)

范志坚

2021-6-16 12:09:23
   LCD子程序设计
       本部分主要是编写LCD的写控制指令和写显示指令的功能函数编写,结合并行模式下的时序功能图,控制寄存器选择端和寄存器控制端的高低电平置位实现。
       12864并行连接时序图如图1所示:


  图1 并行写指令/数据时序图
       如图2所示,在写数据时序时,寄存器选择脚根据RS脚置1和清0的状态分别选择指令寄存器和数据寄存器,R/W置0进行指令或数据的写入,最后使能端触发下降沿,完成指令或数据的写入。


图2  并行读数据时序图
       在读数据时序时,寄存器选择脚根据RS脚置1和清0的状态分别选择指令寄存器和数据寄存器,R/W置1进行指令或数据的读取,最后使能端触发下降沿,完成指令或数据的读取。
      12864基本指令说明
表1 清除显示指令表


RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
代码

0

0

0

0

0

0

0

0

0

1

        功能:将 DDRAM 填满 "20H"(space code),并且设定 DDRAM 的地址计数器(AC)到"00H"。
        指令:  RS=1,RW=1,DB=01H;
表2 DDRAM地址指令表


RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
代码

0

0

1

AC6

AC5

AC4

AC3

AC2

AC1

AC0

       第一行AC 范围为80H~87H;
       第二行AC 范围为90H~97H;
       第三行AC 范围为88H~8FH;
       第四行AC 范围为98H~9FH;
       指令:汉字的起始地址必须是X0H和偶数,字符显示时,每一行最多显示16个ASCII字符或8个汉字。设置行数(X为80H、90H、88H、98H),设置列数(Y为0~7)。
RS=0,RW=0,DB=X+Y ;  // 设定第X对应的行,第Y+1列
表3 写数据指令表


RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
代码

1

0

D7

D6

D5

D4

D3

D2

D1

D0

       功能:写入数据到内部的 RAM 当写入后会使(AC)改变每个RAM地址(CGRAM,DDRAM,IRAM…..)都可连续写入两个字节的数据(2-Bytes),当写入第二字节时位址计数器(AC)的值就会自动加1。
表4 读取数据指令表


RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
代码

1

1

D7

D6

D5

D4

D3

D2

D1

D0

       功能:从内部的 RAM 读取数据,当读取后会使 (AC) 改变。当下设定地址指令后 (CGRAM,DDRAM,IRAM…),若要读取数据时需先虚读(Dummy Read)一次才会读取到正确数据。第二次读取时则不需虚读(DUMMY READ),除非又下设定地址指令才需再次虚读(DUMMY READ)。
       液晶显示的实现分为两部分,一个是液晶初始化函数,另一个是液晶显示函数,液晶初始化函数由主程序在上电初始化时调用。根据数据手册查询可知,写指令0x30可以设定基本指令集,在此基础上写入指令0x0C显示开关光标,最后写入0x01清除掉屏幕显示完成对屏幕的初始化,初始化流程图如图3所示。


图3  液晶显示初始化流程图
       液晶显示函数的功能是将设定好的显示内容显示到液晶屏幕上,在主程序中各个地方被调用以实现屏幕内容的变更。写入控制指令(X+Y)设定显示的具体位置,其中当X的值为“0x80“、“0x90”、“0x88”、“0x98”时对应液晶的第一、二、三、四行,当Y值为0-7时对应屏幕的列,根据控制X和Y来控制显示数据的首地址。接着通过对RS置1、对RW置0,对P0口发送显示的数据,对EN发送一个脉冲信号实现写显示数据操作,程序流程图如图4所示。


图4  液晶写显示函数流程图
举报

更多回帖

发帖
×
20
完善资料,
赚取积分