📄 text1.lst
字号:
C51 COMPILER V7.50 TEXT1 07/09/2008 08:54:36 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND TABS(2)
line level source
1 #include <REG938.h>
2 #include <intrins.h>
3
4 #define uint unsigned int
5 #define uchar unsigned char
6 #define _Nop() _nop_()
7 #define GENERATE_STOP 0x54 /* 置位 STO, 复位 STA 、 SI */
8 #define RELEASE_BUS_ACK 0x44 /* 复位 STO,STA,SI 并置位 AA (ack) */
9 #define RELEASE_BUS_NOACK 0x40 /* 复位 STO,STA,SI 并置位 AA (noack) */
10 #define RELEASE_BUS_STA 0x64 /* 起动总线/重新起动总线, 置位 STA */
11
12
13 //定义变量
14 sbit rt12864_sid = P1^1; //数据
15 sbit rt12864_clk = P1^0; //时钟
16
17 extern uchar byte[20];
18
19 //void display(uchar *put);
20 bit RcvByte(uchar *c);
21 void rt12864_initialization(void);
22 void dally_timer1(uint data ms);
23 void rt12864_write1(uchar data TMP1);
24 void rt12864_write(uchar data LCD_COMMAND,uchar data LCD_TMP);
25 void rt12864_initialization(void);
26 void lcd12232_zfc(uchar row,uchar tier,uchar *puts);
27 void rt12864_clear(void);
28
29
30 uchar code AC_TABLE[]={ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置
31 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置
32 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //第三行汉字位置
33 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f}; //第四行汉字位置
34
35 uchar code lcd_tab[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
36 0x41,0x42,0x43,0x44,0x45,0x46};
37
38
39 /********************************************************************
40 使用定时器1延时n毫秒
41 ********************************************************************/
42 void dally_timer1(uint data ms)
43 {
44 1 uint i;
45 1 TR1=1;//启动定时器T1
46 1 for(i=ms*25;i>0;i--)
47 1 {
48 2 while(TF1==0)
49 2 {
50 3 _Nop();
51 3 };
52 2 TF1=0;//清除T1溢出标志TF1
53 2 }
54 1 TR1=0;//关闭定时器T1
55 1 }
C51 COMPILER V7.50 TEXT1 07/09/2008 08:54:36 PAGE 2
56
57 /****************************************************************************
58 * 名称:rt12864_write()
59 * 功能:LCD读写子程序。
60 * 入口参数:LCD_COMMAND, LCD_DATA
61 * 出口参数:无
62 ****************************************************************************/
63 /**------------------------------------------------------------------------**/
64 void rt12864_write1(uchar data TMP1)
65 {
66 1 uchar data i,TMP;
67 1 for(i=8;i>0;i--)
68 1 {
69 2 TMP=(TMP1&(0x01<<(i-1)))>>(i-1);//取数据第7-0位
70 2 if(TMP==0)
71 2 {
72 3 rt12864_sid = 0; //第i位为0,lcd数据为0
73 3 }
74 2 if(TMP==1)
75 2 {
76 3 rt12864_sid = 1; //第i位为1,lcd数据为1
77 3 }
78 2 rt12864_clk = 0; //lcd时钟产生一个上升沿
79 2 _Nop();
80 2 _Nop();
81 2 rt12864_clk = 1;
82 2 }
83 1 }
84
85
86 /**-----------------------------------------------------------------------**/
87 void rt12864_write(uchar data LCD_COMMAND,uchar data LCD_TMP)
88 {
89 1 uchar data TMP1;
90 1 TMP1=LCD_COMMAND; //发送lcd指令
91 1 rt12864_write1(TMP1);
92 1 TMP1=LCD_TMP&0xF0; //发送lcd指令或数据高4位
93 1 rt12864_write1(TMP1);
94 1 TMP1=(LCD_TMP&0x0F)<<4; //发送lcd指令或数据低4位
95 1 rt12864_write1(TMP1);
96 1 }
97
98 /****************************************************************************
99 * 名称:LCDInit()
100 * 功能:LCD初始化子程序。
101 * 入口参数:无
102 * 出口参数:无
103 ****************************************************************************/
104 void rt12864_initialization(void)
105 {
106 1 rt12864_write(0xf8,0x01); //清屏命令
107 1 dally_timer1(40);
108 1 rt12864_write(0xf8,0x30); //基本指令集
109 1 dally_timer1(40);
110 1 rt12864_write(0xf8,0x02); //游标归零命令
111 1 dally_timer1(40);
112 1 rt12864_write(0xf8,0x04); //
113 1 dally_timer1(40);
114 1 rt12864_write(0xf8,0x0c); //
115 1 dally_timer1(40);
116 1 rt12864_write(0xf8,0x01); //
117 1 dally_timer1(40);
C51 COMPILER V7.50 TEXT1 07/09/2008 08:54:36 PAGE 3
118 1 rt12864_write(0xf8,0x80); //
119 1 dally_timer1(40);
120 1 }
121
122 void lcd12232_zfc(uchar row,uchar tier,uchar *puts)
123 {
124 1 uchar data tmp;
125 1 tmp = AC_TABLE[8*row+tier];
126 1 rt12864_write(0xf8,tmp);
127 1 while(*puts != '\0') //等待传送结束
128 1 {
129 2 rt12864_write(0xfa,*puts); //
130 2 puts++;
131 2 }
132 1 }
133
134 /***************************************************************
135 * 接收字节函数
136 * 功能:读取总线传来的字节数据并发送应答位,正常接收返回1。
137 * 入口参数:c 此时读入的数据变量的地址
138 * 出口参数:接收到总线结束信号或重新启动总线信号时返回0
139 ***************************************************************/
140 bit RcvByte(uchar *c)
141 {
142 1 I2CON = RELEASE_BUS_ACK; /* 清除标志位 */
143 1 while( SI==0 ); /* 放开总线,等待接收 */
144 1 if(I2STAT==0xA0) /* 接收到停止位或重新启动位 */
145 1 {
146 2 I2CON = RELEASE_BUS_ACK; /* 先放开总线,再返回0 */
147 2 return(0);
148 2 }
149 1 *c = I2DAT; /* 取数据 */
150 1 return(1);
151 1 }
152
153
154 void intermit ()interrupt 7
155 {
156 1 uchar byte[10]="";
157 1 bit tmp;
158 1 do
159 1 {
160 2 tmp=RcvByte(byte);
161 2 }while(!tmp);
162 1
163 1 lcd12232_zfc(0,0,byte);
164 1 I2CON=I2CON&0xF8;//清除中断标志
165 1 return;
166 1 }
167
168 void main()
169 {
170 1 uchar byte1[]="扬州电力设备修造";
171 1 P0M1=0x00;
172 1 P0M2=0x00;
173 1 P1M1=0x0C;//P1.2,P1.3配置为开漏,其他为双向I/O口
174 1 P1M2=0x0C;
175 1 P3M1=0x00;
176 1 P3M2=0x00;
177 1
178 1 P0=0xff;
179 1 P1=0xff;
C51 COMPILER V7.50 TEXT1 07/09/2008 08:54:36 PAGE 4
180 1 P3=0xff;
181 1
182 1 SP=0x7F;
183 1
184 1 TMOD=0x20;//T1工作方式2
185 1 TAMOD=0x00;
186 1 TL1=0x6C;//装入T1初值
187 1 TH1=0x6C;
188 1
189 1 I2CON=0x44;//从接收器模式初始化
190 1 I2STAT=0;
191 1 I2ADR=0x70;//从机地址为70h
192 1 I2SCLH=0x0E;//数据波特率为123Kbit/s
193 1 I2SCLL=0x0E;
194 1
195 1 rt12864_initialization();
196 1 dally_timer1(40);
197 1
198 1 IEN0=0x80;//开总中断
199 1 IEN1=0x01;//开I2C中断
200 1
201 1 while(1)
202 1 {
203 2 lcd12232_zfc(1,0,byte1);
204 2 dally_timer1(40);
205 2 }
206 1
207 1 }
208
209
210
211
212
213
214
215
216
217
218
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 463 ----
CONSTANT SIZE = 75 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 30
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 + -