当前位置:静雅生活网 > 数码百科 >

lcd1602液晶(51单片机驱动 LCD1602液晶显示 PROTEUS仿真 LCD指令解释)

导读:最近后台有小伙伴留言和我说老师给他们留了一个设计作业要用单片机去驱动LCD1602液晶显示任意字符,我利用空闲时间做了一个小实验,希望能帮到他做一个参考,更希望你们看后能有

  最近后台有小伙伴留言和我说老师给他们留了一个设计作业要用单片机去驱动LCD1602液晶显示任意字符,我利用空闲时间做了一个小实验,希望能帮到他做一个参考,更希望你们看后能有所收获。

  51单片机驱动 LCD1602液晶显示系统 PROTEUS仿真及源代码设计

  废话不多说先上实物图

  LCD1602+51单片机最小系统应用仿真及制作

  好了,接下来正式进入制作环节:

  第一步:仿真

  绘制好原理图,仿真时单片机最小系统只放一个单片机就可以了,但实际电路中需要加上电源模块、复位模块。如下图:

  原理图文件请在附件中找。

  原理图绘制好后,编写代码并生成hex文件。参考代码如下:

  /*************************功能************************/

  /*使用外部中断INTO改变LED状态,并且用1602显示出其状态*/

  #include<reg51.h>

  #include <intrins.h>

  #define uint unsigned int

  #define uchar unsigned char

  uchar code table[]=" HELLO 1602 ";

  uchar code table0[]="1602 TEST ";

  uchar code table1[]="RESULT: "; //空格是写到LCD了,即空格也是内容

  uchar code table2[]="OK!";

  uchar code table3[]="liang";

  uchar code table4[]="mie";

  uchar num;

  sbit led=P1^7;

  sbit lcden=P2^0; //液晶使能端

  sbit lcdrs=P2^2; //液晶数据命令选择端选择写数据还是写命令

  void delay(uint z) // 延时函数

  {

  uint i,j;

  for(i=z;i>0;i--)

  for(j=110;j>0;j--);

  }

  void write_com(uchar com) //写入

  {

  lcdrs=0; //LCD 选择输入命令

  P0=com; //向P0 口输入命令 39-32端口

  delay(5); //延时

  lcden=1; //打开LCD 使能

  delay(5); //一个高脉冲

  lcden=0; //关闭LCD 使能

  }

  void write_data(uchar date)

  {

  lcdrs=1; //设置为输入数据

  P0=date; //将数据赋给P0 口

  delay(5); //延时

  lcden=1; //置高

  delay(5); //高脉冲

  lcden=0; //置低完成高脉冲

  }

  void init() //LED 初始化

  {

  lcden=0;

  write_com(0x38);//设置16x2 显示5x7 点阵,8 位数据接口

  write_com(0x0c); //设置开始显示不显示光标 (指令4)

  write_com(0x06); //写一个字符后地址指针加1 (指令3)

  write_com(0x01); //显示清零数据指针清零 (指令1)

  }

  void display(unsigned char *p)//按指针 地址写入数据

  {

  while(*p!='\0')

  {

  write_data(*p); //写数据

  p++;

  delay(1);

  }

  }

  void main()

  {

  TCON=0x01; //设置中断为INTO

  IE=0x81;

  led=0;

  init();

  write_com(0x80); //将数据指针第一行第一个字处,

  display(table); //调用函数的方式写入数据

  delay(800);

  write_com(0x80); //将数据指针第一行第一个字处,

  display(table0); //调用函数的方式写入数据

  write_com(0x80+0x40); //定义指针位置 将数据指针第二行第一个字处

  for(num=0;num<7;num++)

  {

  write_data(table1[num]);

  delay(5);

  }

  write_com(0x80+0x4c); //按1602的地址单个写入数据

  write_data(table2[0]);

  write_com(0x80+0x4d); //按1602的地址单个写入数据

  write_data(table2[1]);

  write_com(0x80+0x4e); //按1602的地址单个写入数据

  write_data(table2[2]);

  while(1);

  }

  void key_can() interrupt 0

  {

  delay(20); // 消除按键抖动

  if(P3^3==0)

  {

  if(P3^3==0)

  {

  led=!led;

  }

  if(led==1)

  {

  write_com(0x80+0x4b);

  display(table3);

  }

  else if(led==0)

  {

  write_com(0x80+0x4b); //按1602的地址单个写入数据

  display(table4);

  write_com(0x80+0x4f);

  write_data(table1[8]); //按1602的地址单个写入数据

  write_com(0x80+0x4e);

  write_data(table1[8]);

  }

  }

  }

  原理图和代码都有了,仿真的准备工作就完了,现在正式进入仿真。

  将代码加载进单片机中,仿真结果如下图:

  元器件清单

  原件布局及效果图如下:

  最后按照要求全部焊接好,上电烧程序测试就可以了。

  应该写得够详细了吧,最后,如果有什么意见或者建议欢迎直接给我留言,让我们共同学习一起进步,如果需要完整的代码或设计文件,请在下方留言或者私信我,看到后会第一时间回复。

  谢谢!

  如果喜欢我的文章请评论转发加关注哦。

版权声明:本文部分来自互联网,由小编精心所写,本文地址:http://www.zhubian88.cn/smbk/47019.html,如需转载,请注明出处!

联系我们

在线咨询:点击这里给我发消息

微信号:weixin888

工作日:9:30-18:30,节假日休息