单片机交流
直播中

骨灰级发烧友

13年用户 673经验值
私信 关注
[问答]

基于stc89c51单片机的1602显示屏实验

如何对基于stc89c51单片机的1602显示屏进行实验呢?并显示自己的名字与学号?

回帖(1)

杜亚琼

2021-10-28 10:09:14
  #include 《reg51.h》
  #include 《intrins.h》
  #define uchar unsigned char
  #define uint unsigned int
  #define LcdBus P0
  ***it LED1602_RS=P1^0; //LCD端口定义
  ***it LED1602_RW=P1^1 ;
  ***it LED1602_EN=P1^2 ;
  void LcdIni(void);
  void WrOp(uchar dat);
  void WrDat(uchar dat);
  void ChkBusy(void);
  void print_LCD(uchar disp[],uchar num);
  //延时n ms子程序
  void delayms(unsigned int n)
  {
  unsigned int i,j;
  for(i=0;i《n;i++)
  for(j=0;j《120;j++);
  }
  main()
  {
  uchar disp1[16]={‘c’,‘h’,‘e’,‘n’,};
  uchar disp2[16]={‘2’,‘0’,‘1’,‘9’‘};
  while(1)
  {
  LcdIni();
  WrOp(0x80); //数据指针地址第一行
  print_LCD(disp1,11);
  WrOp(0xc0); //第二行
  print_LCD(disp2,10);
  delayms(3000);
  WrOp(0x01);
  }
  }
  void print_LCD(uchar disp[],uchar num) //显示数组disp 显示长度为num
  {
  uchar i;
  for(i=0;i《num;i++)
  {
  WrDat(disp);
  delayms(300);
  }
  }
  void LcdIni()
  {
  WrOp(0x38);
  WrOp(0x06); //光标加1
  WrOp(0x0f); //开显示 光标闪烁
  // WrOp(0x0c); //开显示 光标不闪烁
  }
  void WrOp(uchar dat)
  {
  //uchar i;
  ChkBusy();
  LED1602_RS=0; //RS=0
  LED1602_RW=0; //RW=0
  LED1602_EN=0; //EN=0
  LcdBus=dat; //送数据
  LED1602_EN=1; //EN=1
  delayms(10); //延时
  LED1602_EN=0; //EN=0
  }
  void WrDat(uchar dat)
  {
  //uchar i;
  ChkBusy();
  LED1602_RS=1; //rs=1
  LED1602_RW=0; //rw=0
  LED1602_EN=0; //en=0
  LcdBus=dat; //送数据
  LED1602_EN=1; //en=1
  delayms(10);; //延时
  LED1602_EN=0; //en=0
  }
  void ChkBusy()
  {
  LED1602_RS=0; //RS=0
  LED1602_RW=1; //RW=1
  LED1602_EN=1; //EN=1
  while(LcdBus&0x80); //送数据
  LED1602_EN=0; //en=0
  }
举报

更多回帖

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