谁玩1602比较溜的?
时间:10-02
整理:3721RD
点击:
想做一个计算器,想请教一下一个指令,,就是如果按错了,需要把那个符号给清了,是哪个指令?
就是先让指针回到那个位置,再然后写什么指令?
就是先让指针回到那个位置,再然后写什么指令?
写一个空格,比如让0x80处的地址数据清掉
if()
{
write_cmd(0x80);
write_dat(' ');
}
先读状态,读出当前光标位置,在按照LS方法做。
读状态:输入:RL=L,RW=H,E=H,D0~D6就是读出的状态字即当前数据地址指针的值,
你看一下这个程序
- /*1602 实现覆盖显示*/
- #include<reg52.h>
- unsigned char add; //定义一个变量,用于接收当前指针的地址
- sbit en=P3^4;
- sbit rs=P3^5;
- sbit rw=P3^6; //1602控制端定义
- void init();
- void delay(unsigned char time) ; //延迟函数声明
- void wrdata(char dat); //写数据函数声明
- void wrcom(char dat); //写命令函数声明
- void rest(); //读状态函数声明
- void main()
- {
- init();
- wrcom(0x80+0x05); //初始化后设定任意点显示一个字符
- wrdata('1');
- delay(500);
- rest(); //开始读状态
- add=add|0x10;
- add=add-0x80; //因为状态字只有7位,读取之后要在最高位补1,
- //1602RAM地址开始为0x80,所以最高位为1
- wrcom(0x80+add); // 重新设定指针
- wrdata('2'); //覆盖以前数据
- while(1);
- }
- /*初始化函数*/
- void init()
- {
- en=0;
- wrcom(0x38);
- wrcom(0x0e);
- wrcom(0x06);
- }
- /*写数据函数*/
- void wrdata(char dat)
- {
- rs=1;
- rw=0;
- P0=dat;
- delay(5);
- en=1;
- delay(5);
- en=0;
- }
- /*写指令函数*/
- void wrcom(char com)
- {
- rs=0;
- rw=0;
- P0=com;
- delay(5);
- en=1;
- delay(5);
- en=0;
- }
- /*读状态函数*/
- void rest()
- {
- rs=0;
- rw=1;
- delay(5);
- en=1;
- add=P0; //将地址指针赋给add,用于后续操作
- delay(5);
- en=0;
- }
- /*延时函数*/
- void delay(unsigned char time)
- {
- unsigned int i;
- for(;time>0;time--)
- for(i=110;i>0;i--);
- }