📄 12864.lst
字号:
C51 COMPILER V7.50 12864 08/07/2007 10:01:30 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 12864
OBJECT MODULE PLACED IN D:\VW\WORK\CM12864\12864.OBJ
COMPILER INVOKED BY: d:\keil\C51\BIN\C51.EXE D:\VW\WORK\CM12864\12864.C DB SB OE
line level source
1 /*
2 12864LCD (ST7920)驱动程序
3 马文垒 2004/12/27
4
5 */
6
7 #include <reg52.h>
8 #include <intrins.h>
9 //引脚定义
10 sbit CS=P2^0; //片选 高电平有效 单片LCD使用时可固定高电平
11 sbit SID=P2^2; //数据
12 sbit SCLK=P2^4; //时钟
13 sbit PSB=P3^5; //低电平时表示用串口驱动,可固定低电平
14 sbit RESET=P3^7; //LCD复位,LCD模块自带复位电路。可不接
15
16 void write(bit start, unsigned char ddata);
17 void sendbyte(unsigned char bbyte);
18 void delaynms(unsigned int di);
19 void lcdinit(void);
20 void lcdtest(void);
21 void lcdcls(void);
22
23 unsigned char code ma[] ={" 汉字显示LCD "};
24 unsigned char code ma2[]={"自带字库图文混排"};
25 unsigned char code ma3[]={"控制IC:ST7920 "};
26 unsigned char code ma4[]={"湘潭大学信工学院"};
27
28 void lcdinit(void) //初始化LCD
29 {
30 1 delaynms(10); //启动等待,等LCM讲入工作状态
31 1 PSB=0; ; //串口驱动模式
32 1 RESET=0; delaynms(1); RESET=1; // 复位LCD
33 1 CS=1;
34 1 write(0,0x30); //8 位介面,基本指令集
35 1 write(0,0x0c); //显示打开,光标关,反白关
36 1 write(0,0x01); //清屏,将DDRAM的地址计数器归零
37 1 }
38
39 void write(bit start, unsigned char ddata) //写指令或数据
40 {
41 1 unsigned char start_data,Hdata,Ldata;
42 1 if(start==0) start_data=0xf8; //写指令
43 1 else start_data=0xfa; //写数据
44 1
45 1 Hdata=ddata&0xf0; //取高四位
46 1 Ldata=(ddata<<4)&0xf0; //取低四位
47 1 sendbyte(start_data); //发送起始信号
48 1 delaynms(5); //延时是必须的
49 1 sendbyte(Hdata); //发送高四位
50 1 delaynms(1); //延时是必须的
51 1 sendbyte(Ldata); //发送低四位
52 1 delaynms(1); //延时是必须的
53 1 }
54
55 void sendbyte(unsigned char bbyte) //发送一个字节
C51 COMPILER V7.50 12864 08/07/2007 10:01:30 PAGE 2
56 {
57 1 unsigned char i;
58 1 for(i=0;i<8;i++)
59 1 {
60 2 SID=bbyte&0x80; //取出最高位
61 2 SCLK=1;
62 2 SCLK=0;
63 2 bbyte<<=1; //左移
64 2 }
65 1 }
66
67 void delaynms(unsigned int di) //延时
68 {
69 1 unsigned int da,db;
70 1 for(da=0;da<di;da++)
71 1 for(db=0;db<10;db++);
72 1 }
73
74 void lcdtest(void) //图形方式下屏幕全黑
75 {
76 1 unsigned char i,j;
77 1 for(i=0;i<32;i++)
78 1 { write(0,0x80+i);write(0,0x80);
79 2 for(j=0;j<16;j++) write(1,0xff);
80 2 }
81 1
82 1 for(i=0;i<32;i++)
83 1 { write(0,0x80+i);write(0,0x88);
84 2 for(j=0;j<16;j++) write(1,0xff);
85 2 }
86 1 }
87
88 void lcdcls(void) //图形方式下清屏
89 {
90 1 unsigned char i,j;
91 1 for(i=0;i<32;i++)
92 1 { write(0,0x80+i);write(0,0x80);
93 2 for(j=0;j<16;j++) write(1,0x00);
94 2 }
95 1
96 1 for(i=0;i<32;i++)
97 1 { write(0,0x80+i);write(0,0x88);
98 2 for(j=0;j<16;j++) write(1,0x00);
99 2 }
100 1 }
101
102 void main(void)
103 {
104 1 unsigned char i;
105 1 lcdinit();
106 1
107 1 while(1)
108 1 {
109 2 write(0,0x80); for(i=0;i<16;i++) write(1,ma[i]);
110 2 write(0,0x90); for(i=0;i<16;i++) write(1,ma2[i]);
111 2 write(0,0x88); for(i=0;i<16;i++) write(1,ma3[i]);
112 2 write(0,0x98); for(i=0;i<16;i++) write(1,ma4[i]);
113 2
114 2 write(0,0x36); //图形方式
115 2 lcdtest();
116 2 lcdcls();
117 2 }
C51 COMPILER V7.50 12864 08/07/2007 10:01:30 PAGE 3
118 1
119 1 }
120
121
122
123
C51 COMPILER V7.50 12864 08/07/2007 10:01:30 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
ma2. . . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0011H 17
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
ma3. . . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0022H 17
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
ma4. . . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0033H 17
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
RESET. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B7H 1
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
CS . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A0H 1
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
write. . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0008H -----
start. . . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
ddata. . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
start_data . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
Hdata. . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0002H 1
Ldata. . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1
SCLK . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A4H 1
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
_delaynms. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
di . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
da . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0004H 2
db . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0002H 2
_sendbyte. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
bbyte. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
ma . . . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0000H 17
SID. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A2H 1
PSB. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B5H 1
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
lcdinit. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
lcdtest. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
j. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
lcdcls . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
j. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 499 ----
CONSTANT SIZE = 68 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 9
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -