📄 1602lcm.lst
字号:
C51 COMPILER V7.50 1602LCM 12/23/2004 17:50:01 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 1602LCM
OBJECT MODULE PLACED IN 1602LCM.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1602LCM.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*============================================================
2 1602LCD 串口驱动程序 2004/12/23
3 声明:
4 1、部分函数取自磁动力工作室 明皓
5 2、欢迎大家测试和改进
6 3、转贴请注明出处
7
8 接线图:
9
10 S51 LS164 1602LCD
11
12 P2.3 --第1脚
13 P2.4 --- 8
14 P2.5 ----------------- E
15 P2.6 ----------------- RS
16 RW 接地
17 3 ----------- D0
18 4 ----------- D1
19 5 ----------- D2
20 6 ----------- D3
21 10 ---------- D4
22 11 ---------- D5
23 12 ---------- D6
24 13 ---------- D7
25 2 接Vcc
26 7 GND
27 14 Vcc
28
29 [注:AT89S51使用12M晶振]
30 =============================================================*/
31 #include <regx51.h>
32
33 #define rs P2_6 //定义引脚
34 #define e P2_5
35 #define clk P2_4
36 #define d P2_3
37
38
39 //5ms延时
40 void Delay5Ms(void)
41 {
42 1 unsigned int TempCyc = 5552;
43 1 while(TempCyc--);
44 1 }
45
46 //400ms延时
47 void Delay400Ms(void)
48 {
49 1 unsigned char TempCycA = 5;
50 1 unsigned int TempCycB;
51 1 while(TempCycA--)
52 1 {
53 2 TempCycB=7269;
54 2 while(TempCycB--);
55 2 };
C51 COMPILER V7.50 1602LCM 12/23/2004 17:50:01 PAGE 2
56 1 }
57
58 void writelcd(bit command,unsigned char ddata)
59 {
60 1 unsigned char i;
61 1 if(command==0) rs = 0; else rs=1; //0 指令,1 数据
62 1 for(i=0;i<8;i++)
63 1 {
64 2 d=ddata&0x80; //取出最高位
65 2 clk=1;
66 2 clk=0;
67 2 ddata<<=1; //左移
68 2 }
69 1 e=1;
70 1 e=0;
71 1 }
72
73 void LCMInit(void) //LCM初始化
74 {
75 1 writelcd(0,0x38); //三次显示模式设置
76 1 Delay5Ms();
77 1 writelcd(0,0x38);
78 1 Delay5Ms();
79 1 writelcd(0,0x38);
80 1 Delay5Ms();
81 1 writelcd(0,0x38); //显示模式设置,开始要求每次检测忙信号
82 1 Delay5Ms();
83 1 writelcd(0,0x0c); // 显示开及光标设置
84 1 Delay5Ms();
85 1 writelcd(0,0x01); //显示清屏
86 1 Delay5Ms();
87 1 writelcd(0,0x06); // 显示光标移动设置
88 1 Delay5Ms();
89 1 }
90
91 //按指定位置显示一个字符
92 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
93 {
94 1 Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1
95 1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
96 1 X |= 0x80; //算出指令码
97 1 writelcd(0,X);
98 1 writelcd(1,DData);
99 1
100 1 }
101
102 void main(void)
103 {
104 1 unsigned char j,k;
105 1 Delay400Ms(); //启动等待,等LCM讲入工作状态
106 1 LCMInit(); //LCM初始化
107 1 while(1)
108 1 {
109 2 for(k=0;k<40;k++)
110 2 {
111 3 for(j=0;j<16;j++) DisplayOneChar(j,0,0x30+j+k);
112 3 Delay400Ms();Delay400Ms();Delay400Ms();
113 3 }
114 2 }
115 1 }
C51 COMPILER V7.50 1602LCM 12/23/2004 17:50:01 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 201 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -