打印

急!1602液晶屏我该如何使用

[复制链接]
4938|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子三极管|  楼主 | 2009-12-7 21:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
急!1602液晶屏我该如何使用  我现在还不会用 在1602液晶屏上显示汉字 或者编写一个时钟什么的   现在用51单片机控制  对其写C程序  但是我不知道怎么如何去控制他 时序图有点不明白  谁有相关的程序  能否留下一些  我好自己去琢磨琢磨  最好在程序里有详细的注解 最好不过  本人在此万分感激

相关帖子

沙发
chunyang| | 2009-12-7 22:10 | 只看该作者
1602是点阵字符显示器,不能用于汉字显示,最多只能通过特殊字符定义显示个别非常简单的汉字,想显示哪怕是常用汉字必需使用点阵图形式LCD显示屏。至于如何操作1602,看模块手册。

使用特权

评论回复
板凳
xn2500| | 2009-12-7 22:29 | 只看该作者
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="I LIKE MCU!";
uchar code table1[]="WWW.TXMCU.COM";
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;


void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void write_com(uchar com)
{
        lcdrs=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}

void write_data(uchar date)
{
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
void init()
{
        dula=0;
        wela=0;
        lcden=0;
        write_com(0x38);
        write_com(0x0e);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80+0x10);
}
void main()
{
        init();
        for(num=0;num<11;num++)
        {
                write_data(table[num]);
                delay(20);
        }
//        write_com(1);
        write_com(0x80+0x53);
        for(num=0;num<13;num++)
        {
                write_data(table1[num]);
                delay(20);
        }
        for(num=0;num<16;num++)
        {
                write_com(0x18);
                delay(20);
        }
        while(1);
}

上网查的程序。

使用特权

评论回复
地板
电子三极管|  楼主 | 2009-12-8 09:37 | 只看该作者
:) 3# xn2500

使用特权

评论回复
5
电子三极管|  楼主 | 2009-12-8 09:38 | 只看该作者
你能否跟我讲讲如何去使用他  最简单的显示一串阿拉伯数字吧 硬件该怎么连 软件该怎么写 ? 非常感激 2# chunyang

使用特权

评论回复
6
qe123| | 2009-12-8 10:03 | 只看该作者
网上找找资料,自己弄弄,前提别弄坏了,就会了

使用特权

评论回复
7
电子三极管|  楼主 | 2009-12-8 11:42 | 只看该作者
我想你给我注明也写下 这样我就看的清楚了 3# xn2500

使用特权

评论回复
8
电子三极管|  楼主 | 2009-12-8 12:17 | 只看该作者
硬件连线 ? 3# xn2500

使用特权

评论回复
9
xiaotao_82| | 2009-12-8 12:19 | 只看该作者
http://www.crystalradio.cn/bbs/thread-41265-1-1.html
终极使用方法,强到让人吐血!!;P

使用特权

评论回复
10
tyw| | 2009-12-8 12:21 | 只看该作者
elecfans.com-yeji1602.pdf (205.01 KB)
LCD1602_PDF_cn(1).RAR (928.5 KB)

使用特权

评论回复
11
xwj| | 2009-12-8 12:45 | 只看该作者
唉,LZ,先去看书吧。

3楼发的就是 最简单的显示一串英文的程序,真的很简单了,但你看不懂也没办法。

看来你那一麻袋钱还真的扔废品回收站了。。。

使用特权

评论回复
12
红金龙吸味| | 2009-12-8 12:46 | 只看该作者
看这个

LCD1602.pdf

579.44 KB

玩转1602液晶

使用特权

评论回复
13
maychang| | 2009-12-8 13:11 | 只看该作者
估计楼主买的那一麻袋书,没看多少,就卖了。

使用特权

评论回复
14
kubuco| | 2009-12-8 17:43 | 只看该作者
四年攒了一麻袋。。大四五月卖了,吃饭喝酒。。。

使用特权

评论回复
15
不亦心| | 2009-12-8 18:14 | 只看该作者
好好看看datasheet再结合别人的程序,应该不是什么大问题呀。
能看懂汇编吗??
我是用汇编写的,有详细注释和解释:http://hi.baidu.com/不亦心/

使用特权

评论回复
16
houfire007| | 2009-12-8 22:27 | 只看该作者
认真看datasheet怎么可能不会,花点功夫肯定行的。

使用特权

评论回复
17
电子三极管|  楼主 | 2009-12-17 17:35 | 只看该作者
是的 在学校没学到到 现在工作了 才知道该学习了 很感谢你 11# xwj

使用特权

评论回复
18
电子三极管|  楼主 | 2009-12-17 17:36 | 只看该作者
呵呵 收获不小哦;P 14# kubuco

使用特权

评论回复
19
znmcu| | 2009-12-18 14:26 | 只看该作者
给你我的1602液晶程序:
1602_8.c

#include "1602_8.h"
#include "myfun.h"
/*******************************************************
        +------------------------------------+
        |振南电子 驱动程序模块 1602液晶部分  |
        +------------------------------------+
  此源码版权属 振南 全权享有,如欲引用,敬请署名并告知
        严禁随意用于商业目的,违者必究,后果自负
         振南电子
             ->产品网站 http://www.znmcu.cn/
             ->产品论坛 http://bbs.znmcu.cn/
             ->产品网店 http://shop.znmcu.cn/
             ->产品咨询 QQ:987582714
               MSN:yzn07@126.com
                     WW:yzn07      
********************************************************/
void LCD1602_Check_Busy() //检测1602是否正忙
{
unsigned char temp;
RS=0; //命令
RW=1; //读取
DAT_PORT=0xff; //作输入前先赋值为全1
do
{
  E=1; //使能
  delay(1); //延时一段时间,1602输出数据
  temp=DAT_PORT; //将数据端口上的值赋给temp
  E=0; //关闭使能
}while(temp&0x80); //第七个位如果是1说明1602正忙
}
void LCD1602_Write_Cmd(unsigned char com) //向1602写入命令
{
LCD1602_Check_Busy();//检测1602是否正忙
RS=0;//命令
RW=0;//写
DAT_PORT=com;//将命令码输出在数据端口上
E=1;  //使能
delay(1);//延时一段时间,命令被写入1602中
E=0; //关闭使能
}
void LCD1602_Write_Dat(unsigned char dat) //向1602写入一个字节的数据
{
LCD1602_Check_Busy();//检测1602是否正忙
RS=1;//数据
RW=0;//写
DAT_PORT=dat;//将数据输出在数据端口上
E=1;//使能
delay(1);//延时一段时间,数据被写入到1602中
E=0;//关闭使能
}
unsigned char LCD1602_Read_Dat() //从1602液晶读取一个字节
{
unsigned char temp;
LCD1602_Check_Busy();//检测1602是否正忙
RS=1;
RW=1;
DAT_PORT=0xff;
E=1;
delay(1);
temp=DAT_PORT;
E=0;
return temp;
}
void LCD1602_Set_Mode(unsigned char dl,unsigned char n,unsigned char f)
{
//命令:001 DL N F XX
//描述:DL:1为8位数据接口  0为4位数据接口
//      N :1为两行显示     0为一行显示
//      F :1为5X10点阵     0为5X7点阵
unsigned char mode=0x20;
if(dl) mode|=0x10;
if(n)  mode|=0x08;
if(f)  mode|=0x04;
LCD1602_Write_Cmd(mode);//4位数据接口,两行显示,5X7
}
void LCD1602_Clr() //1602清屏
{
//命令:0000 0001
//描述:无
//功能:清屏  清除DDRAM和AC的值
LCD1602_Write_Cmd(0x01);
}
void LCD1602_Home() //1602光标回到起始位置
{
//命令:0000 001X
//描述:X为无关位
//功能:光标、画面回home位
LCD1602_Write_Cmd(0x02);
}
void LCD1602_Move_Mode(unsigned char id,unsigned char s)
{
//命令:0000 01 I/D S
//描述:I/D:1为数据读写后AC自增1;0为数据读写后AC自减1
//      S:  1为数据读写后光标、画面平移;0为数据读写后光标、画面不动
//功能:输入方式设置
unsigned char mode=0x04;
if(id) mode|=0x02;
if(s)  mode|=0x01;
LCD1602_Write_Cmd(mode);
}
void LCD1602_Set_Display(unsigned char d,unsigned char c,unsigned char b)
{
//命令:0000 1DCB
//描述:D:显示开关:1为开 0为关
//      C:光标开关:1为开 0为关
//      B:光标闪烁开关:1为开 0为关
//功能:显示开关控制
unsigned char mode=0x08;
if(d) mode|=0x04;
if(c) mode|=0x02;
if(b) mode|=0x01;                     
LCD1602_Write_Cmd(mode);
}
void LCD1602_Shift(unsigned char sc,unsigned char rl)
{
//命令:0001 S/C R/L XX
//描述:S/C: 为1画面平移一个字符位  为0光标平移一个字符位
//      R/L:为1向右移  为0向左移
//      X:无关位
//功能:光标画面位移
unsigned char mode=0x10;
if(sc) mode|=0x08;
if(rl) mode|=0x04;
LCD1602_Write_Cmd(mode);
}
void LCD1602_Set_DDRAM_Addr(unsigned char x,unsigned char y)
{
//命令:1 A6 A5 A4 A3 A2 A1 A0
//描述:A6~A0:DDRAM的地址
//      N=1时,单行显示 地址是 A6~A0:00~4F
//      N=0时,双行显示 首行地址是 A6~A0: 00~2F
//                      第二行地址是A6~A0:40~67
//功能:DDRAM地址设置
if(y==0)
{
  LCD1602_Write_Cmd(0x80+x);
}
else
{
  LCD1602_Write_Cmd(0xc0+x);
}
}
void LCD1602_Set_CGRAM_Addr(unsigned char x) //设置CGRAM地址
{
//命令:01 A5 A4 A3 A2 A1 A0
//描述:A5~A0:CGRAM的地址 00~3F
//功能:CGRAM地址设置
LCD1602_Write_Cmd(0x40+x);
}
void LCD1602_Init() //1602初始化
{
LCD1602_Set_Mode(1,1,0);
LCD1602_Move_Mode(1,0);
LCD1602_Set_Display(1,1,1);
LCD1602_Clr();
LCD1602_Home();
}
void LCD1602_Put_Str(unsigned char x,unsigned char y,char *str) //在指定位置显示字符串
{
unsigned char i=0;
LCD1602_Set_DDRAM_Addr(x,y);
while(str[i])
{
  LCD1602_Write_Dat(str[i]);
  i++;
}
}
void LCD1602_Put_Long(unsigned char x,unsigned char y,unsigned long n) //在指定位置显示整形值
{
unsigned char temp[20];
u32tostr(n,temp);
LCD1602_Put_Str(x,y,temp);
}


1602_8.h

#ifndef _1602_8_H_
#define _1602_8_H_
/*******************************************************
        +------------------------------------+
        |振南电子 驱动程序模块 1602液晶部分  |
        +------------------------------------+
  此源码版权属 振南 全权享有,如欲引用,敬请署名并告知
        严禁随意用于商业目的,违者必究,后果自负
         振南电子
             ->产品网站 http://www.znmcu.cn/
             ->产品论坛 http://bbs.znmcu.cn/
             ->产品网店 http://shop.znmcu.cn/
             ->产品咨询 QQ:987582714
               MSN:yzn07@126.com
                     WW:yzn07      
********************************************************/
#include <reg51.h>
#define COM_PORT P3 //控制端口
#define DAT_PORT P0 //数据端口
sbit RS=COM_PORT^5; //RS=1 数据 RS=0 命令
sbit RW=COM_PORT^6; //RW=1 读取 RW=0 写入
sbit E =COM_PORT^7; //E 使能信号
void LCD1602_Check_Busy();
void LCD1602_Write_Cmd(unsigned char com);
void LCD1602_Write_Dat(unsigned char dat);
unsigned char LCD1602_Read_Dat();
void LCD1602_Set_Mode(unsigned char dl,unsigned char n,unsigned char f);
void LCD1602_Clr();
void LCD1602_Home();
void LCD1602_Move_Mode(unsigned char id,unsigned char s);
void LCD1602_Set_Display(unsigned char d,unsigned char c,unsigned char b);
void LCD1602_Shift(unsigned char sc,unsigned char rl);
void LCD1602_Set_DDRAM_Addr(unsigned char x,unsigned char y);
void LCD1602_Set_CGRAM_Addr(unsigned char x);
void LCD1602_Init();
void LCD1602_Put_Str(unsigned char x,unsigned char y,char *str);
void LCD1602_Put_Long(unsigned char x,unsigned char y,unsigned long n);
#endif


main.c

#include "1602_8.h"
void main()
{
LCD1602_Init();
LCD1602_Put_Str(0,0,"WWW.ZNMCU.CN"); //在第一行起始位置显示 WWW.ZNMCU.CN
while(1);
}


myfun.c 与 myfun.h 是公用函数模块,如下:
myfun.rar (1.51 KB)

使用特权

评论回复
20
znmcu| | 2009-12-18 14:31 | 只看该作者
本帖最后由 znmcu 于 2009-12-18 14:34 编辑

另说一句,1602同时也是可以显示汉字,不过要通过一些变通的方法,没有实际应用价值


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:承接采集设备运行参数,如温度、速度、压力、浓度、流量、节拍、湿度、重量等。采用PIC 51 AVR等类单片机 59467837(杭州单片机开发技术交流QQ群)

116

主题

530

帖子

2

粉丝