关于LCD1602的请教

2020-02-05 09:32发布

初学51单片机,老师布置了个用LCD1602 显示的课外题,要求用两个键控制显示内容变化,初始显示时间,按1键显示为姓名,按2键恢复显示时间。

  我的想法是用两个外部中断接按键来变化显示内容,P2口接LCD数据总线。

  查了很多的LCD1602,感觉还是不懂,不知道这个想法能不能实现,请高手帮忙答疑,   QQ504239170 求指导谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
sonna
1楼-- · 2020-02-06 11:12
 精彩回答 2  元偷偷看……
gracialee
2楼-- · 2020-02-06 13:12
这段时间我也在用这个显汉字。
中国人
3楼-- · 2020-02-06 15:25
这个的话,那还是建议你去看一下 《郭天祥的十天学会单片机》,里面就有一课时教你使用LCD屏的
Edward3121
4楼-- · 2020-02-06 16:17
504239170 发表于 2012-4-15 15:39

PC1602_CHS_页面_06.png (125.24 KB, 下载次数: 1)

下载附件

2012-4-15 20:00 上传



对1602写一个指令的过程如下:
首先要保证EP处于低电平。
然后将RS至于低电平,将RW也置于低电平;
然后向数据端口写入要写的命令;
将EP拉高;
延时至少Tpw的时间;
将EP拉低;
指令写入完成。
我爱大米饭
5楼-- · 2020-02-06 17:22
利用两个普通的IO口作为按键接口就行了,我大致写了个程序,不知合不合你的要求:
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int

sbit rs = P3^5;
//sbit rw = P2^6;
sbit en = P3^4;
sbit key1=P3^6;
sbit key2=P3^7;

unsigned char code str1[]={"2011-04-13"};
unsigned char code str2[]={"WANGHAIMING!"};

void delay_1ms(unsigned int xms)
{
unsigned int i,j;
for(i=0;i<xms;i++)
     for(j=0;j<110;j++);
}

void wr_com(unsigned char com)  //写指令
{
delay_1ms(1);
rs=0;
//rw=0;
en=0;
P0=com;
delay_1ms(1);
en=1;
delay_1ms(1);
en=0;
}

void wr_dat(unsigned char dat) //写数据
{
delay_1ms(1);
rs=1;
//rw=0;
en=0;
P0=dat;
delay_1ms(1);
en=1;
delay_1ms(1);
en=0;
}

void lcd_init()
{
delay_1ms(15);
wr_com(0x38); delay_1ms(5);
wr_com(0x08); delay_1ms(5);
wr_com(0x01); delay_1ms(5);
wr_com(0x06); delay_1ms(5);
wr_com(0x0c); delay_1ms(5);
}

void displcd(unsigned char *p)
{
while(*p!='')
{
  wr_dat(*p);
  p++;
  delay_1ms(1);
}
}

void keyscan()
{
  uchar keynum=0;
   if(key1==0)
{                       
delay_1ms(5);
if(key1==0)
  {
   keynum=1;
  }
  while(!key1);
}
if(key2==0)
{
delay_1ms(5);
if(key2==0)
  {
   keynum=2;
  }
  while(!key2);
}

   switch(keynum)
   {
     case 1:wr_com(0x01);wr_com(0x80);displcd(str1); break;
     case 2:wr_com(0x01);wr_com(0x80);displcd(str2); break;
   }
}


void main()
{
lcd_init();
wr_com(0x80);
displcd(str1);
while(1)
{
keyscan();
}
}
zhenglu891028
6楼-- · 2020-02-06 19:44
 精彩回答 2  元偷偷看……

一周热门 更多>