📄 lcd.lst
字号:
C51 COMPILER V8.02 LCD 04/16/2008 22:07:29 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //ST7920驱动的12864(串行工作方式)
2
3 /******************************************************************************
4 文件名 : lcd.c
5 模块名称:st7920 串行方式驱动12232液晶驱动
6 CPU: stc89c516rd+ 主频:11.0592M
7 ******************************************************************************/
8 #include "lcd.h"
9 #include "common.h"
10 #include "delay.h"
11 uchar code AC_TABLE[]={
12 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置
13 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置
14 };
15 /******************************************************************************************
16 * 函数名称 :SendByte
17 * 功能描述 :串口发送一个字节
18 ******************************************************************************************/
19 void SendByte(uchar Dbyte)
20 {
21 1 uchar i;
22 1 for(i=0;i<8;i++)
23 1 {
24 2 SCK = 0;
25 2 Dbyte=Dbyte<<1; //左移一位
26 2 SID = CY; //移出的位给SID
27 2 SCK = 1;
28 2 SCK = 0;
29 2 }
30 1 }
31 /******************************************************************************************
32 * 函数名称 :ReceiveByte
33 * 功能描述 :串口接收一个字节
34 ******************************************************************************************/
35 uchar ReceiveByte(void)
36 {
37 1 uchar i,temp1,temp2;
38 1 temp1 = 0;
39 1 temp2 = 0;
40 1 for(i=0;i<8;i++)
41 1 {
42 2 temp1=temp1<<1;
43 2 SCK = 0;
44 2 SCK = 1;
45 2 SCK = 0;
46 2 if(SID) temp1++;
47 2 }
48 1 for(i=0;i<8;i++)
49 1 {
50 2 temp2=temp2<<1;
51 2 SCK = 0;
52 2 SCK = 1;
53 2 SCK = 0;
54 2 if(SID) temp2++;
55 2 }
C51 COMPILER V8.02 LCD 04/16/2008 22:07:29 PAGE 2
56 1 return ((0xf0&temp1)+(0x0f&temp2));
57 1 }
58 /******************************************************************************************
59 * 函数名称 :CheckBusy
60 * 功能描述 :
61 ******************************************************************************************/
62 void CheckBusy( void )
63 {
64 1 do SendByte(0xfc); //11111,RW(1),RS(0),0
65 1 while(0x80&ReceiveByte()); //BF(.7)=1 Busy
66 1 }
67 /******************************************************************************************
68 * 函数名称 :WriteCommand
69 * 功能描述 :
70 ******************************************************************************************/
71 void WriteCommand(uchar Cbyte)
72 {
73 1 CS = 1;
74 1 CheckBusy();
75 1 SendByte(0xf8); //11111,RW(0),RS(0),0
76 1 SendByte(0xf0&Cbyte); //高四位
77 1 SendByte(0xf0&Cbyte<<4);//低四位(先执行<<)
78 1 CS = 0;
79 1 }
80 /******************************************************************************************
81 * 函数名称 :WriteData
82 * 功能描述 :
83 ******************************************************************************************/
84 void WriteData(uchar Dbyte)
85 {
86 1 CS = 1;
87 1 CheckBusy();
88 1 SendByte(0xfa); //11111,RW(0),RS(1),0
89 1 SendByte(0xf0&Dbyte); //高四位
90 1 SendByte(0xf0&Dbyte<<4);//低四位(先执行<<)
91 1 CS = 0;
92 1 }
93
94
95 /******************************************************************************************
96 * 函数名称 :ReadData
97 * 功能描述 :
98 ******************************************************************************************/
99 uchar ReadData(void)
100 {
101 1 CheckBusy();
102 1 SendByte(0xfe); //11111,RW(1),RS(1),0
103 1 return ReceiveByte();
104 1 }
105 /******************************************************************************************
106 * 函数名称 :LcmInit
107 ******************************************************************************************/
108 void LcmInit(void)
109 {
110 1 delay_1ms(100);
111 1 WriteCommand(0x30); //8BitMCU,基本指令集合
112 1 WriteCommand(0x03); //AC归0,不改变DDRAM内容
113 1 WriteCommand(0x0C); //显示ON,游标OFF,游标位反白OFF
114 1 WriteCommand(0x01); //清屏,AC归0
115 1 WriteCommand(0x06); //写入时,游标右移动
116 1 }
117 /******************************************************************************************
C51 COMPILER V8.02 LCD 04/16/2008 22:07:29 PAGE 3
118 * 函数名称 :LcmClearTXT
119 * 功能描述 :文本区清RAM函数
120 ******************************************************************************************/
121 void LcmClearTXT(void)
122 {
123 1 uchar i;
124 1 WriteCommand(0x80);//设定DDRAM地址80H
125 1 for(i=0;i<16;i++) WriteData(0x20);
126 1 WriteCommand(0x90);//设定DDRAM地址90H
127 1 for(i=0;i<16;i++) WriteData(0x20);
128 1 }
129 /******************************************************************************************
130 * 函数名称 :LcmClearBMP
131 * 功能描述 :图形区清RAM函数
132 ******************************************************************************************/
133 /*void LcmClearBMP(void)
134 {
135 uchar i,j;
136 WriteCommand(0x34); //8Bit扩充指令集,即使是36H也要写两次
137 WriteCommand(0x36); //绘图ON,基本指令集里面36H不能开绘图
138 for(i=0;i<32;i++)
139 {
140 WriteCommand(0x80|i); //行位置
141 WriteCommand(0x80); //列位置
142 for(j=0;j<16;j++)
143 WriteData(0);
144 }
145 } */
146
147 void ClrDis(void)
148 {
149 1 WriteCommand(0x01);
150 1 }
151
152 void White(uchar firstsecond)
153 {
154 1 WriteCommand(0x34);
155 1 if(firstsecond==0) WriteCommand(04);
156 1 else if(firstsecond==1) WriteCommand(05);
157 1 WriteCommand(0x30);
158 1 }
159 /******************************************************************************************
160 * 函数名称 :PutStr
161 * 功能描述 :
162 ******************************************************************************************/
163 void PutStr(uchar row,uchar col,uchar *puts)
164 {
165 1 WriteCommand(0x30); //8BitMCU,基本指令集合
166 1 WriteCommand(AC_TABLE[8*row+col]); //起始位置
167 1 while(*puts != '\0') //判断字符串是否显示完毕
168 1 {
169 2 if(col==8) //判断换行
170 2 { //若不判断,则自动从第一行到第三行
171 3 col=0;
172 3 row++;
173 3 }
174 2 if(row==2) row=0; //一屏显示完,回到屏左上角
175 2 WriteCommand(AC_TABLE[8*row+col]);
176 2 WriteData(*puts); //一个汉字要写两次
177 2 puts++;
178 2 WriteData(*puts);
179 2 puts++;
C51 COMPILER V8.02 LCD 04/16/2008 22:07:29 PAGE 4
180 2 col++;
181 2 }
182 1 }
183
184 /*void WriteHalf(uchar ad,uchar da)
185 {
186 WriteCommand(ad);
187 WriteData(da);
188 }*/
189
190 /******************************************************************************************
191 * 函数名称 :PutBMP
192 * 功能描述 :
193 ******************************************************************************************/
194 /*void PutBMP(uchar *puts)
195 {
196 uint x=0;
197 uchar i,j;
198 WriteCommand(0x34); //8Bit扩充指令集,即使是36H也要写两次
199 WriteCommand(0x36); //绘图ON,基本指令集里面36H不能开绘图
200 for(i=0;i<32;i++) //12864实际为256x32
201 {
202 WriteCommand(0x80|i); //行位置
203 WriteCommand(0x80); //列位置
204 for(j=0;j<16;j++) //256/8=32 byte
205 { //列位置每行自动增加
206 WriteData(puts[x]);
207 x++;
208 }
209 }
210 }*/
211
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 339 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
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 + -