📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 04/02/2008 20:23:48 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2
3 #include <AT89X55.h>
4
5
6 #define Uchar unsigned char
7 #define Uint unsigned int
8 #define Ulong unsigned long
9
10 sbit E=P2^0;//E=P3^0;//
11 sbit RW=P2^1;//RW=P3^1;
12 sbit RS=P2^2;//RS=P3^2;
13
14 /** 定义字符串数组*/
15 code char STR1[]="中南大学铁道学院";
16 code char STR3[]="长沙瑞纬电气公司";
17
18
19 /*定义函数声明*/
20 void Delayus(Ulong t); /*延时函数*/
21 void BUSYLOOP(); /*判忙函数*/
22 void Write_command(Uchar CMD,Uchar bb); /*写控制字函数*/
23 void Write_data(Uchar CMD); /*写数据函数*/
24 void init(); /*初始化函数*/
25 void Display(Uchar *ptr,Uchar ddram); /*显字符串函数*/
26
27 /*void Delayus(Ulong t); /*延时函数*/
28
29 void Delayus(Ulong t)
30 {
31 1
32 1 Ulong w;
33 1 for(w=0;w<t;w++)
34 1 {;}
35 1 }
36
37 /* void BUSYLOOP() 判忙函数*/
38
39 void BUSYLOOP()
40 {
41 1
42 1
43 1 P0=0x0ff;//P1=0x0ff;
44 1 RS=0;
45 1 RW=1;
46 1
47 1 do {
48 2 E=1;
49 2 P1=P0;//P2=P1;
50 2 E=0;
51 2 }
52 1 //while(P2>0x7F);
53 1 while(P1>0x7F);
54 1 }
55
C51 COMPILER V7.06 MAIN 04/02/2008 20:23:48 PAGE 2
56
57
58 /* void Write_command(Uchar CMD,Uchar bb); /*写控制字函数*/
59
60 void Write_command(Uchar CMD,Uchar bb)
61 {
62 1 if(bb)
63 1 {BUSYLOOP();}
64 1
65 1 RS=0;
66 1 RW=0;
67 1 E=1;
68 1 //P1=CMD;
69 1 P0=CMD;
70 1 Delayus(1);
71 1 E=0;
72 1 }
73
74
75 /* void Write_data(Uchar CMD); /*写数据函数*/
76
77 void Write_data(Uchar CMD)
78
79 {
80 1 BUSYLOOP();
81 1 RS=1;
82 1 RW=0;
83 1 E=1;
84 1 //P1=CMD;
85 1 P0=CMD;
86 1 Delayus(1);
87 1 E=0;
88 1 }
89
90
91 /* void init(); /*初始化函数*/
92
93 void init()
94 {
95 1
96 1 Delayus(38);
97 1 Write_command(0x30,0); /*8位 基本指令*/
98 1 Delayus(1);
99 1 Write_command(0x30,0);/*8位 基本指令*/
100 1 Delayus(1);
101 1 Write_command(0x0C,1);/*开显示*/
102 1 Delayus(1);
103 1 Write_command(0x01,0);/*清屏*/
104 1 Delayus(20);
105 1 Write_command(0x06,1);/*光标右移*/
106 1
107 1 }
108
109
110 /*void Display(Uchar *ptr,Uchar ddram); /*显字符串函数*/
111
112 void Display(Uchar *ptr,Uchar ddram)
113 {
114 1
115 1 Uchar l,il,x;
116 1
117 1 int lie,hang;
C51 COMPILER V7.06 MAIN 04/02/2008 20:23:48 PAGE 3
118 1
119 1
120 1 l=0;
121 1 if(ddram<0x88)
122 1 { hang=0; } /*定位行地址:第一行*/
123 1 else if(ddram<0x90)
124 1 { hang=2; } /*定位行地址:第三行*/
125 1 else if(ddram<0x98)
126 1 { hang=1;} /*定位行地址:第二行*/
127 1 else { hang=2; } /*定位行地址:第四行*/
128 1
129 1 lie=0xf&ddram; /*定义列地址*/
130 1 if(lie>0x07)
131 1 {lie=lie-0x08;}
132 1 x=lie*2;
133 1 Write_command(ddram,0);/*定位显示起始地址*/
134 1 while ( (ptr[l])!='\0' )
135 1 { l++; }
136 1
137 1 for(il=0;il<l;il++)
138 1 {
139 2 Write_data(ptr[il]); /*输出单个字符*/
140 2 x++;
141 2 if(x==0x10)
142 2 { x=0;
143 3 hang++;
144 3 switch(hang)
145 3 {
146 4 case 0:Write_command(0x80,0);break;
147 4 case 1:Write_command(0x90,0);break;
148 4 case 2:Write_command(0x88,0);break;
149 4 case 3:Write_command(0x98,0);break;
150 4 }
151 3
152 3 if(hang>3)
153 3 {Write_command(0x80,0);
154 4 hang=0;
155 4 }
156 3
157 3 }
158 2
159 2
160 2 }
161 1
162 1 }
163
164
165 /*主函数开始*/
166
167 main()
168
169 {
170 1 init();
171 1 Display(STR1,0x80); //上面一行显示一个预定的字符串
172 1 Display(STR3,0x88);
173 1
174 1 Delayus(200);
175 1 Write_command(0x9c,0);//将光标移动0x9c
176 1 Write_command(0x0f,0);//将光标处反白闪烁
177 1 // Write_command(0x80,0); //进入睡眠状态
178 1 // Delayus(200);
179 1 // Write_command(0x0C,0); //唤醒
C51 COMPILER V7.06 MAIN 04/02/2008 20:23:48 PAGE 4
180 1 while(1)
181 1 {;}
182 1
183 1 }
184
185
186 /* 主函数结束**/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 451 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 16
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 + -