四线1602液晶显示(51单片机)

2020-01-30 13:35发布

昨天在网上看到了用4线操作1602,我就试了一下,果然可以!
2013-05-13_120547.png (32.19 KB, 下载次数: 0) 下载附件 2013-5-13 12:05 上传

程序: 四线1602液晶显示.rar (2.2 MB, 下载次数: 98) 2013-5-13 12:02 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
ding_ding0304
1楼-- · 2020-01-31 12:24
Tliang 发表于 2013-5-13 14:11

ourdev_587522P120CC.jpg (274.2 KB, 下载次数: 0)

下载附件

2013-5-13 15:21 上传


//         Drive a LCD1602 with 2 wire
//===================================================
//ICC-AVR application builder : 2010-10-3 19:30:02
// Target : M16
// Crystal: 4.0000Mhz

#include <iom16v.h>
#include <macros.h>

#define Set_E PORTB|=2
#define Clr_E PORTB&=~2
#define Set_D PORTB|=1
#define Clr_D PORTB&=~1
#define Set_xy(y,x) Send(0,(y<<6)|(x&15)|0x80)

//===================================================
void init_devices(void)
{
  CLI(); //disable all interrupts
  DDRB  = 0x03;
  MCUCR = 0x00;
  GICR  = 0x00;
  SEI(); //re-enable interrupts
}

//===================================================
void Delay(unsigned int i)
{
  while(i--);
}        

//===================================================
void Send(unsigned char RS, unsigned char dat)
{
  unsigned char i;
  for (i = 2; i > 0; i--)
  {
    if (dat & 0x80) Set_D; else Clr_D;
    Delay(10608);//14520us
    if (RS) Set_E;
    if (dat & 0x40) Set_D; else Clr_D;
    Delay(462);  //660us
    if (dat & 0x20) Set_D; else Clr_D;
    Delay(18);   //30us
    Set_E;
    if (dat & 0x10) Set_D; else Clr_D;
    _NOP();      //0.5us < t < 1.36us
    Clr_E;
    dat <<= 4;
  }        
}

//===================================================
void init_1602(void)
{
  unsigned char i = 3;
  Clr_D;
  Clr_E;
  Delay(10608);
  do{
    Clr_D;
    Delay(462);
    Set_D;
    Set_E;
    Delay(18);
    if (i == 0) Clr_D;
    _NOP();_NOP();_NOP();
    Clr_E;
    }while(i--);
  Send(0,0x28);
  Send(0,0x01);
  Send(0,0x0f);
}

//===================================================
void Send_S(unsigned char *p)
{
  while(*p) Send(1,*p++);
}        

//===================================================
void main(void)
{
  unsigned char i;
  init_devices();
  init_1602();
  
  Set_xy(0,2);
  Send_S("Hello world!");
  Set_xy(1,3);
  Send_S("I'm COWBOY.");
  for (i=0;i<255;i++) Delay(10000);
  
  Send(0,0x01);
  Set_xy(0,3);
  Send_S("Welcome to");
  Set_xy(1,1);
  Send_S("www.ourdev.cn");
  while(1);
}
benqme
2楼-- · 2020-01-31 14:58
第一次听说还可以这样用哦
jetli
3楼-- · 2020-01-31 20:50
 精彩回答 2  元偷偷看……
jz701209李
4楼-- · 2020-02-01 00:12
看着不错呀,
devcang
5楼-- · 2020-02-01 06:05
呵           本坛前辈   都研究过             还有2线的
l769109884
6楼-- · 2020-02-01 06:15
很赞LZ的编程风格!!

一周热门 更多>