Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235982
  • 博文数量: 24
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 251
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-16 21:24
文章分类

全部博文(24)

文章存档

2010年(6)

2009年(18)

我的朋友

分类: 嵌入式

2009-11-11 14:34:13

 

今天用1602液晶试了,图很快就画好了,下面是看1602的芯片手册,这里看了两份,一份是长沙太阳人的1602,还有一份

DOC格式的,有需要的朋友,一块可以在附件下载

先上我画好的图,显示了HELLO WORLD

因为之前看过郭天详的十天学会单片机中的液晶这一节,所以代码很快就搞定,我想说的就是那个时序图,

RS高电平的时候,是写数据,低电平的时候是写指令,RW 就是高电平了,还有一个就是时间,这个看芯片手册的话,会具体点

代码的话,我写了4个函数,

 

 

长沙太阳人1602手册

文件: 1602液晶说明.pdf
大小: 255KB
下载: 下载

 

#include <stdio.h>
#include <reg51.h>

#define uchar unsigned char
#define uint unsigned int

#define LCD P0
sbit RS = P3^0;        //数据/指令选择

sbit RW = P3^1;        //读写

sbit E = P3^2;

void delay(uint tm)
{
    uint i,j;
    for(i=0;i<tm;i++)
    {
        for(j=0;j>100;j++)
        {            
        }
    }
}

void ReadData(uchar Data)     //读数据

{
}

void WriteData(uchar Data) //写数据

{
    RS = 1;
    E = 0;
    RW = 0;
    LCD = Data;
    delay(5);
    E = 1;
    delay(1);
    E = 0;
    RW = 1;
}
void ReadCommand(uchar com) //读指令

{
    RS = 1;
    RW = 0;
    E = 0;
    com = LCD;
    RW = 0;
    E = 0;
}

void WriteCommand(uchar com) //写指令

{
    RS = 0;
    E = 0;
    RW = 0;
    LCD = com;
    delay(5);
    E = 1;
    delay(1);
    E = 0;
    RW = 1;    
}

void init()     //初始化

{
    delay(15);
    WriteCommand(0x38);    
    delay(5);
    WriteCommand(0x38);    
    delay(5);
    WriteCommand(0x38);    //上面这段可要可不要        

  
    WriteCommand(0x38);     //功能设置

    WriteCommand(0x08);     //关闭显示

    WriteCommand(0x06);     //输入方式设置

    WriteCommand(0x0C);
    WriteCommand(0x01);     //清屏

    delay(50);

}
void Display(uchar *a)
{
    while(*a != '\0')
    {
        WriteData(*a);
        a++;
    }
}

void main()
{
    init();    
  
    Display(" hello world");
     
    while(1)
    {
    }
}


阅读(4106) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~