📄 12864a-3.lst
字号:
C51 COMPILER V6.12 12864A_3 03/02/2007 13:44:57 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 12864A_3
OBJECT MODULE PLACED IN .\12864A-3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\12864A-3.c DEBUG OBJECTEXTEND
stmt level source
1 /*******************************************************************/
2 /* */
3 /* ME300B单片机开发系统演示程序 - 128*64LCD显示红外遥控器键值显示 */
4 /* */
5 //;* LCD型号:TS12864A-3(带汉字库)或兼容型号 控制器ST7920 */
6 //;* MCU:AT89S52 ,晶体频率:11.0592MHz */
7 /* */
8 /* 邮箱: gguoqing@willar.com */
9 /* 网站: http://www.willar.com */
10 /* 作者: gguoqing */
11 /* 时间: 2006/05/26 */
12 /* */
-
13 /*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved */
14 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */
15 /* */
16 /*******************************************************************/
17
18 #include <reg51.h>
19 #include <intrins.h>
20
21 #define uchar unsigned char
22 #define uint unsigned int
23 /*TS12864A-3 端口定义*/
24 #define LCD_data P0 //数据口
25 sbit LCD_RS = P3^5; //寄存器选择输入
26 sbit LCD_RW = P3^6; //液晶读/写控制
27 sbit LCD_EN = P3^4; //液晶使能控制
28 sbit LCD_PSB = P3^7; //串/并方式控制
29 sbit wela = P2^6;
30 sbit dula = P2^7;
31
32 uchar code dis1[] = {"天祥电子"};
33 uchar code dis2[] = {"www.txmcu.com"};
34 uchar code dis3[] = {"TX-1C 学习板 "};
35 uchar code dis4[] = {"是您最好的选择! "};
36
37 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
38 uchar IRDIS[2];
39 uchar IRCOM[4];
40 void delay0(uchar x); //x*0.14MS
41 void beep();
42 void dataconv();
43 void lcd_pos(uchar X,uchar Y); //确定显示位置
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++)
C51 COMPILER V6.12 12864A_3 03/02/2007 13:44:57 PAGE 2
55 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 while(lcd_busy());
89 1 LCD_RS = 0;
90 1 LCD_RW = 0;
91 1 LCD_EN = 0;
92 1 _nop_();
93 1 _nop_();
94 1 P0 = cmd;
95 1 delayNOP();
96 1 LCD_EN = 1;
97 1 delayNOP();
98 1 LCD_EN = 0;
99 1 }
100 /*******************************************************************/
101 /* */
102 /*写显示数据到LCD */
103 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
104 /* */
105 /*******************************************************************/
106 void lcd_wdat(uchar dat)
107 {
108 1 while(lcd_busy());
109 1 LCD_RS = 1;
110 1 LCD_RW = 0;
111 1 LCD_EN = 0;
112 1 P0 = dat;
113 1 delayNOP();
114 1 LCD_EN = 1;
115 1 delayNOP();
116 1 LCD_EN = 0;
C51 COMPILER V6.12 12864A_3 03/02/2007 13:44:57 PAGE 3
117 1 }
118 /*******************************************************************/
119 /* */
120 /* LCD初始化设定 */
121 /* */
122 /*******************************************************************/
123 void lcd_init()
124 {
125 1
126 1 LCD_PSB = 1; //并口方式
127 1
128 1 lcd_wcmd(0x34); //扩充指令操作
129 1 delay(5);
130 1 lcd_wcmd(0x30); //基本指令操作
131 1 delay(5);
132 1 lcd_wcmd(0x0C); //显示开,关光标
133 1 delay(5);
134 1 lcd_wcmd(0x01); //清除LCD的显示内容
135 1 delay(5);
136 1 }
137 /*********************************************************/
138 /* */
139 /* 主程序 */
140 /* */
141 /*********************************************************/
142 main()
143 {
144 1 uchar i;
145 1 delay(10); //延时
146 1 wela=0;
147 1 dula=0;
148 1 lcd_init(); //初始化LCD
149 1
150 1 lcd_pos(0,0); //设置显示位置为第一行的第1个字符
151 1 i = 0;
152 1 while(dis1[i] != '\0')
153 1 { //显示字符
154 2 lcd_wdat(dis1[i]);
155 2 i++;
156 2 }
157 1 lcd_pos(1,0); //设置显示位置为第二行的第1个字符
158 1 i = 0;
159 1 while(dis2[i] != '\0')
160 1 {
161 2 lcd_wdat(dis2[i]); //显示字符
162 2 i++;
163 2 }
164 1 lcd_pos(2,0); //设置显示位置为第三行的第1个字符
165 1 i = 0;
166 1 while(dis3[i] != '\0')
167 1 {
168 2 lcd_wdat(dis3[i]); //显示字符
169 2 i++;
170 2 }
171 1 lcd_pos(3,0); //设置显示位置为第四行的第1个字符
172 1 i = 0;
173 1 while(dis4[i] != '\0')
174 1 {
175 2 lcd_wdat(dis4[i]); //显示字符
176 2 i++;
177 2 }
178 1 while(1);
C51 COMPILER V6.12 12864A_3 03/02/2007 13:44:57 PAGE 4
179 1 }
180
181
182
183 /*********************************************************/
184 /* */
185 /* 延时x*0.14ms子程序 */
186 /* */
187 /*********************************************************/
188
189 void delay0(uchar x) //x*0.14MS
190 {
191 1 uchar i;
192 1 while(x--)
193 1 {
194 2 for (i = 0; i<13; i++) {}
195 2 }
196 1 }
197 /*********************************************************/
198 /* */
199 /* 设定显示位置 */
200 /* */
201 /*********************************************************/
202 void lcd_pos(uchar X,uchar Y)
203 {
204 1 uchar pos;
205 1 if (X==0)
206 1 {X=0x80;}
207 1 else if (X==1)
208 1 {X=0x90;}
209 1 else if (X==2)
210 1 {X=0x88;}
211 1 else if (X==3)
212 1 {X=0x98;}
213 1 pos = X+Y ;
214 1 lcd_wcmd(pos); //显示地址
215 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 310 ----
CONSTANT SIZE = 55 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 2
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 + -