代码改变世界

1602液晶显示

2010-08-16 14:08  李龙江  阅读(390)  评论(0编辑  收藏  举报

 1602LCD分两行显示文字(不能显示中文)

 1 /*
 2 RS =数据/命令选择端(H/L)
 3 R/W=读/写选择端(H/L)因TX-1X开发板此脚接地所以只能写不能读取,故本程序不读只写
 4 此试验板1602液晶接P0口故此数据通过P0传送
 5 lilongjiang@live.com 8/16/2010
 6  */
 7 
 8 #include<reg52.h>
 9 #define uchar unsigned char
10 #define uint unsigned int
11 sbit EN=P3^4;        
12 sbit RS=P3^5;
13 sbit dula=P2^6;        //断选
14 sbit wela=P2^7;        //位选 因这两个芯片也接在P0口故使用液晶避免造成电压低故关闭这两个芯片
15 uchar code tab1[]="0123456789ABCDEF";    //第一样显示的数据
16 uchar code tab2[]="GHIJKLMNOPQRSTUV";    //第二行显示的数据
17 void delay(uint);
18 uchar i;
19 void write_com(uchar com)    //写命令
20 {
21     RS=0;
22     P0=com;
23     delay(1);
24     EN=1;
25     EN=0;
26 }
27 void write_data(uchar date)    //写数据
28 {
29     RS=1;
30     P0=date;
31     delay(1);
32     EN=1;
33     EN=0;
34 }
35 void init()
36 {
37     EN=0;
38     dula=0;                //关闭断选
39     wela=0;                //关闭位选
40     write_com(0x38);    //开显示
41     write_com(0x0F);    //光标
42     write_com(0x06);    //指针
43     write_com(0x01);    //清屏
44 }
45 void main()
46 {
47     init();
48     write_com(0x80);        //第一行显示地址设为80H
49     for(i=0;i<16;i++)
50     {
51         write_data(tab1[i]);
52     }
53     write_com(0xC0);        //第二行显示地址设为80H+40H
54     for(i=0;i<16;i++)
55     {
56         write_data(tab2[i]);
57     }    
58     while(1);
59 }
60 void delay(uint x)
61 {
62     uint i;
63     while(x--)
64         for(i=0;i<110;i++);
65 }