📄 smc162.lst
字号:
C51 COMPILER V7.20 SMC162 04/13/2006 13:35:21 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE SMC162
OBJECT MODULE PLACED IN .\SMC162.obj
COMPILER INVOKED BY: C:\Keil_C51\C51\BIN\C51.EXE ..\SMC162\SMC162.c BROWSE INCDIR(D:\暂存\keil_prj\STI SOFT\STI51\LCD\SM
-C162\) DEBUG OBJECTEXTEND PRINT(.\SMC162.lst) OBJECT(.\SMC162.obj)
line level source
1 /*
2 * Copyright (C) 2006, 华中科技大学电气与电子科技创新中心
3 * All Rights Reserved.
4 *
5 * 文件名: smc162.c
6 * 文件描述: 16*2字符液晶驱动主文件
7 *
8 * 当前版本: 1.0
9 * 作者: ZhangLi(zhangli.xing@gmail.com)
10 * 完成日期: 2005年12月12日
11 *
12 */
13 #include "SMC162.h"
14
15 /***************************************
16 说明: LCD写函数,完成LCD写操作的物理时序
17 value: 写的具体值
18 RS: 0 - 写指令
19 1 - 写数据
20 *****************************************/
21 void LcdWrite(unsigned char value , bit RS)
22 {
23 1 /* 1. 设置RS信号线 */
24 1 Lcd_RS = RS ;
25 1 /* 2. 设置RW信号线为读 */
26 1 Lcd_RW = 0 ;
27 1 /* 3. 设置LCD片选 */
28 1 SELECT_LCD();
29 1 /* 4. 通过P0端口写值 */
30 1 P0 = value ;
31 1 /* 5. 锁存 */
32 1 SELECT_NONE();
33 1 }
34
35 /***************************************
36 说明: LCD读函数,完成LCD读操作的物理时序
37 RS: 0 - 写指令
38 1 - 写数据
39 return: 读出的具体值
40 *****************************************/
41 unsigned char LcdRead(bit RS)
42 {
43 1 unsigned char rt ;
44 1
45 1 /* 1. 设置RS信号线 */
46 1 Lcd_RS = RS ;
47 1 /* 2. 设置RW信号线为读 */
48 1 Lcd_RW = 1 ;
49 1 /* 3. 释放P0口 */
50 1 P0 = 0xff ;
51 1 /* 4. 设置LCD片选 */
52 1 SELECT_LCD();
53 1 SELECT_LCD();
54 1 SELECT_LCD();
C51 COMPILER V7.20 SMC162 04/13/2006 13:35:21 PAGE 2
55 1 SELECT_LCD();
56 1 /* 5. 通过P0端口读值 */
57 1 rt = P0 ;
58 1 /* 6. 锁存 */
59 1 SELECT_NONE();
60 1
61 1 return rt ;
62 1 }
63
64 /***************************************
65 说明: LCD写指令
66 value: 写的具体值
67 attrib: 0 - 不检测忙信号
68 1 - 监测忙信号
69 *****************************************/
70 void LcdWriteCmd(unsigned char value , unsigned char attrib)
71 {
72 1 /* 监测忙状态 */
73 1 if(attrib)
74 1 while( LcdRead(0)&0x80 ) ;
75 1
76 1 LcdWrite(value , 0);
77 1 }
78
79 /***************************************
80 说明: LCD写数据
81 *****************************************/
82 void LcdWriteData(unsigned char value)
83 {
84 1 /* 监测忙状态 */
85 1 while( LcdRead(0)&0x80 ) ;
86 1
87 1 LcdWrite(value , 1);
88 1 }
89
90 /***************************************
91 说明: LCD读数据
92 *****************************************/
93 unsigned char LcdReadData()
94 {
95 1 /* 监测忙状态 */
96 1 while( LcdRead(0)&0x80 ) ;
97 1
98 1 return LcdRead(1);
99 1 }
100
101 /***************************************
102 说明: 短延时, 5ms
103 *****************************************/
104 void Delay5Ms(void)
105 {
106 1 unsigned int i = 5552;
107 1 while(i--);
108 1 }
109
110 /***************************************
111 说明: 长延时 , 400ms
112 *****************************************/
113 void Delay400Ms(void)
114 {
115 1 unsigned char i = 80;
116 1 while(i--)
C51 COMPILER V7.20 SMC162 04/13/2006 13:35:21 PAGE 3
117 1 Delay5Ms();
118 1 }
119 /***************************************
120 说明: LCD初始化函数,需要按照产品
121 说明书完成
122 *****************************************/
123 void LcdInit(void)
124 {
125 1 Delay400Ms();
126 1
127 1 /* 写指令0x38连续3次, 不检测忙信号*/
128 1 LcdWriteCmd(0x38 , 0 );
129 1 Delay5Ms();
130 1
131 1 LcdWriteCmd(0x38 , 0 );
132 1 Delay5Ms();
133 1
134 1 LcdWriteCmd(0x38 , 0 );
135 1 Delay5Ms();
136 1
137 1 /* 以后的读写操作均要判断忙信号 */
138 1 LcdWriteCmd(0x38 , 1 );
139 1 /* 先设置关屏 */
140 1 LcdWriteCmd(0x08 , 1 );
141 1 /* 清屏 */
142 1 LcdWriteCmd(0x01 , 1 );
143 1 /* 设置光标显示模式 */
144 1 LcdWriteCmd(0x06 , 1 );
145 1 /* 开屏并显示光标 */
146 1 LcdWriteCmd(0x0c , 1 );
147 1 }
148
149 /***************************************
150 说明: 设置光标定位
151 *****************************************/
152 void LocateXY(char x , char y)
153 {
154 1 unsigned char temp;
155 1
156 1 temp = x & 0xf;
157 1 y &= 0x1;
158 1 if ( y )temp |= 0x40;
159 1 temp |= 0x80;
160 1 LcdWriteCmd(temp,1);
161 1 }
162
163 /***************************************
164 说明: 显示字符
165 x: 横坐标 y: 纵坐标
166 value: 显示的字符
167 *****************************************/
168 void PutChar(char x , char y , char value)
169 {
170 1 LocateXY(x,y);
171 1 LcdWriteData(value);
172 1 }
173
174 /***************************************
175 说明: 显示字符串
176 *****************************************/
177 void PutStr(char x , char y , char* str)
178 {
C51 COMPILER V7.20 SMC162 04/13/2006 13:35:21 PAGE 4
179 1 unsigned char i,len=0;
180 1 /* 计算字符串长度 */
181 1 while (str[len] >31)
182 1 len++;
183 1
184 1 /* 显示字符串 */
185 1 for (i=0;i<len;i++)
186 1 {
187 2 PutChar(x++,y,str[i]);
188 2 if ( x == 16 )
189 2 {
190 3 x = 0; y ^= 1;
191 3 }
192 2 }
193 1 }
194
195
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 322 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -