找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1050|回复: 1
收起左侧

51单片机1602按键松手,光标不显示,怎么回事?

[复制链接]
ID:746099 发表于 2020-5-18 11:44 | 显示全部楼层 |阅读模式
#include<reg52.h>
#define  uint  unsigned  int
#define  uchar unsigned  char
sbit  beep=P2^3;
sbit  lcdrs=P3^5;
sbit  lcden=P3^4;
sbit   wela=P2^7;
sbit   dula=P2^6;
sbit   key0=P3^0;
sbit   key1=P3^1;
sbit   key2=P3^2;
sbit   rd=P3^7;
uchar  shi,fe,miao,t0,j,num,num1,temp;
uchar  code  table[]={"0123456789"};
uchar  code  table1[]={"Welcome!"};
void delayms(uint  xms)
    {
  uint  i,j;
  for(i=xms;i>0;i--)
    for(j=110;j>0;j--);
        }


void  di()       
  {
  beep=0;
  delayms(30);
  beep=1;
  }         
void  write_com(uchar com)
  {
  lcdrs=0;
  lcden=0;
  P0=com;
  lcden=1;
  delayms(5);
  lcden=0;
  }
void  write_date(uchar date)
   {
  lcdrs=1;
   lcden=0;
   P0=date;
   lcden=1;
   delayms(5);
   lcden=0;
   }
void  init()
     {
         rd=0;
     TMOD=0x01;
         TH0=(65536-50000)/256;
         TL0=(65536-50000)%256;
         ET0=1;
         TR0=1;
         EA=1;
         shi=0;
         fe=0;
         miao=0;
         wela=0;
         dula=0;
         write_com(0x38);
         delayms(1);
         write_com(0x0c);
         delayms(1);
         write_com(0x06);
         delayms(1);
         write_com(0x01);
}
void  display()
    {
  write_com(0x80);
  for(j=0;j<8;j++)
    {
  write_date(table1[j]);
    }
    delayms(2);
  write_com(0x80+0x45);
  for(j=0;j<1;j++)
    {
  write_date(table[shi/10]);
    }
    delayms(2);
  write_com(0x80+0x46);
  for(j=0;j<1;j++)
   {
  write_date(table[shi%10]);
   }
  delayms(2);
  write_com(0x80+0x47);
  for(j=0;j<1;j++)
  {
  write_date(':');
  }
  delayms(2);
   write_com(0x80+0x48);
  for(j=0;j<1;j++)
  {
  write_date(table[fe/10]);
  }
  delayms(2);
  write_com(0x80+0x49);
  for(j=0;j<1;j++)
  {
  write_date(table[fe%10]);
  }
  delayms(2);
  write_com(0x80+0x4a);
  for(j=0;j<1;j++)
  {
  write_date(':');
  }
  delayms(2);
  write_com(0x80+0x4b);
  for(j=0;j<1;j++)
  {
  write_date(table[miao/10]);
  }
  delayms(2);
  write_com(0x80+0x4c);
  for(j=0;j<1;j++)
  {
  write_date(table[miao%10]);
  }
  delayms(2);
  }
void  keysan()
{
        rd=0;
        if(key0==0)
           {
                   delayms(10);
                   if(key0==0)
                             {
                                          TR0=0;
                                          while(!key0);
                                          write_com(0x80+0x10);
                                          write_com(0xf0);
                                          di();
                                         }
                                         }
                                         }


                                                         
void  main()
         {
   init();
   while(1)
         {
   display();
   keysan();

         }
         }
void  T0_time()  interrupt  1
  {
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  t0++;
  if(t0==20)
     {
  t0=0;
  miao++;
  if(miao==60)
      {
  miao=0;
  fe++;
  if(fe==60)
    {
  fe=0;
  shi++;
    {
  if(shi==24)
  shi=0;
  }
  }
  }
  }
  }


回复

使用道具 举报

ID:584814 发表于 2020-5-22 10:11 | 显示全部楼层
看不懂你讲啥,对没注释的程序没兴趣,以下百度来的供参考:
屏幕开关、光标开关、闪烁开关。
08H、09H、0AH、0BH:关闭显示屏,实质上是不把DDRAM中的内容对应显示在屏幕上,对DDRAM的操作还是在进行的,执行这条指令,接着对 DDRAM进行写入,屏幕上没有任何内容,但是接着执行下面的某条指令,就能看到刚才屏幕关闭期间,对DDRAM操作的效果了。
0cH:打开显示屏,不显示光标,光标所在位置的字符不闪烁。
0dH:打开显示屏,不显示光标,光标所在位置的字符闪烁。
0eH:打开显示屏,显示光标,光标所在位置的字符不闪烁。
0fH:打开显示屏,显示光标,光标所在位置的字符闪烁。
关于光标的位置:光标所在的位置指示了下一个被写入的字符所处的位置,加入在写入下一个字符前没有通过指令设置DDRAM的地址,那么这个字符就应该显示在光标指定的地方。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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