代码改变世界

1602显示中文

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

因1602每个字符用5*8点阵所以只能显示简单的字符,以下程序为了简洁只显示一个中文“年”

 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 year[]={0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02};
16 void delay(uint);
17 uchar i;
18 void write_com(uchar com)    //写命令
19 {
20     RS=0;
21     P0=com;
22     delay(1);
23     EN=1;
24     EN=0;
25 }
26 void write_data(uchar date)    //写数据
27 {
28     RS=1;
29     P0=date;
30     delay(1);
31     EN=1;
32     EN=0;
33 }
34 void init()
35 {
36     EN=0;
37     dula=0;                //关闭断选
38     wela=0;                //关闭位选
39     write_com(0x38);    //开显示
40     write_com(0x0F);    //光标
41     write_com(0x06);    //指针
42 }
43 void main()
44 {
45     init();
46     write_com(0x40);    //将自定义字符写入CGRAM
47     for(i=0;i<9;i++)    //循环8次写入
48     {
49         write_data(year[i]);
50     }
51     write_com(0x80);    //写入初始地址
52     write_data(0x00);
53     while(1);
54 }
55 void delay(uint x)
56 {
57     uint i;
58     while(x--)
59         for(i=0;i<110;i++);
60 }