1 /*2018年8月11日 18点30分,于福安公寓
2 功能:LCD1602显示程序*/
3 #include<reg52.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 uchar code table[] ="zhangshuaishuai";
7 uchar code table1[] ="ce shi cheng xu";
8 sbit lcdrw =P2^5;
9 sbit lcdrs =P2^6;
10 sbit lcde =P2^7;
11 void delay(uchar x)
12 {
13 uchar i,j;
14 for(i=x;i>0;i--)
15 for(j=110;j>0;j--);
16 }
17 //显示程序的位置
18 /*void lcd_display_char(uchar x,uchar y,uchar date)
19 {
20 uchar address;
21 if(y ==1)
22 address =0x80+x;
23 else
24 address =0xc0+x;
25 }
26 */
27 /*写指令函数*/
28 void lcd_write_cmd(uchar com)
29 {
30 lcdrs =0; //指令
31 P0 = com;
32 delay(1);
33 lcdrw =0;//写有效
34 lcde =1; //由时序图可知,当lcde为高电平之前就必须要将数据输入进去,故而P0 = com;这句指令在其前面
35 delay(1);
36 lcde =0;
37
38 }
39 /*写数据函数*/
40 void lcd_write_data(uchar date)
41 {
42 P0 =date;
43 lcdrs =1;
44 delay(1);
45 lcdrw =0;
46 lcde =1;
47 delay(1);
48 lcde =0;
49
50 }
51 // 函数初始化
52 void init()
53 {
54 lcd_write_cmd(0x38);//设置8位格式;2行,5*7
55 lcd_write_cmd(0x0c);//整体显示,关光标,不闪烁
56 // lcd_write_cmd(0x01); //清除屏幕显示
57 lcd_write_cmd(0x06);//设定输入方式,增量不移位
58
59 delay(1);
60 }
61 void main()
62 {
63 uchar i,j,num;
64 init();
65
66 /* lcd_write_data(0x41);
67 lcd_write_data('B');
68 lcd_write_data('C');
69 while(1); //当这里没有while(1);暂停语句时,就会出现满屏的数据 ;当输入多个字符时,比如'B','C'如上面,就会面屏出现同样的数据,并且在这几个字符中轮流变化
70 */
71
72 lcd_write_cmd(0x80+0x13); //确定刚开始写入第一行数据的位置
73 for(i =0;i<15;i++) //如果没有确定要显示的位置,LCd显示屏默认就会从第一个字符开始
74 {
75 // lcd_display_char(0,0,table[i])
76
77 lcd_write_data(table[i]);
78 delay(100);
79
80 // while(1); //如果在此处加上while(1)暂停语句时,就只会出现z这一个字符
81 }
82 // lcd_write_cmd(0x01); // 清屏指令 让上面的字符显示之后,再清屏
83 // delay(1000); //如果没有这个延时程序,那么下面显示的位置就不在你所设定的位置,会跑到第一行
84
85 lcd_write_cmd(0x80+0x53); //确定了下面要显示内容的位置 确定刚开始写入数据的位置
86
87 for(j =0;j<15;j++)
88 {
89 lcd_write_data(table1[j]);
90 delay(100); //动态显示让其延时,相当于
91 }
92
93
94 /*用于整屏向左移动的程序 由于是整个屏幕的向左移动,故而在将其所有要显示的
95 内容全部显示到不可见区域,然后统一按照移动屏幕的指令整体移动,每次移动也只移动一位*/
96 for(num =0;num<18;num++)
97 {
98 lcd_write_cmd(0x18); //表示显示整屏向左移动
99 delay(1000); // 每个100ms移动一位
100 }
101
102 while(1); //如果在此处加上while(1)暂停语句时,会正常显示字符
103
104 }