微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 谁玩1602比较溜的?

谁玩1602比较溜的?

时间:10-02 整理:3721RD 点击:
想做一个计算器,想请教一下一个指令,,就是如果按错了,需要把那个符号给清了,是哪个指令?

就是先让指针回到那个位置,再然后写什么指令?

写一个空格,比如让0x80处的地址数据清掉
if()
{
write_cmd(0x80);
write_dat(' ');
}

先读状态,读出当前光标位置,在按照LS方法做。
读状态:输入:RL=L,RW=H,E=H,D0~D6就是读出的状态字即当前数据地址指针的值,

你看一下这个程序

  1. /*1602 实现覆盖显示*/
  2. #include<reg52.h>
  3. unsigned char add;                                  //定义一个变量,用于接收当前指针的地址
  4. sbit en=P3^4;
  5. sbit rs=P3^5;
  6. sbit rw=P3^6;                                          //1602控制端定义
  7. void init();
  8. void delay(unsigned char time)        ;  //延迟函数声明
  9. void wrdata(char dat);                           //写数据函数声明
  10. void wrcom(char dat);                           //写命令函数声明
  11. void rest();                                                //读状态函数声明

  12. void main()
  13. {
  14.         init();
  15.         wrcom(0x80+0x05);                           //初始化后设定任意点显示一个字符
  16.         wrdata('1');
  17.         delay(500);
  18.         rest();                                                   //开始读状态
  19.         add=add|0x10;
  20.         add=add-0x80;                                   //因为状态字只有7位,读取之后要在最高位补1,
  21.                                        //1602RAM地址开始为0x80,所以最高位为1
  22.         wrcom(0x80+add);                          // 重新设定指针
  23.         wrdata('2');                                  //覆盖以前数据
  24.         while(1);

  25. }
  26. /*初始化函数*/
  27. void init()
  28. {
  29.         en=0;
  30.         wrcom(0x38);
  31.         wrcom(0x0e);
  32.         wrcom(0x06);       
  33. }
  34. /*写数据函数*/
  35. void wrdata(char dat)
  36. {
  37.         rs=1;
  38.         rw=0;
  39.         P0=dat;
  40.         delay(5);
  41.         en=1;
  42.         delay(5);
  43.         en=0;
  44. }
  45. /*写指令函数*/
  46. void wrcom(char com)
  47. {
  48.         rs=0;
  49.         rw=0;
  50.         P0=com;
  51.         delay(5);
  52.         en=1;
  53.         delay(5);
  54.         en=0;
  55. }
  56. /*读状态函数*/
  57. void rest()
  58. {
  59.         rs=0;
  60.         rw=1;
  61.         delay(5);
  62.         en=1;
  63.         add=P0;                                                  //将地址指针赋给add,用于后续操作
  64.         delay(5);
  65.         en=0;

  66. }
  67. /*延时函数*/
  68. void delay(unsigned char time)
  69. {
  70.         unsigned int i;
  71.         for(;time>0;time--)
  72.                 for(i=110;i>0;i--);
  73. }

复制代码

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top