?? lcd1602.lst
字號(hào):
C51 COMPILER V9.02 LCD1602 11/08/2012 21:34:06 PAGE 1
C51 COMPILER V9.02, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN ..\output\Lcd1602.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\source\Lcd1602.c OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(..\ou
-tput\Lcd1602.lst) OBJECT(..\output\Lcd1602.obj)
line level source
1 /*
2 **********************************************************************************************************
-***
3 * Kingst-51
4 * Development board samples
5 *
6 * (c) Copyright 2009-2012, Kingst Studio
7 * All Rights Reserved
8 *
9 * http://www.kingst.org
10 * 文件名:Lcd1602.c
11 * 描 述:1602液晶驅(qū)動(dòng)文件
12 * 版本號(hào):1.0.0
13 **********************************************************************************************************
-***
14 */
15
16 #define _LCD_1602_C
17 #include "config.h"
18 #include "Lcd1602.h"
19
20
21 /*
22 ********************************************************************************
23 * ----------------------- Local defines ---------------------------------------
24 ********************************************************************************
25 */
26 #define BusDelay() _nop_()
27
28
29
30 /*
31 ********************************************************************************
32 * ----------------------- Local variables -------------------------------------
33 ********************************************************************************
34 */
35 static uint8 tempDBUS;
36 static bit tempADDR0;
37 static bit tempADDR1;
38 static bit tempENLED;
39 static bit tempEA;
40
41
42 /*
43 ***************************************************************************************************
44 * ---------------------------------- Source codes ------------------------------------------------
45 ***************************************************************************************************
46 */
47 /*
48 * 函數(shù)名:LcdAccessStart
49 * 描 述:LCD訪問啟動(dòng)函數(shù),暫存需使用資源的當(dāng)前狀態(tài)
50 */
51 static void LcdAccessStart(void)
52 {
C51 COMPILER V9.02 LCD1602 11/08/2012 21:34:06 PAGE 2
53 1 tempEA = EA;
54 1 EA = 0;
55 1 tempDBUS = DBUS;
56 1 tempADDR0 = ADDR0;
57 1 tempADDR1 = ADDR1;
58 1 tempENLED = ENLED;
59 1 ENLED = 1;
60 1 }
61 /*
62 * 函數(shù)名:LcdAccessStop
63 * 描 述:LCD訪問結(jié)束函數(shù),回復(fù)所使用的資源狀態(tài)
64 */
65 static void LcdAccessStop(void)
66 {
67 1 DBUS = tempDBUS;
68 1 ADDR0 = tempADDR0;
69 1 ADDR1 = tempADDR1;
70 1 ENLED = tempENLED;
71 1 EA = tempEA;
72 1 }
73
74 /*
75 * 函數(shù)名:Lcd1602WaitReady
76 * 描 述:檢測(cè)并等待1602液晶空閑
77 */
78 static void Lcd1602WaitReady(void)
79 {
80 1 uint8 sta;
81 1
82 1 LCD1602_DB = 0xFF;
83 1 LCD1602_RS = 0;
84 1 LCD1602_RW = 1;
85 1 do {
86 2 LCD1602_E = 1;
87 2 BusDelay();
88 2 sta = LCD1602_DB;
89 2 LCD1602_E = 0;
90 2 } while ((sta&0x80) != 0); //BUSY標(biāo)志位為bit7
91 1 }
92 /*
93 * 函數(shù)名:Lcd1602WriteCmd
94 * 描 述:1602液晶命令寫入函數(shù)
95 * 輸 入:cmd - 待寫入命令
96 * 輸 出:無
97 */
98 static void Lcd1602WriteCmd(uint8 cmd)
99 {
100 1 LcdAccessStart();
101 1 Lcd1602WaitReady();
102 1 LCD1602_RS = 0;
103 1 LCD1602_RW = 0;
104 1 LCD1602_E = 1;
105 1 LCD1602_DB = cmd;
106 1 BusDelay();
107 1 LCD1602_E = 0;
108 1 LcdAccessStop();
109 1 }
110 /*
111 * 函數(shù)名:Lcd1602WriteDat
112 * 描 述:1602液晶數(shù)據(jù)寫入函數(shù)
113 * 輸 入:dat - 待寫入數(shù)據(jù)
114 * 輸 出:無
C51 COMPILER V9.02 LCD1602 11/08/2012 21:34:06 PAGE 3
115 */
116 static void Lcd1602WriteDat(uint8 dat)
117 {
118 1 LcdAccessStart();
119 1 Lcd1602WaitReady();
120 1 LCD1602_RS = 1;
121 1 LCD1602_RW = 0;
122 1 LCD1602_E = 1;
123 1 LCD1602_DB = dat;
124 1 BusDelay();
125 1 LCD1602_E = 0;
126 1 LcdAccessStop();
127 1 }
128
129 /*
130 * 函數(shù)名:Lcd1602ShowStr
131 * 描 述:在1602液晶上顯示字符串
132 * 輸 入:str - 待顯示字符串指針
133 * x - 屏幕顯示橫坐標(biāo)
134 * y - 屏幕顯示縱坐標(biāo)
135 * 輸 出:無
136 * 備 注:輸入的字符串必須符合C語言規(guī)范,即以'\0'-NULL為結(jié)束標(biāo)識(shí)符;
137 */
138 void Lcd1602ShowStr(const uint8 *str, uint8 x, uint8 y)
139 {
140 1 uint8 addr;
141 1
142 1 /* 由輸入的顯示坐標(biāo)計(jì)算顯示RAM的地址 */
143 1 if (y == 0) {
144 2 addr = 0x80;
145 2 }
146 1 else {
147 2 addr = 0xC0;
148 2 }
149 1 addr |= x;
150 1
151 1 /* 由起始顯示RAM地址連續(xù)寫入字符串 */
152 1 Lcd1602WriteCmd(addr);
153 1 while (*str != '\0') {
154 2 Lcd1602WriteDat(*str);
155 2 str++;
156 2 }
157 1 }
158 void Lcd1602Clear(uint8 x, uint8 y, uint8 len)
159 {
160 1 uint8 addr;
161 1
162 1 /* 由輸入的顯示坐標(biāo)計(jì)算顯示RAM的地址 */
163 1 if (y == 0) {
164 2 addr = 0x80;
165 2 }
166 1 else {
167 2 addr = 0xC0;
168 2 }
169 1 addr |= x;
170 1
171 1 /* 由起始顯示RAM地址連續(xù)寫入空格 */
172 1 Lcd1602WriteCmd(addr);
173 1 while (len > 0) {
174 2 Lcd1602WriteDat(' ');
175 2 len--;
176 2 }
C51 COMPILER V9.02 LCD1602 11/08/2012 21:34:06 PAGE 4
177 1 }
178
179 /*
180 * 函數(shù)名:Lcd1602Init
181 * 描 述:1602液晶初始化函數(shù)
182 */
183 void Lcd1602Init(void)
184 {
185 1 Lcd1602WriteCmd(0x38); //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
186 1 Lcd1602WriteCmd(0x0C); //顯示器開、光標(biāo)開、光標(biāo)允許閃爍
187 1 Lcd1602WriteCmd(0x06); //文字不動(dòng),光標(biāo)自動(dòng)右移
188 1 Lcd1602WriteCmd(0x01); //清屏
189 1
190 1 Lcd1602ShowStr("* Hello World! *", 0, 0);
191 1 Lcd1602ShowStr("key 0x-- pressed", 0, 1);
192 1 }
193
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 223 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 5
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -