📄 1620.lst
字号:
C51 COMPILER V7.08 1620 11/26/2007 15:21:05 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE 1620
OBJECT MODULE PLACED IN C:\1620.obj
COMPILER INVOKED BY: C:\Program Files\Keil51\C51\BIN\C51.EXE 1620.c BROWSE DEBUG OBJECTEXTEND OBJECT(C:\1620.obj)
line level source
1
2
3 /*****************************************************
4
5 TS1620-1的控制器为HD47780,其引脚功能如下:
6 Pin 1 2 3 4 5 6 7~17 15 16
7 功能 GND VDD VO RS RW E DB0~7 BL+ BL-
8 说明:
9 1 GND:电源地。
10 2 VDD:电源正 +5V DC。
11 3 VO:LCD偏压信号,用来对调整对比度,一般接10K电位器/电阻到地。
12 4 RS:数据/命令选择,用来选择DB0~7输入的是显示数据还是控制字信息
13 5 RW:读写选择.
14 6 E: 使能端,控制DB0~7的数据/命令的写入或者读取,上升或下降沿有效。
15 7-14 DB0~7:数据I/O,可选择8位数据或者4位数据(分两次传输)。
16 15 BL+:背光电源正输入 +5V DV。
17 16 BL-:背光电源地。
18
19 *连线图:
20 * DB0---DPROT.0 DB4---DPROT.4 RS-------------P2.5
21 * DB1---DPROT.1 DB5---DPROT.5 RW-------------P2.6
22 * DB2---DPROT.2 DB6---DPROT.6 E--------------P2.7
23 * DB3---DPROT.3 DB7---DPROT.7 VLCD 接10K 可调电阻到GND*
24
25 1基本操作时序:
26 1.1读状态:输入:RS=L, RW=H, E=H 输出:D0~D7=状态字
27 1.2写指令:输入:RS=L, RW=L, D0~D7=指令码,E=高脉冲 输出:无
28 1.3读数据:输入:RS=H, RW=H, E=H 输出:D0~D7=数据
29 1.4写数据:输入:RS=H, RW=L, D0~D7=数据,E=高脉冲 输出:无
30
31 2基本指令:
32 指令及编码 功能
33 01H 显示清屏: 1.数据指针清零2.所有显示清零
34 02H 显示回车: 1.数据指针清零
35 0011 1000 38H 显示模式设置: 16X2显示,5X7点阵,8位数据接口
36
37 3显示开/关及光标设置指令
38 指令及编码 功能
39 000001 NS N=1当读或写一个字符后地址指针加一,且光标加一
40 N=0当读或写一个字符后地址指针减一,且光标减一
41 S=1当写一个字符,整屏显示左移((N=1)或右移(N=0)
42 S=0当写一个字符,整屏显示不移动
43 000001 00 04H 当写一个字符后光标减一,整屏显示不移动
44 000001 01 05H 当写一个字符,整屏显示右移
45 000001 10 06H 当写一个字符后光标加一, 整屏显示不移动
46 000001 11 07H 当写一个字符,整屏显示左移
47
48 00001 DCB D=1开显示; D=0关显示
49 C=1显示光标;C=0不显示光标
50 B=1光标闪烁;B=0光标不闪烁
51 00001 000 08H 关显示; 不显光标; 光标不闪
52 00001 001 09H 关显示; 不显光标; 光标闪烁
53 00001 010 0AH 关显示; 显示光标; 光标不闪
54 00001 011 0BH 关显示; 显示光标; 光标闪烁
55 00001 100 0CH 开显示; 不显光标; 光标不闪
C51 COMPILER V7.08 1620 11/26/2007 15:21:05 PAGE 2
56 00001 101 0DH 开显示; 不显光标; 光标闪烁
57 00001 110 0EH 开显示; 显示光标; 光标不闪
58 00001 111 0FH 开显示; 显示光标; 光标闪烁
59
60 1xxxx xxx 80H+ 地址码 设置数据地址指针
61 0-27H 第一行
62 40H-67H 第二行
63 **************************************************************/
64
65
66 /***********************************************
67 .modle name: 头文件包含
68 .description:
69 ************************************************/
70 #include<reg51.h>
71 #include<absacc.h>
72 #include <intrins.h>
73
74 /***********************************************
75 .modle name: macros
76 .description: 宏定义
77 ************************************************/
78 #define DPORT P0
79
80 /***********************************************
81 .modle name: 函数原型声明
82 .description:
83 ************************************************/
84 unsigned Xpos; //列方向地址指针
85 unsigned Ypos; //行方向地址指针
86 void LcdWcn(unsigned);
87 void LcdWc(unsigned);
88 void WriteChar(unsigned);
89 void LcdPos();
90 void LcdWd(unsigned);
91 void LcdWdn(unsigned);
92 void posclear(unsigned char Xpos1);
93 void mDelay(unsigned long Delay);
94
95 /***********************************************
96 .modle name: 变量定义
97 .description:
98 ************************************************/
99 sbit RS = P2^5;
100 sbit RW = P2^6;
101 sbit E = P2^7;
102 sbit BacklightP = P3^0;
103 sbit BacklightN = P3^1;
104 unsigned char TimerReg;
105 unsigned char Second;//秒
106 unsigned char Minute;//分
107 unsigned char Hour; //小时
108 unsigned int dischar[]={'0','1','2','3','4','5','6','7','8','9'};
109
110 /***********************************************
111 .modle name: 函数定义
112 .description:
113 ************************************************/
114
115
116 /***********************************************
117 .modle name: mDelay
C51 COMPILER V7.08 1620 11/26/2007 15:21:05 PAGE 3
118 .description: 延迟函数
119 ************************************************/
120 void mDelay(unsigned long Delay)
121 {
122 1 int i;
123 1 for(;Delay>0;Delay--)
124 1 {
125 2 for(i=100;i>0;i--)
126 2 {;}
127 2 }
128 1 }
129
130 /***********************************************
131 .modle name: WriteChar
132 .description: 在指定的行与列显示,不会自动右移
133 需要自动右移显示用 LcdWd()
134
135 ************************************************/
136
137 void WriteChar(unsigned c)
138 {
139 1 LcdPos();//位置调整,目的是超过十时显示位置变化
140 1 LcdWd(c);
141 1 }
142
143 /***********************************************
144 .modle name: WaitIdle
145 .description: 正常读写操作之前检测LCD控制器是否忙,
146 确保STA7==0.
147 ************************************************/
148
149 void WaitIdle()
150 {
151 1 unsigned tmp;
152 1 DPORT=0xff;//每次检测状态时都初始化为高电平,如下时序分析。
153 1 /* 1 2 3 4
154 1 DPORT^7 _______ ___________ ________
155 1 | | | | |
156 1 0 ----------------------------------------------------
157 1 | | | | |
158 1 BF ______________ ________
159 1 | | | | |
160 1 0 -----------------------------------------------------
161 1 | | | | |
162 1 temp _______ ________
163 1 | | | |
164 1 0 -----------------------------------------------------
165 1
166 1 。必须DPORT^7为高时,temp 才能反应BF的真实状态(组合1和3)*/
167 1
168 1 RS=0;//command
169 1 RW=1;//read
170 1 E=1;//Enable BF此时才出现到总线。
171 1 _nop_();
172 1
173 1 for(;;)//循环:等到BF==0为止
174 1 {
175 2 tmp=DPORT;//读取BF
176 2 tmp&=0x80;//最高位为BF
177 2 if(tmp==0)//BF为低电平时,允许进行操作,并跳出循环
178 2 break;
179 2 }
C51 COMPILER V7.08 1620 11/26/2007 15:21:05 PAGE 4
180 1
181 1 E=0;//关闭, 以后每次读写都要设置为允许
182 1 }
183
184 /***********************************************
185 .modle name: LcdWdn
186 .description:不检测忙的写数据子程序
187 ************************************************/
188 void LcdWdn(unsigned c)
189 {
190 1 RS=1;//data
191 1 RW=0;//write
192 1 DPORT=c; //写入待写字符
193 1 E=1;//使能
194 1 _nop_();//wait
195 1 E=0;
196 1 }
197
198 /***********************************************
199 .modle name: LcdWd
200 .description: 带忙检测的写数据子程序
201
202 ************************************************/
203
204 void LcdWd(unsigned c)
205 {
206 1 WaitIdle();
207 1 LcdWdn(c);
208 1 }
209
210 /***********************************************
211 .modle name: LcdWcn
212 .description: 不检测忙信号的写命令控制字子程序
213 初始化重复写入38H时不需检测忙信号
214 ************************************************/
215 void LcdWcn(unsigned c)
216 {
217 1 RS=0;//select command register
218 1 RW=0;//write
219 1 DPORT=c;//command
220 1 mDelay(10);
221 1 E=1;//ennable
222 1 _nop_();//wait
223 1 E=0;
224 1 }
225
226 /***********************************************
227 .modle name: LcdWc
228 .description: 检测忙信号的写命令控制字子程序
229
230 ************************************************/
231 void LcdWc(unsigned c)
232 {
233 1 WaitIdle();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -