星空网 > 软件开发 > 操作系统

51单片机实现SMC1602液晶屏显示实例

————————————————————————————————————————————

LCD1602

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  • 1602的意思是每行显示16个字符,一共可以显示两行。如果是12232液晶(图形型液晶)则表示由122列32行组成,即共有122*32个点
  • p.s.注意使用温度,通常液晶的工作范围为0~+55℃,存储温度范围为-22~+60℃。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

引脚情况:

51单片机实现SMC1602液晶屏显示实例images/loading.gif' data-original="http://images2015.cnblogs.com/blog/1146465/201705/1146465-20170522170317288-2094319333.png" >

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

基本操作时序:

状态

输入

输出

读状态

  • RS=0
  • R/W=1
  • E=1
  • D0~D7=状态字

读数据

  • RS=1
  • R/W=1
  • E=1
  • D0~D7=数据

写指令

  • RS=0
  • R/W=0
  • E=1
  • D0~D7=指令码
  • E=1

写数据

  • RS=1
  • R/W=0
  • E=1
  • D0~D7=数据
  • E=1


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RAM内部映射:80个字节

51单片机实现SMC1602液晶屏显示实例

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

状态字说明://状态字反应了当前液晶屏的情况,当STA7为1时说明显示器正在忙碌状态,不可进行操作

  • STA0~STA6表示当前地址指针的数值
  • STA7表示读/写使能,=1表示进制,=0表示允许

    51单片机实现SMC1602液晶屏显示实例

    p.s.原则上每次对控制器读写操作之前都必须进行读写检测,确保STA7=0,实际操作中由于单片机操作速度慢于液晶控制的反应速度,可以不进行读写检测而只进行简短的延时。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

数据指针设置:

用户可以通过以下的数据地址指针访问内部的80个字节RAM,用来设置数据地址

80H+地址码(0~27H,40~67H)

例:对第一个地址进行操作,0x80+0x01

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

其他指令码:

01H

显示清屏(数据指针清零,所有显示清零)

02H

显示回车(数据指针清零)


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

初始化:

  • 显示模式设置:38H

    51单片机实现SMC1602液晶屏显示实例

  • 显示开/关及光标设置

    51单片机实现SMC1602液晶屏显示实例

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

读写操作时序:

  • 读操作

51单片机实现SMC1602液晶屏显示实例

  • 写操作

    51单片机实现SMC1602液晶屏显示实例

  • 操作时间参数

    51单片机实现SMC1602液晶屏显示实例

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

操作方式:

  • 对LCD的操作可以分为数据和指令两部分。
  • 通过操作RS,R/W,E,执行四种操作:读状态,读数据,写指令,写数据
  • D0~D7用来输入输出指令码和数据

————————————————————————————————————————————

LCD1602使用实例:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

设计要求:

使用LCD1602显示两行字符,显示两行字,两个按键控制着显示或清屏

51单片机实现SMC1602液晶屏显示实例

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

设计思路:

  • 初始化液晶显示屏 //参照上文"初始化"
    • 打开使能
    • 指令码操作
      • 设置16*2显示,5*7点阵,8位数据结构
      • 开显示,显示光标,不闪烁
      • 读写完字符后地址指针+1,光标+1,整屏显示不移动
      • 清屏
      • 设置地址显示的首字符
  • 初始化中断
    • 打开中断
    • 外部中断0和1
  • 死循环等待中断
  • 按键中断
    • 按键"显示"
      • 循环写入数据(字符数组)
      • 指令"换行"
      • 循环写入第二行数据
    • 按键"清屏"
      • 指令"清屏"
  • 子函数 //参照上文"读写操作时序表"
    • 写数据
    • 写指令

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

实现代码:

 1 #include <reg52.h> 2 typedef unsigned char uchar; 3 sbit en = P3 ^ 4; 4 sbit rs = P3 ^ 5; 5 uchar code table1[] = 6 { 7   "SMC1602 0x01..." 8 }; 9 uchar code table2[] =10 {11   "   Hugh Dong."12 };13 void Delay(uchar m)14 {15   uchar i, j;16   for (i = m; i > 0; --i)17     for (j = 110; j > 0; --j);18 }19 /* 写数据 */20 void write_date(uchar date)21 {22   //参考写操作时序图23   rs = 1; //RS高电平,写数据24   P2 = date; //写入数据,对应时序图t_SP2数据建立25   Delay(5);26   en = 1; //打开使能,给E一个高脉冲,开始写入数据27   Delay(5);28   en = 0; //关闭使能,写入数据完成29 }30 /* 写指令 */31 void write_com(uchar com)32 {33   //基本原理同写数据34   rs = 0; //RS低电平,写指令35   P2 = com;36   Delay(5);37   en = 1;38   Delay(5);39   en = 0;40 }41 /* 初始化LCD */42 void Init()43 {44   en = 1;45   write_com(0x38); //00111000 设置16*2显示,5*7点阵,8位数据接口46   write_com(0x0E); //00001110 开显示,显示光标,不闪烁47   write_com(0x06); //00000110 读写字符后地址指针+1,光标+1,屏幕不移动48   write_com(0x01); //清屏49   write_com(0x80 + 0x01); //设置数据地址指针从第一个开始50 }51 int main()52 {53   /* 初始化LCD */54   Init();55   Delay(100);56   /* 初始化中断 */57   EA = 1;58   EX0 = 1;59   EX1 = 1;60   /* 死循环 */61   while(1);62 }63 void Display()interrupt 0 using 164 {65   uchar i;66   for (i = 0; i < 16; ++i) //遍历逐个写入第一行数据67   {68     write_date(table1[i]);69     Delay(20);70   }71   write_com(0x02); //换行72   write_com(0x80 + 0x40); //数据地址指针指向第二行73   for(i = 0; i < 16; ++i) //逐个遍历写入第二行数据74   {75     write_date(table2[i]);76     Delay(20);77   }78 }79 void Clear() interrupt 1 using 180 {81   write_com(0x01);82 }

 

   




原标题:51单片机实现SMC1602液晶屏显示实例

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流