📄 12232.lst
字号:
C51 COMPILER V6.12 12232 10/04/2008 14:05:23 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 12232
OBJECT MODULE PLACED IN .\12232.OBJ
COMPILER INVOKED BY: D:\KeilC51v612\C51\BIN\C51.EXE .\12232.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*-----------------------------------------------------------------*/
2 /*LCD12232液晶显示驱动实验. */
3 /*E1:主驱动器使能信号,写操作时低电平有效,读操作时高电平有效,负电压.*/
4 /*E2:从驱动器使能信号,写操作时低电平有效,读操作时高电平有效. */
5 /*RW:读写选择信号,低电平时写,高电平时读. */
6 /*A0:寄存器选择信号. */
7 /*各个引脚对应的接线关系如下所示: */
8 /* |DB0-----P1.0 | DB4-----P1.4 | E1-------P2.0 | */
9 /* |DB1-----P1.1 | DB5-----P1.5 | E2-------P2.1 | */
10 /* |DB2-----P1.2 | DB6-----P1.6 | RW-------P2.2 | */
11 /* |DB3-----P1.3 | DB7-----P1.7 | A0-------P2.3 | */
12 /*-----------------------------------------------------------------*/
13
14 #include<STC89C51.H>
15 #include <stdlib.h>
16 #include <intrins.h>
17 #include <string.h>
18
19 sbit E1=P2^0; /* 定义P2.0端口为E1 */
20 sbit E2=P2^1; /* 定义P2.1端口为E2 */
21 sbit RW=P2^2; /* 定义P2.2端口为RW */
22 sbit A0=P2^3; /* 定义P2.3端口为RS */
23
24 void delay(char k); /* 延时子程序 */
25 void lcdinitial(void); /* 初始化子程序 */
26 void clrram(void); /* 复位子程序 */
27 void writeMI(unsigned char i); /* 主驱动器发指令 */
28 void writeSI(unsigned char i); /* 从驱动器发指令 */
29 void writeMD(unsigned char i); /* 主驱动器发数据 */
30 void writeSD(unsigned char i); /* 从驱动器发数据 */
31 void SetPage(unsigned char page1,page2); /* 设置页地址 */
32 void display(unsigned char word,unsigned char layer,unsigned char width,unsigned char code *array);
33 unsigned char code arrayadress1[]; /* 定义数组arrayadress1 */
34 unsigned char code arrayadress2[]; /* 定义数组arrayadress2 */
35 unsigned char code arrayadress3[]; /* 定义数组arrayadress3 */
36 unsigned char code arrayadress4[]; /* 定义数组arrayadress4 */
37
38 /*-----------------主函数-----------------*/
39 void main(void)
40 {
41 1 delay(10); /* 延时子程序 */
42 1 lcdinitial(); /* 初始化子程序 */
43 1 delay(10); /* 延时子程序 */
44 1 while(1)
45 1 {
46 2 delay(400); /* 延时子程序 */
47 2 clrram(); /* 复位子程序(清屏子程序) */
48 2 display(6,0,12,arrayadress1);
49 2 //display(6,1,96,arrayadress1+16);
50 2 //display(5,2,80,arrayadress2);
51 2 //display(5,3,80,arrayadress2+16);
52 2 //delay(400); /* 延时子程序 */
53 2 //clrram(); /* 复位子程序(清屏子程序) */
54 2 //display(6,0,96,arrayadress3);
55 2 //display(6,1,96,arrayadress3+16);
C51 COMPILER V6.12 12232 10/04/2008 14:05:23 PAGE 2
56 2 //display(5,2,114,arrayadress4);
57 2 //display(5,3,114,arrayadress4+16);
58 2 //delay(400); /* 延时子程序 */
59 2 }
60 1 }
61
62 /* 初始化子程序 */
63 void lcdinitial(void)
64 {
65 1 writeMI(0xE2);
66 1 writeSI(0xE2); /* 复位指令 */
67 1 /****************************/
68 1 writeMI(0xAE);
69 1 writeSI(0xAE); /* 关闭显示工作状态 */
70 1 /****************************/
71 1 writeMI(0xA4);
72 1 writeSI(0xA4); /* 关闭休闲工作状态 */ /* 此指令要在设置显示开关指令以后才能使用 */
73 1 /****************************/
74 1 writeMI(0xA9);
75 1 writeSI(0xA9); /* 占空比1/32时为0xA9,占空比1/16时为0xA8 */
76 1 /****************************/
77 1 writeMI(0xA0);
78 1 writeSI(0xA0); /* 正向排序设置 */
79 1 /****************************/
80 1 writeMI(0xEE);
81 1 writeSI(0xEE); /* 结束指令改写方式 */
82 1 /****************************/
83 1 writeMI(0x00);
84 1 writeMI(0xC0); /* 设置主控制器显示起始行为第一行 */
85 1 writeSI(0x00);
86 1 writeSI(0xC0); /* 设置从控制器显示起始行为第一行 */
87 1 /****************************/
88 1 writeMI(0xAF);
89 1 writeSI(0xAF); /* 开启显示工作状态 */
90 1 }
91 /*******************以下函数是对内部函数进行的写指令的控制*******************/
92 /* 主驱动器发指令函数writMI(unsigned char i)是内部函数,从i发指令 */
93 void writeMI(unsigned char i)
94 {
95 1 do
96 1 {
97 2 E1=0;
98 2 E2=0;
99 2 A0=0;
100 2 RW=1;
101 2 E1=1;
102 2 _nop_();
103 2 } /* 判断主控制器忙 */
104 1 while(P1&0x80); /* 当P1端口为0x80时表示处于忙状态,此时不能进行其他操作 */
105 1 E1=0;
106 1 RW=0;
107 1 A0=0;
108 1 E1=1;
109 1 _nop_();
110 1 P1=i;
111 1 _nop_();
112 1 E1=0;/* 低电平时发指令 */
113 1 }
114
115 /* 从驱动器发指令函数writSI(unsigned char i)是内部函数,从i发指令 */
116 void writeSI(unsigned char i)
117 {
C51 COMPILER V6.12 12232 10/04/2008 14:05:23 PAGE 3
118 1 do
119 1 {
120 2 E1=0;
121 2 E2=0;
122 2 A0=0;
123 2 RW=1;
124 2 E2=1;
125 2 _nop_();
126 2 } /* 判断从控制器忙 */
127 1 while(P1&0x80); /* 当P1端口为0x80时表示处于忙状态,此时不能进行其他操作 */
128 1 E2=0;
129 1 RW=0;
130 1 A0=0;
131 1 E2=1;
132 1 _nop_();
133 1 P1=i;
134 1 _nop_();
135 1 E2=0; /* 低电平时发指令 */
136 1 }
137 /****************************************************************************/
138
139 /* 复位子程序(清屏子程序) */
140 void clrram(void)
141 {
142 1 unsigned char line;
143 1 unsigned char page;
144 1 for(page=0;page<4;page++) /* 页面选择,page为0时为第0页,page为1时为第1页,page为2时为第2页,page为3时为第3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -