📄 lcd.lst
字号:
C51 COMPILER V7.50 LCD 08/23/2007 21:00:03 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<lcd.h>
3 /*================================
4 ==================================
5 ==========参考明浩的程序==========
6 ================================*/
7 /*---------------------------------------------------------------------
8 ------------------ LCD初始化-----------------------------------------*/
9
10 //LCD初始化程序;主要作用初始化LCD,对LCD进行复位以及设置;
11
12 void initialization(void) //定义函数;
13 {
14 1 delay(50); //延时5MS;
15 1 write_dictate(0x38,0); //写指令38H;不检测忙;
16 1 delay(50); //延时5MS;
17 1 write_dictate(0x38,0); //写指令38H;不检测忙;
18 1 delay(50); //延时5MS;
19 1 write_dictate(0x38,0); //写指令38H;不检测忙;
20 1 delay(50);
21 1 write_dictate(0x38,1); //显示模式设置;检测忙;
22 1 write_dictate(0x08,1); //关闭显示;检测忙;
23 1 write_dictate(0x01,1); //显示清屏;检测忙;
24 1 write_dictate(0x06,1); //显示光标移动设置;检测忙;
25 1 write_dictate(0x0C,1); //显示开及光标设置;检测忙;
26 1 }
27
28 /*---------------------------------------------------------------------
29 ------------------ 写指令--------------------------------------------*/
30
31 //写指令子程序;无返回值;输入二个变量I和J.
32 //I为要写入LCD的指令;J为判断要不要检测忙.
33 //如果J为0则不判断检测忙;
34 //如果J为1则判断检测忙;
35
36 void write_dictate(uchar i,j) //定义二个变量;
37 {
38 1 if(j) read_estate(); //根据需要检测忙;
39 1 LCD_DATA=i; //把要写入的数据送到LCD数据端;
40 1 LCD_RS=0; //RS置0;
41 1 LCD_RW=0; //RW置0;
42 1 LCD_E =1; //E端置0;
43 1 delay(10); //延时;
44 1 LCD_E =0; //E端置1;以锁存数据;
45 1 }
46
47 /*------------------------------------------------------------------
48 ------------------ 写数据------------------------------------------*/
49
50 //写数据子程序;无返回值;输入变量I;
51 //I为要写入LCD中的数据;
52 //数据类型CHAR形;
53
54 void write_data(uchar i) //定义输入变量值I;
55 {
C51 COMPILER V7.50 LCD 08/23/2007 21:00:03 PAGE 2
56 1 read_estate(); //检测忙信号;
57 1 LCD_DATA=i; //把I中数据送到LCD数据端;
58 1 LCD_RS=1; //RS置1;
59 1 LCD_RW=0; //RW置0;
60 1 LCD_E=0; //E置0;
61 1 delay(10); //短延时;
62 1 LCD_E=1; //E置1;以锁存数据;
63 1 }
64
65 /*----------------------------------------------------------------
66 -------------------读状态----------------------------------------*/
67
68 //读状态子程序;有返回值;返回值类型为CHAR型;
69 //读回的状态通过RETURN返回;
70
71 uchar read_estate(void) //定义有返回值的函数;
72 {
73 1 LCD_DATA=0Xff; //把LCD端口全置1方便读取信号;
74 1 LCD_RS=0; //RS置0;
75 1 LCD_RW=1; //RW置1;
76 1 LCD_E=0; //E端置0;
77 1 delay(10); //短延时;
78 1 LCD_E=1; //E端置1;以锁存数据;
79 1 while(LCD_DATA&0x80); //检测忙,则一直循环;
80 1 return(LCD_DATA); //返回读取的信号;
81 1 }
82
83 /*---------------------------------------------------------------
84 -------------------读数据--------------------------------------*/
85
86 //读数据子程序;有返回值,返回值类型为CHAR型;
87
88 /*uchar read_data(void) //定义有返回值的子函数;
89 {
90 LCD_DATA=0Xff; //LCD数据端口置1;
91 LCD_RS=1; //RS置1;
92 LCD_RW=1; //RW置1;
93 LCD_E=0; //E置0;
94 delay(10); //短延时;
95 LCD_E=1; //E置1;以锁存数据;
96 return(LCD_DATA); //返回读取的值;
97 }
98
99
100 /*---------------------------------------------------------------
101 -------------------在指定位置显示一个字符----------------------*/
102 void displayonechar(uchar x, y,ddata)
103 {
104 1 y &= 0x01;
105 1 x &= 0x0f; //限制X不能大于15,Y不能大于1
106 1 if (y) x+= 0x40; //当要显示第二行时地址码+0x40;
107 1 x+= 0x80; //算出指令码
108 1 write_dictate(x,0); //这里不检测忙信号,发送地址码
109 1 write_data(ddata);
110 1 }
111
112 /*---------------------------------------------------------------
113 -------------------在指定位置显示一串字符----------------------*/
114 void displaylistchar(uchar x,y,uchar code *ddata)
115 {
116 1 uchar a=0;
117 1 y&=0x01;
C51 COMPILER V7.50 LCD 08/23/2007 21:00:03 PAGE 3
118 1 x&=0xf;
119 1 while(ddata[a]>0x20)
120 1 {
121 2 if(x<=0xff)
122 2 {
123 3 displayonechar(x, y,ddata[a]);
124 3 a++;
125 3 x++;
126 3 }
127 2 }
128 1 }
129
130 /*---------------------------------------------------------------
131 -------------------延时子程序----------------------------------*/
132 void delay(uint a)
133 {
134 1 uint b;
135 1 for(b=0;b<a;b++);
136 1 }
137
138
139 //400ms延时
140 void delay400ms(void)
141 {
142 1 uchar a = 5;
143 1 uint b;
144 1 while(a--)
145 1 {
146 2 b=7269;
147 2 while(b--);
148 2 }
149 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 301 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
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 + -