📄 16021.lst
字号:
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" //包含此头文件可直接操作内核的寄存器以及一些定义好的宏
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 // 函数: void LCD_DataWrite(unsigned char Data)
14 // 描述: 写一个字节的显示数据至LCD中的显示缓冲RAM当中
15 // 参数: Data 写入的数据
16 // 返回: 无
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); //读状态字并判断是否可进行读写操作
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 // 函数: void LCD_RegWrite(unsigned char Command)
38 // 描述: 写一个字节的数据至LCD中的控制寄存器当中
39 // 参数: Command 写入的数据(byte)
40 // 返回: 无
41 //========================================================================
42 void LCD_RegWrite(unsigned char Command)
43 {
44 1 unsigned int Read_Dat=0;
45 1 LCD_EP = 0; //EP、RS置低,RW置高,表为读状态字
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); //读状态字并判断是否可进行读写操作
54 1 LCD_RW = 0; //RW to Low,表为写指令
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 // 函数: unsigned char LCD_DataRead(void)
61 // 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
62 // 参数: 无
63 // 返回: 读出的数据,低八位有效(byte)
64 //========================================================================
65 unsigned char LCD_DataRead(void)
66 {
67 1 unsigned char Read_Dat=0;
68 1 LCD_EP = 0; //EP、RS置低,RW置高,表为读状态字
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); //读状态字并判断是否可进行读写操作
77 1 LCD_RS = 1; //RS置高,表为读数据
78 1 LCD_EP = 1; //EP to Hight
79 1 Read_Dat = LCD_Data_BUS_In; //读出数据
80 1 LCD_EP = 0;
81 1 return Read_Dat;
82 1 }
83 //========================================================================
84 // 函数: unsigned char LCD_StatusRead(void)
85 // 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
86 // 参数: 无
87 // 返回: 读出的数据,低八位有效(byte)
88 //========================================================================
89 unsigned char LCD_StatusRead(void)
90 {
91 1 unsigned char Read_Dat=0;
92 1 LCD_EP = 0; //EP、RS置低,RW置高,表为读状态字
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; //读状态字
98 1 LCD_EP = 0;
99 1 return Read_Dat;
100 1 }
101 //========================================================================
102 // 函数: void LCD_Init(void)
103 // 描述: LCD初始化程序,在里面会完成LCD初始所需要设置的许多寄存器,具体如果
104 // 用户想了解,建议查看DataSheet当中各个寄存器的意义
105 // 参数: 无
106 // 返回: 无
107 // 备注:
108 // 版本:
109 // 2007/11/14 First version
110 //========================================================================
111 //延时程序
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驱动所使用到的端口的初始化
129 1 Point = (unsigned char *)LCD_InitialCode; //获取初始化序列数据的首地址
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); //延一定的时间,一般要求4.5ms以上就可以,没有那么严格的了
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(); //无意义,只是测试读状态字的子程序
151 1 String_s = "LCD1602 Demo";
152 1 LCD_RegWrite(0x80); //设置地址为第一行第一个字符的位置
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); //设置地址为第二行第一个字符的位置
160 1 while(*String_s!=0)
161 1 {
162 2 LCD_DataWrite(*String_s);
163 2 String_s++;
164 2 }
165 1 //以下仅为测试使用,测试读数据程序的功能
166 1 uiTemp = LCD_DataRead(); //读数据
167 1 LCD_RegWrite(0x80); //设置地址后再读数据
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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -