📄 12864.lst
字号:
C51 COMPILER V7.06 12864 09/06/2008 21:30:31 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 12864
OBJECT MODULE PLACED IN 12864.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 12864.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*******************************************************************/
2 /* */
3 /* ME300B单片机开发系统演示程序 - 128*64LCD显示红外遥控器键值显示 */
4 /* */
5 /* LCD型号:TS12864A-3(带汉字库)或兼容型号 控制器ST7920 */
6 /* MCU:AT89S52 ,晶体频率:11.0592MHz */
7 /*******************************************************************/
8
9 #include <reg52.h>
10 #include <intrins.h>
11
12 #define uchar unsigned char
13 #define uint unsigned int
14 /*TS12864A-3 端口定义*/
15
16 /* #define LCD_data P0 //数据口
17 sbit LCD_RS = P2^0; //寄存器选择输入
18 sbit LCD_RW = P2^1; //液晶读/写控制
19 sbit LCD_EN = P2^2; //液晶使能控制
20 sbit LCD_PSB = P2^3; //串/并方式控制
21 sbit LCD_RST = P2^5; //液晶复位端口
22 */
23
24
25 #define LCD_data P0 //数据口
26 sbit LCD_RS = P2^4; //寄存器选择输入
27 sbit LCD_RW = P2^5; //液晶读/写控制
28 sbit LCD_EN = P2^6; //液晶使能控制
29 sbit LCD_PSB = P2^1; //串/并方式控制
30 sbit LCD_RST = P2^3; //液晶复位端口
31
32 uchar code dis1[] = {"赞成苏艳蕊是流氓"};
33 uchar code dis2[] = {"请举手!!"};
34 uchar code dis3[] = {"票数持续攀升中……"};
35 uchar code dis4[] = {"现在有 票了"};
36 uint kk;//输入要显示的数据
37
38 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
39 //uchar IRDIS[2];
40 void dataconv(uint number,uchar pos);
41 uchar num[3];
42 void lcd_pos(uchar X,uchar Y); //确定显示位置
43 void clean();
44 /*******************************************************************/
45 /* */
46 /* 延时函数 */
47 /* */
48 /*******************************************************************/
49 void delay(int ms)
50 {
51 1 while(ms--)
52 1 {
53 2 uchar i;
54 2 for(i=0;i<250;i++)
55 2 {
C51 COMPILER V7.06 12864 09/06/2008 21:30:31 PAGE 2
56 3 _nop_();
57 3 _nop_();
58 3 _nop_();
59 3 _nop_();
60 3 }
61 2 }
62 1 }
63 /*******************************************************************/
64 /* */
65 /*检查LCD忙状态 */
66 /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
67 /* */
68 /*******************************************************************/
69 bit lcd_busy()
70 {
71 1 bit result;
72 1 LCD_RS = 0;
73 1 LCD_RW = 1;
74 1 LCD_EN = 1;
75 1 delayNOP();
76 1 result = (bit)(P0&0x80);
77 1 LCD_EN = 0;
78 1 return(result);
79 1 }
80 /*******************************************************************/
81 /* */
82 /*写指令数据到LCD */
83 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
84 /* */
85 /*******************************************************************/
86 void lcd_wcmd(uchar cmd)
87 {
88 1 uchar res=200;
89 1 while((lcd_busy()) && (res) )
90 1 {res--;}
91 1 LCD_RS = 0;
92 1 LCD_RW = 0;
93 1 LCD_EN = 0;
94 1 _nop_();
95 1 _nop_();
96 1 P0 = cmd;
97 1 delayNOP();
98 1 LCD_EN = 1;
99 1 delayNOP();
100 1 LCD_EN = 0;
101 1 }
102 /*******************************************************************/
103 /* */
104 /*写显示数据到LCD */
105 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
106 /* */
107 /*******************************************************************/
108 void lcd_wdat(uchar dat)
109 {
110 1 uchar res=200;
111 1 while((lcd_busy()) && (res) )
112 1 {res--;}
113 1 LCD_RS = 1;
114 1 LCD_RW = 0;
115 1 LCD_EN = 0;
116 1 P0 = dat;
117 1 delayNOP();
C51 COMPILER V7.06 12864 09/06/2008 21:30:31 PAGE 3
118 1 LCD_EN = 1;
119 1 delayNOP();
120 1 LCD_EN = 0;
121 1 }
122
123 /*********************************************************/
124 /* */
125 /* 设定显示位置 */
126 /* */
127 /*********************************************************/
128 void lcd_pos(uchar X,uchar Y)
129 {
130 1 uchar pos;
131 1 if (X==0)
132 1 {X=0x80;}
133 1 else if (X==1)
134 1 {X=0x90;}
135 1 else if (X==2)
136 1 {X=0x88;}
137 1 else if (X==3)
138 1 {X=0x98;}
139 1 pos = X+Y ;
140 1 lcd_wcmd(pos); //显示地址
141 1 }
142 /*******************************************************************/
143 /* */
144 /* LCD初始化设定 */
145 /* */
146 /*******************************************************************/
147 void lcd_init()
148 {
149 1 LCD_RST = 0; //液晶复位
150 1 delay(30);
151 1 LCD_RST = 1;
152 1 delay(5);
153 1 LCD_PSB = 1; //并口方式
154 1
155 1 lcd_wcmd(0x34); //扩充指令操作
156 1 delay(5);
157 1 lcd_wcmd(0x30); //基本指令操作
158 1 delay(5);
159 1 lcd_wcmd(0x0C); //显示开,关光标
160 1 delay(5);
161 1 lcd_wcmd(0x01); //清除LCD的显示内容
162 1 delay(5);
163 1 }
164 void clean(void)
165 {
166 1 LCD_RST = 0; //液晶复位
167 1 lcd_init(); //初始化LCD
168 1 }
169 /*********************************************************/
170 /* */
171 /* 转换为ASCII码 */
172 /* */
173 /*********************************************************/
174 void dataconv(uint number,uchar pos)
175 {
176 1 uchar t;
177 1
178 1 num[2]= number/100;
179 1 num[1]=(number-num[2]*100)/10;
C51 COMPILER V7.06 12864 09/06/2008 21:30:31 PAGE 4
180 1 num[0]= number%10;
181 1
182 1 for (t=0;t<3;t++)
183 1 {
184 2 if(num[t]>9)
185 2 num[t]=num[t]+0x37;
186 2 else
187 2 num[t]=num[t]+0x30;
188 2 }
189 1 lcd_pos(3,pos);
190 1 lcd_wdat(num[2]); //第三位数显示
191 1 pos++;
192 1 lcd_pos(3,pos);
193 1 lcd_wdat(num[1]); //第二位数显示
194 1 pos++;
195 1 lcd_pos(3,pos);
196 1 lcd_wdat(num[0]); //第二位数显示
197 1 }
198
199 /*********************************************************/
200 /* */
201 /* 主程序 */
202 /* */
203 /*********************************************************/
204 main()
205 {
206 1 uchar hehe;
207 1
208 1 uchar i;
209 1 delay(10); //延时
210 1 lcd_init(); //初始化LCD
211 1
212 1 lcd_pos(0,0); //设置显示位置为第一行的第1个字符
213 1 i = 0;
214 1 while(dis1[i] != '\0')
215 1 { //显示字符
216 2 lcd_wdat(dis1[i]);
217 2 i++;
218 2 }
219 1 // delay(400);
220 1
221 1 // clean();
222 1 lcd_pos(1,0); //设置显示位置为第二行的第1个字符
223 1 i = 0;
224 1 while(dis2[i] != '\0')
225 1 {
226 2 lcd_wdat(dis2[i]); //显示字符
227 2 i++;
228 2 }
229 1 // delay(400);
230 1 // clean();
231 1 lcd_pos(2,0); //设置显示位置为第三行的第1个字符
232 1 i = 0;
233 1 while(dis3[i] != '\0')
234 1 {
235 2 lcd_wdat(dis3[i]); //显示字符
236 2 i++;
237 2 }
238 1
239 1 // delay(400);
240 1 // clean();
241 1
C51 COMPILER V7.06 12864 09/06/2008 21:30:31 PAGE 5
242 1 lcd_pos(3,0); //设置显示位置为第四行的第1个字符
243 1 i = 0;
244 1 while(dis4[i] != '\0')
245 1 {
246 2 lcd_wdat(dis4[i]); //显示字符
247 2 i++;
248 2 }
249 1 kk=0;
250 1 while(1)
251 1 {
252 2 //输入要显示的数据
253 2 kk++;
254 2 dataconv(kk,3); //记住咯 每行的位置是从0开始的
255 2 for(hehe=2;hehe>0;hehe--)
256 2 delay(100);
257 2 if(kk==200)
258 2 kk=0;
259 2 }
260 1
261 1
262 1
263 1
264 1 }
265
266
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 459 ----
CONSTANT SIZE = 64 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 3
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 + -