?? 16021.lst
字號(hào):
C51 COMPILER V9.00 16021 08/18/2010 01:29:03 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE 16021
OBJECT MODULE PLACED IN 16021.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 16021.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "REG51.h"
2 #include "intrins.h" //包含此頭文件可直接操作內(nèi)核的寄存器以及一些定義好的宏
3 // this file for MCU I/O port or the orther`s hardware config
4 // for LCD Display
5 // Define for the port use by LCD Driver
6 sbit LCD_EP=P2^7;
7 sbit LCD_RW=P2^6;
8 sbit LCD_RS=P2^5;
9 #define LCD_Data_BUS_Out P1
10 #define LCD_Data_BUS_In P1
11 code unsigned char LCD_InitialCode[]={0x30,0x30,0x30,0x38,0x01,0x06,0x0c};
12 //========================================================================
13 // 函數(shù): void LCD_DataWrite(unsigned char Data)
14 // 描述: 寫(xiě)一個(gè)字節(jié)的顯示數(shù)據(jù)至LCD中的顯示緩沖RAM當(dāng)中
15 // 參數(shù): Data 寫(xiě)入的數(shù)據(jù)
16 // 返回: 無(wú)
17 //========================================================================
18 void LCD_DataWrite(unsigned char Data)
19 {
20 1 unsigned int Read_Dat=0;
21 1 LCD_EP = 0; //EP、RS端口為低,RW為高
22 1 LCD_RS = 0;
23 1 LCD_RW = 1;
24 1 do{
25 2 LCD_Data_BUS_In = 0xff;
26 2 LCD_EP = 1;
27 2 Read_Dat = LCD_Data_BUS_In&0x80;
28 2 LCD_EP = 0;
29 2 }while(Read_Dat!=0); //讀狀態(tài)字并判斷是否可進(jìn)行讀寫(xiě)操作
30 1 LCD_RW = 0; //EP RW to Low
31 1 LCD_RS = 1; //RS Hight
32 1 LCD_Data_BUS_Out = Data;
33 1 LCD_EP = 1; //EP to Hight
34 1 LCD_EP = 0; //EP to low
35 1 }
36 //========================================================================
37 // 函數(shù): void LCD_RegWrite(unsigned char Command)
38 // 描述: 寫(xiě)一個(gè)字節(jié)的數(shù)據(jù)至LCD中的控制寄存器當(dāng)中
39 // 參數(shù): Command 寫(xiě)入的數(shù)據(jù)(byte)
40 // 返回: 無(wú)
41 //========================================================================
42 void LCD_RegWrite(unsigned char Command)
43 {
44 1 unsigned int Read_Dat=0;
45 1 LCD_EP = 0; //EP、RS置低,RW置高,表為讀狀態(tài)字
46 1 LCD_RS = 0;
47 1 LCD_RW = 1;
48 1 do{
49 2 LCD_Data_BUS_In = 0xff;
50 2 LCD_EP = 1;
51 2 Read_Dat = LCD_Data_BUS_In&0x80;
52 2 LCD_EP = 0;
53 2 }while(Read_Dat!=0); //讀狀態(tài)字并判斷是否可進(jìn)行讀寫(xiě)操作
54 1 LCD_RW = 0; //RW to Low,表為寫(xiě)指令
55 1 LCD_Data_BUS_Out = Command;
C51 COMPILER V9.00 16021 08/18/2010 01:29:03 PAGE 2
56 1 LCD_EP = 1; //EP to Hight
57 1 LCD_EP = 0;
58 1 }
59 //========================================================================
60 // 函數(shù): unsigned char LCD_DataRead(void)
61 // 描述: 從LCD中的顯示緩沖RAM當(dāng)中讀一個(gè)字節(jié)的顯示數(shù)據(jù)
62 // 參數(shù): 無(wú)
63 // 返回: 讀出的數(shù)據(jù),低八位有效(byte)
64 //========================================================================
65 unsigned char LCD_DataRead(void)
66 {
67 1 unsigned char Read_Dat=0;
68 1 LCD_EP = 0; //EP、RS置低,RW置高,表為讀狀態(tài)字
69 1 LCD_RS = 0;
70 1 LCD_RW = 1;
71 1 do{
72 2 LCD_Data_BUS_In = 0xff;
73 2 LCD_EP = 1;
74 2 Read_Dat = LCD_Data_BUS_In&0x80;
75 2 LCD_EP = 0;
76 2 }while(Read_Dat!=0); //讀狀態(tài)字并判斷是否可進(jìn)行讀寫(xiě)操作
77 1 LCD_RS = 1; //RS置高,表為讀數(shù)據(jù)
78 1 LCD_EP = 1; //EP to Hight
79 1 Read_Dat = LCD_Data_BUS_In; //讀出數(shù)據(jù)
80 1 LCD_EP = 0;
81 1 return Read_Dat;
82 1 }
83 //========================================================================
84 // 函數(shù): unsigned char LCD_StatusRead(void)
85 // 描述: 從LCD中的顯示緩沖RAM當(dāng)中讀一個(gè)字節(jié)的顯示數(shù)據(jù)
86 // 參數(shù): 無(wú)
87 // 返回: 讀出的數(shù)據(jù),低八位有效(byte)
88 //========================================================================
89 unsigned char LCD_StatusRead(void)
90 {
91 1 unsigned char Read_Dat=0;
92 1 LCD_EP = 0; //EP、RS置低,RW置高,表為讀狀態(tài)字
93 1 LCD_RS = 0;
94 1 LCD_RW = 1;
95 1 LCD_Data_BUS_In = 0xff;
96 1 LCD_EP = 1;
97 1 Read_Dat = LCD_Data_BUS_In; //讀狀態(tài)字
98 1 LCD_EP = 0;
99 1 return Read_Dat;
100 1 }
101 //========================================================================
102 // 函數(shù): void LCD_Init(void)
103 // 描述: LCD初始化程序,在里面會(huì)完成LCD初始所需要設(shè)置的許多寄存器,具體如果
104 // 用戶想了解,建議查看DataSheet當(dāng)中各個(gè)寄存器的意義
105 // 參數(shù): 無(wú)
106 // 返回: 無(wú)
107 // 備注:
108 // 版本:
109 // 2007/11/14 First version
110 //========================================================================
111 //延時(shí)程序
112 void TimeDelay(int Time)
113 {
114 1 int i;
115 1 while(Time > 0)
116 1 {
117 2 for(i = 0;i < 800;i++)
C51 COMPILER V9.00 16021 08/18/2010 01:29:03 PAGE 3
118 2 {
119 3 _nop_();
120 3 }
121 2 Time --;
122 2 }
123 1 }
124 void LCD_Init(void)
125 {
126 1 unsigned char uiTemp=0,i;
127 1 unsigned char * Point;
128 1 //LCD驅(qū)動(dòng)所使用到的端口的初始化
129 1 Point = (unsigned char *)LCD_InitialCode; //獲取初始化序列數(shù)據(jù)的首地址
130 1 LCD_EP = 0;
131 1 LCD_RS = 0;
132 1 LCD_RW = 0;
133 1 for(i=0;i<4;i++)
134 1 {
135 2 uiTemp = *Point++;
136 2 LCD_Data_BUS_Out = uiTemp;
137 2 LCD_EP = 1; //EP to Hight
138 2 LCD_EP = 0; //EP to Hight
139 2 TimeDelay(4); //延一定的時(shí)間,一般要求4.5ms以上就可以,沒(méi)有那么嚴(yán)格的了
140 2 }
141 1 LCD_RegWrite(*Point++);
142 1 LCD_RegWrite(*Point++);
143 1 LCD_RegWrite(*Point++);
144 1 }
145 void main()
146 {
147 1 unsigned char uiTemp=0;
148 1 unsigned char * String_s;
149 1 LCD_Init();
150 1 uiTemp = LCD_StatusRead(); //無(wú)意義,只是測(cè)試讀狀態(tài)字的子程序
151 1 String_s = "LCD1602 Demo";
152 1 LCD_RegWrite(0x80); //設(shè)置地址為第一行第一個(gè)字符的位置
153 1 while(*String_s!=0) //顯示字符串
154 1 {
155 2 LCD_DataWrite(*String_s);
156 2 String_s++;
157 2 }
158 1 String_s = " Mzdesign";
159 1 LCD_RegWrite(0xc0); //設(shè)置地址為第二行第一個(gè)字符的位置
160 1 while(*String_s!=0)
161 1 {
162 2 LCD_DataWrite(*String_s);
163 2 String_s++;
164 2 }
165 1 //以下僅為測(cè)試使用,測(cè)試讀數(shù)據(jù)程序的功能
166 1 uiTemp = LCD_DataRead(); //讀數(shù)據(jù)
167 1 LCD_RegWrite(0x80); //設(shè)置地址后再讀數(shù)據(jù)
168 1 uiTemp = LCD_DataRead();
169 1 while(1)
170 1 {
171 2 ;
172 2 }
173 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 344 ----
CONSTANT SIZE = 30 ----
XDATA SIZE = ---- ----
C51 COMPILER V9.00 16021 08/18/2010 01:29:03 PAGE 4
PDATA SIZE = ---- ----
DATA SIZE = ---- 5
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -