📄 text2.lst
字号:
C51 COMPILER V7.20 TEXT2 05/13/2009 19:07:15 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: E:\单片机原理与应用\实验内容\Keil 绿色版\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //带中文字库的12864LCD显示程序
2 #include <reg52.H>
3 #include <intrins.H>
4
5 #define uchar unsigned char
6 #define uint unsigned int
7
8 sbit dula = P2^6;
9 sbit wela = P2^7;
10 //SCM12864-05端口定义
11 #define LCD_DATA P0 //数据口
12 sbit RS = P2^0; //并行的指令/数据选择信号, H数据, L命令
13 sbit RW = P2^1; //并行读写选择信号, H读, L写
14 sbit E = P2^2; //并行使能端, H有效, L无效
15 sbit PSB = P2^3; //并/串接口选择, H并,L串
16 sbit RET = P1^0; //复位, L有效
17 //sbit CS1= P2^4;
18 //sbit CS2=P2^5;
19
20 uchar code datas1[] = {"广东工业大学"};
21 uchar code datas2[] = {"自动化学院2004级"};
22 uchar code datas3[] = {"网络工程 (4)班"};
23 uchar code datas4[] = {"fengmk2@gmail.com"};
24
25 //延时约2us
26 void delayUs()
27 {
28 1 _nop_();_nop_();
29 1 }
30 //延时 a * 1ms
31 void delayMs(uint a)
32 {
33 1 uint i, j;
34 1 for(i = a; i > 0; i--)
35 1 for(j = 100; j > 0; j--);
36 1 }
37
38 //检测LCD是否处于忙状态, 若忙返回1, 空闲返回0
39 bit checkBusy()
40 {
41 1 bit busy;
42 1 RS = 0;
43 1 RW = 1;
44 1 E = 1;
45 1 delayUs();
46 1 busy = (bit)(LCD_DATA&0x80);
47 1 E = 0;
48 1 return busy;
49 1 }
50
51 //等待LCD到空闲
52 void wait()
53 {
54 1 while(checkBusy());
55 1 }
C51 COMPILER V7.20 TEXT2 05/13/2009 19:07:15 PAGE 2
56
57 //写命令
58 void writeCmd(uchar cmd)
59 {
60 1 wait();
61 1 RS = 0;
62 1 RW = 0;
63 1 E = 0;
64 1 delayUs();
65 1 LCD_DATA = cmd;
66 1 delayUs();
67 1 E = 1;
68 1 delayUs();
69 1 E = 0;
70 1 }
71
72 //写数据
73 void writeData(uchar dat)
74 {
75 1 wait();
76 1 RS = 1;
77 1 RW = 0;
78 1 E = 0;
79 1 delayUs();
80 1 LCD_DATA = dat;
81 1 delayUs();
82 1 E = 1;
83 1 delayUs();
84 1 E = 0;
85 1 }
86
87 //初始化LCD
88 void init()
89 {
90 1 PSB = 1; //并口方式
91 1 writeCmd(0x30); //基本指令, 扩充指令为34H
92 1 delayMs(10);
93 1 writeCmd(0x0c); //显示开, 关光标
94 1 delayMs(10);
95 1 writeCmd(0x01); //清屏
96 1 delayMs(10);
97 1 }
98
99 void setPosition(uchar x, uchar y)
100 { uchar pos;
101 1 if(x==0)
102 1 {x=0x80;}
103 1 else if (x==1)
104 1 {x=0x90;}
105 1 else if (x==2)
106 1 {x=0x88;}
107 1 else if (x==3)
108 1 {x=0x98;}
109 1 pos=x+y;
110 1 writeCmd(pos);
111 1 /* uchar p;
112 1 switch(x%4)
113 1 {
114 1 case 0: p = 0x80; break; //第一行开始地址
115 1 case 1: p = 0x90; break; //第二行
116 1 case 2: p = 0x88; break; //第三行
117 1 case 3: p = 0x98; break; //第四行
C51 COMPILER V7.20 TEXT2 05/13/2009 19:07:15 PAGE 3
118 1 }
119 1 p += y;
120 1 writeCmd(p); */
121 1 }
122
123 void writeString(uchar * str)
124 {
125 1 uchar i = 0;
126 1 while(str[i] != '\0')
127 1 {
128 2 writeData(str[i++]);
129 2 }
130 1 }
131
132 /**//***************************LCD12864***************************************/
133
134 void main()
135 {
136 1 //先关闭数码管, 使两个锁存器锁存, 因开了数码管, USB电压驱动不够, 将无法使LCD正常工作
137 1 dula = wela = 0;
138 1 init();
139 1 setPosition(0, 0);
140 1 writeString(datas1);
141 1 setPosition(1, 0);
142 1 writeString(datas2);
143 1 setPosition(2, 0);
144 1 writeString(datas3);
145 1 setPosition(3, 0);
146 1 writeString(datas4);
147 1 while(1);
148 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 272 ----
CONSTANT SIZE = 63 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 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 + -