📄 lcd.lst
字号:
C51 COMPILER V8.02 LCD 10/08/2008 17:00:29 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: D:\keil 8.02\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"lcd.h"
2
3 /**************************************************************
4 精确延时 1 ms XALT:11.0592M
5 ***************************************************************/
6 /*void Delay1Ms(void)
7 {
8 unsigned char i=131;
9 while(i!=0){
10 _nop_();
11 _nop_();
12 _nop_();
13 _nop_();
14 _nop_();
15 i--;
16 }
17 }
18
19 /**************************************************************
20 精确延时 N ms XALT:11.0592M
21 ***************************************************************/
22 /*void DelayMs(unsigned int Delay)
23 {
24 unsigned char i;
25 for(i=Delay;i!=0;i--){
26 Delay1Ms();
27 }
28 }
29
30 /**************************************************************
31 LCD 写数据
32 ***************************************************************/
33 void WriteDataLcd(unsigned char Dat)
34 {
35 1 ReadStatusLcd(); // 检测忙
36 1 LcdData = Dat;
37 1 LcdRS = 1;
38 1 LcdRW = 0;
39 1 LcdE = 0; // 若晶振速度太高可以在这后加小的延时
40 1 DelayMs(1);
41 1 LcdE = 1; // 写数据 E=1, Rw=0, Rs=1
42 1 }
43
44 /**************************************************************
45 LCD 写命令
46 ***************************************************************/
47 void WriteCmdLcd(unsigned char Cmd, BusyCmd) // BusyCmd为0时忽略忙检测
48 {
49 1 if (BusyCmd) ReadStatusLcd(); // 根据需要检测忙
50 1 LcdData = Cmd;
51 1 LcdRS = 0;
52 1 LcdRW = 0;
53 1 LcdE = 0;
54 1 DelayMs(1);
55 1 LcdE = 1; // 写指令 E=1, Rw=0, Rs=0
C51 COMPILER V8.02 LCD 10/08/2008 17:00:29 PAGE 2
56 1 }
57
58
59 /**************************************************************
60 检测状态
61 ***************************************************************/
62 unsigned char ReadStatusLcd(void)
63 {
64 1 LcdData = 0xFF;
65 1 LcdRS = 0;
66 1 LcdRW = 1;
67 1 LcdE = 0;
68 1 DelayMs(1);
69 1 LcdE = 1; // 读状态 E=1, Rw=1, Rs=0
70 1 while (LcdData & Busy); // 检测忙信号
71 1 return(LcdData);
72 1 }
73
74 /**************************************************************
75 LCD初始化
76 ***************************************************************/
77 void LcdInit(void)
78 {
79 1 LcdData = 0; // 给数据端口送0
80 1 WriteCmdLcd(0x38,0); // 三次显示模式设置,不检测忙信号
81 1 DelayMs(5);
82 1
83 1 WriteCmdLcd(0x38,1); // 显示模式设置,开始要求每次检测忙信号
84 1 WriteCmdLcd(0x08,1); // 关闭显示
85 1 WriteCmdLcd(0x01,1); // 显示清屏
86 1 WriteCmdLcd(0x06,1); // 显示光标移动设置
87 1 WriteCmdLcd(0x0C,1); // 显示开及光标设置
88 1 }
89
90 /**************************************************************
91 按指定位置显示一个字符
92 ***************************************************************/
93 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
94 {
95 1 Y &= 0x1;
96 1 X &= 0xF; // 限制X不能大于15,Y不能大于1
97 1 if (Y) X |= 0x40; // 当要显示第二行时地址码 0x40;
98 1 X |= 0x80; // 算出指令码
99 1 WriteCmdLcd(X, 0); // 这里不检测忙信号,发送地址码
100 1 WriteDataLcd(DData);
101 1 }
102
103 /**************************************************************
104 按指定位置显示一串字符
105 ***************************************************************/
106 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
107 {
108 1 unsigned char ListLength;
109 1
110 1 ListLength = 0;
111 1 Y &= 0x1;
112 1 X &= 0xF; // 限制X不能大于15,Y不能大于1
113 1 while (DData[ListLength]>0x20) // 若到达字串尾则退出
114 1 {
115 2 if (X <= 0xF) // X坐标应小于0xF
116 2 {
117 3 DisplayOneChar(X, Y, DData[ListLength]); // 显示单个字符
C51 COMPILER V8.02 LCD 10/08/2008 17:00:29 PAGE 3
118 3 ListLength = ListLength+1 ;
119 3 X = X+1 ;
120 3 }
121 2 }
122 1 }
123
124
125
126 /*void main(void)
127 {
128 DelayMs(400); // 启动等待,等LCM讲入工作状态
129 LcdInit(); // LCD初始化
130
131 DisplayListChar(1, 1, Name);
132 DisplayListChar(2, 0, Logo);
133
134 while(1)
135 {
136 ;
137 }
138 }*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 221 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 8
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 + -