📄 lcd2.lst
字号:
C51 COMPILER V7.00 LCD2 08/26/2008 15:15:12 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE LCD2
OBJECT MODULE PLACED IN lcd2.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE lcd2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 引脚连接
3 DATA=P0,RS=P2.0,RW=P2.1,E=P2.2,PSB=P2.3,RES=P2.4
4 */
5
6 #include <reg51.h>
7 #include <intrins.h>
8 #include<lcdb.h>
9 #include<shuzi.h>
10
11 sbit RS = P2^0;
12 sbit RW = P2^1;
13 sbit E = P2^2;
14 sbit PSB = P2^3; //串并口选择
15 sbit RES = P2^4;
16
17
18 #define FIRST_ADDR 0 //定义字符/汉字显示起始位置
19
20
21 //延时子程序
22 void delay(unsigned int t)
23 { unsigned int i,j;
24 1 for(i=0;i<t;i++)
25 1 for(j=0;j<10;j++)
26 1 ;
27 1 }
28
29 //测忙
30 void chk_busy()
31 { RS=0;
32 1 RW=1;
33 1 E=1;
34 1 while((P0&0x80)==0x80);
35 1 E=0;
36 1 }
37
38 //读数据
39 unsigned char lcdrd()
40 { unsigned char i;
41 1 P3=0xFB;
42 1 _nop_();
43 1 E=1;
44 1 delay(5);
45 1 i=P0;
46 1 _nop_();
47 1 E=0;
48 1 return i;
49 1 }
50
51 //写数据
52 void lcdwd(unsigned char dispdata)
53 { chk_busy();
54 1 _nop_();
55 1 RS=1;
C51 COMPILER V7.00 LCD2 08/26/2008 15:15:12 PAGE 2
56 1 RW=0;
57 1 E=1;
58 1 P0=dispdata;
59 1 delay(5);
60 1 _nop_();
61 1 E=0;
62 1 _nop_();
63 1 P0=0xff;
64 1 }
65
66 //写指令代码
67 void lcdwc(unsigned char cmdcode)
68 { chk_busy();
69 1 _nop_();
70 1 RS=0;
71 1 RW=0;
72 1 E=1;
73 1 P0=cmdcode;
74 1 delay(5);
75 1 _nop_();
76 1 E=0;
77 1 _nop_();
78 1 P0=0xff;
79 1 }
80
81 //初始化
82 void lcdreset()
83 { delay(2000);
84 1 lcdwc(0x30); //选择基本指令集
85 1 lcdwc(0x30); //选择8bit数据流
86 1 delay(5);
87 1 lcdwc(0x0c); //开显示(无游标、不反白)
88 1 delay(5);
89 1 lcdwc(0x01); //清除显示,并且设定地址指针为00H
90 1 delay(5);
91 1 lcdwc(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
92 1 }
93
94 void hzkdis(unsigned char code *s)
95 { while(*s>0)
96 1 { lcdwd(*s);
97 2 s++;
98 2 delay(500);
99 2 }
100 1 }
101
102
103
104 //整屏显示
105 //当ii=0时显示上面128×32
106 //当ii=8时显示下面128×32
107 void lcdfill(unsigned char disdata)
108 { unsigned char x,y,ii;
109 1 for(ii=0;ii<9;ii+=8)
110 1 for(y=0;y<0x20;y++)
111 1 for(x=0;x<8;x++)
112 1 { lcdwc(0x36);
113 2 lcdwc(y+0x80); //行地址
114 2 lcdwc(x+0x80+ii); //列地址
115 2 lcdwc(0x30);
116 2 lcdwd(disdata);
117 2 lcdwd(disdata);
C51 COMPILER V7.00 LCD2 08/26/2008 15:15:12 PAGE 3
118 2 }
119 1 }
120
121 //在任意位置显示任意图画 y1,x1,y2,x2为图画坐标,行数0-63,列数0-7, disdata为显示数据
122 void xiansi(unsigned char y1,unsigned char x1,unsigned char y2,unsigned char x2,unsigned char *disdata)
123 { unsigned char x,y;
124 1 for(y=y1;y<=y2;y++)
125 1 for(x=x1;x<=x2;x++)
126 1 { lcdwc(0x36);
127 2 if(y<32)
128 2 { lcdwc(y+0x80); //行地址
129 3 lcdwc(x+0x80); //列地址
130 3 }
131 2 else //显示下半部分
132 2 {
133 3 lcdwc(y-32+0x80); //行地址
134 3 lcdwc(x+0x80+8); //列地址
135 3 }
136 2 lcdwc(0x30);
137 2 lcdwd(disdata[2*(x2-x1+1)*(y-y1)+2*(x-x1)]); //
138 2 lcdwd(disdata[2*(x2-x1+1)*(y-y1)+2*(x-x1)+1]); //
139 2
140 2 }
141 1 }
142
143 //y为显示的行,x为显示的列,x1,x2为显示的数字
144 void shuzi(unsigned char y,unsigned char x,unsigned char x1,unsigned char x2)
145 {
146 1 lcdwc(0x30);
147 1 lcdwc(dizhi[y]+x);
148 1 if(x1<=9)
149 1 lcdwd(number[x1]);
150 1 else lcdwd(32);
151 1 if(x2<=9)
152 1 lcdwd(number[x2]);//执行这2个语句DDRAM地址计数器自动加1;
153 1 else lcdwd(32);
154 1 }
155
156 //显示任意字符 y为显示的行,x为显示的列,s为显示的字符
157 void zifu(unsigned char y,unsigned char x,unsigned char code *s)
158 {
159 1 unsigned char i=0;
160 1 lcdwc(0x30);
161 1 lcdwc(dizhi[y]+x);
162 1 x=x*2;
163 1 while(*s>0)
164 1 { lcdwd(*s);
165 2 s++;
166 2 x++;
167 2 if(x==16)
168 2 lcdwc(dizhi[y]);
169 2 }
170 1 }
171
172
173
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 592 ----
CONSTANT SIZE = 1038 ----
XDATA SIZE = ---- ----
C51 COMPILER V7.00 LCD2 08/26/2008 15:15:12 PAGE 4
PDATA SIZE = ---- ----
DATA SIZE = ---- 22
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -