📄 显示部分程序.lst
字号:
C51 COMPILER V9.01 显示部穇程序 09/02/2013 21:55:46 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE 显示部穇程序
OBJECT MODULE PLACED IN 显示部分程序.OBJ
COMPILER INVOKED BY: D:\keil4\C51\BIN\C51.EXE 显示部分程序.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <STC12C5A60S2.H>
2
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 #define LCD_PORT P2
7 #define Left 1
8 #define Right 2
9 sbit LCD_Busy=P2^7;
10 sbit LCD_EN = P0^3;
11 sbit LCD_RS = P0^1;
12 sbit LCD_RW = P0^2;
13 sbit LCD_RST= P0^0;
14 sbit LCD_CS2= P0^5;
15 sbit LCD_CS1= P0^4;
16 //sbit FR=P3^7;
17 //sbit key1=P3^2;
18 sbit key2=P3^3;
19 //sbit key3=P3^6;
20 //sbit key4=P2^0;
21
22 uchar DisBuf[30],Page_Num,Clm_Num,zhou[4];
23 uchar pointY=15,pointX=16;
24 uchar i,cai3=0;
25 uint x,y,caiy1=0,caiy2=0,caiy3=0,caiy4=0,caix1=0,caix2=0,caix3=0,caix4=0;
26 uchar shi=0,ge=0,ms=0,stop=0,gao=0,di=0;
27 uchar cai[4],cai0[3],temp[8] ;
28
29 unsigned int n,m,count,count2,T0count,time,flag,shu1,shu2,shu3;
30
31 code char Table[]= //数字0~9
32 {
33 0x7E, 0xa1, 0x99, 0x85, 0x7E, // 0 0*5
34 0x82, 0x81, 0xff, 0x80, 0x80, // 1 1*5
35 0xc2, 0xa1, 0x91, 0x89, 0x86, // 2 2*5
36 0x42, 0x81, 0x89, 0x89, 0x76, // 3 3*5
37 0x18, 0x14, 0x12, 0xff, 0x10, // 4 4*5
38 0x4F, 0x89, 0x89, 0x89, 0x71, // 5 5*5
39 0x7e, 0x89, 0x89, 0x89, 0x72, // 6 6*5
40 0x01, 0x01, 0xf9, 0x05, 0x03, // 7 7*5
41 0x76, 0x89, 0x89, 0x89, 0x76, // 8 8*5
42 0x4e, 0x91, 0x91, 0x91, 0x7E, // 9 9*5
43 0x10, 0x28, 0x44, 0x82, 0x00, // < 10*5
44 0x00, 0x82, 0x44, 0x28, 0x10, // > 11*5
45 };
46
47 code char Table1[]= //括号
48 {
49 0x00, 0x3C, 0x42, 0x81, // ( 4*0
50 0x81, 0x42, 0x3C, 0x00, // ) 4*1
51 // < 8
52 };
53
54 code char Table3[]= //字母
55 {
C51 COMPILER V9.01 显示部穇程序 09/02/2013 21:55:46 PAGE 2
56 0xFF, 0x11, 0x11, 0x11, 0x0E, // P 0*5
57 0x3f, 0x40, 0x80, 0x40, 0x3f, // V 1*5
58 0xff, 0x08, 0x08, 0x08, 0xff, // H 2*5
59 0xc4, 0xa4, 0x94, 0x8c, 0x00, // z 3*5
60 0xff, 0x09, 0x09, 0x09, 0x09, // F 4*5
61 0xFF, 0x19, 0x29, 0x49, 0x86, // R 5*5
62 0xFF, 0x89, 0x89, 0x89, 0x89, // E 6*5
63 0x7e, 0x81, 0xa1, 0x41, 0xBE, // Q 7*5
64 };
65
66 code char Table4[]= //小数点
67 {
68 0x80,
69 };
70
71 void Delay_us(unsigned int DelayTime)
72 {
73 1 while(DelayTime) DelayTime--;
74 1 }
75
76 void Delay_x10ms(unsigned char DelayTime) //***************10ms延时**********//
77 {
78 1 unsigned char i,j,k;
79 1 for(i=0;i<DelayTime;i++)
80 1 for(j=0;j<10;j++)
81 1 for(k=0;k<120;k++) {;}
82 1 }
83
84
85 /*----------------------------------------------------------------------------
86 下面这个函数用于液晶模块的忙信号检测。
87 ----------------------------------------------------------------------------*/
88
89 void LCD_Check_Busy(void)
90 {
91 1 LCD_PORT = 0x00;
92 1 Delay_us(5);
93 1 while(LCD_Busy)
94 1 {
95 2 LCD_EN = 0;
96 2 LCD_RS = 0;
97 2 LCD_RW = 1;
98 2 Delay_us(5);
99 2 LCD_EN = 1;
100 2 Delay_us(10);
101 2 }
102 1 LCD_EN = 0;
103 1 }
104
105 //度屏程序
106
107 uchar Readdata1()
108 {
109 1 uchar rdata;
110 1 LCD_CS1=1;LCD_CS2=0;
111 1 LCD_Check_Busy();
112 1 LCD_RS=1;
113 1 LCD_RW=1;
114 1 LCD_EN=1;
115 1 rdata=LCD_PORT;
116 1 Delay_us(3);
117 1 LCD_EN=0;
C51 COMPILER V9.01 显示部穇程序 09/02/2013 21:55:46 PAGE 3
118 1 Delay_us(1);
119 1 return rdata;
120 1 }
121
122 uchar Readdata2()
123 {
124 1 uchar rdata;
125 1 LCD_CS1=0;LCD_CS2=1;
126 1 LCD_Check_Busy();
127 1 LCD_RS=1;
128 1 LCD_RW=1;
129 1 LCD_EN=1;
130 1 rdata=LCD_PORT;
131 1 Delay_us(3);
132 1 LCD_EN=0;
133 1 Delay_us(1);
134 1 return rdata;
135 1 }
136
137 /*----------------------------------------------------------------------------
138 下面这个函数用于向液晶模块写入控制指令代码。
139 函数入口参数:Command ------ 向液晶模块写入的控制指令代码 。
140 CS_Num ------ 左右半屏的选数值
141 ----------------------------------------------------------------------------*/
142 void LCD_WriteCommand(uchar Command, uchar CS_Num)
143 {
144 1 LCD_Check_Busy();
145 1 if(CS_Num==1) /*选择左半屏*/
146 1 {
147 2 LCD_CS1 = 1;
148 2 LCD_CS2 = 0;
149 2 }
150 1 else /*选择右半屏*/
151 1 {
152 2 LCD_CS1 = 0;
153 2 LCD_CS2 = 1;
154 2 }
155 1 Delay_us(2);
156 1 LCD_EN = 0; /* 使能信号为L */
157 1 LCD_RS = 0; /* 置寄存器选择为L */
158 1 LCD_RW = 0; /* 置读/写选择为L */
159 1 LCD_PORT= Command; /* 将控制指令代码输出到的数据端口 */
160 1 LCD_EN = 1; /* 使能信号为H */
161 1 Delay_us(2); /* 延时2us */
162 1 LCD_EN = 0; /* 使能信号为L */
163 1 LCD_CS1 = 1; /* 置片选1为L */
164 1 LCD_CS2 = 1; /* 置片选2为L */
165 1
166 1 }
167
168
169 /*----------------------------------------------------------------------------
170 下面这个函数用于向液晶模块写入显示数据。
171 函数入口参数:Data------ 向液晶模块写入的显示数据 。
172 CS_Num-------左右半屏的选数值
173 ----------------------------------------------------------------------------*/
174 void LCD_WriteData(uchar Data,uchar CS_Num)
175 {
176 1 LCD_Check_Busy();
177 1 if(CS_Num==1) /*选择左半屏*/
178 1 {
179 2 LCD_CS1 = 1;
C51 COMPILER V9.01 显示部穇程序 09/02/2013 21:55:46 PAGE 4
180 2 LCD_CS2 = 0;
181 2 cai3=Readdata1();
182 2 Data+=cai3;
183 2
184 2 }
185 1 else /*选择右半屏*/
186 1 {
187 2 LCD_CS1 = 0;
188 2 LCD_CS2 = 1;
189 2 cai3=Readdata2();
190 2 Data+=cai3;
191 2 }
192 1 Delay_us(2);
193 1 LCD_EN = 0;
194 1 LCD_RS = 1; /* 置寄存器选择为H */
195 1 LCD_RW = 0; /* 置读/写选择为L */
196 1 LCD_PORT= Data; /* 将显示数据输出到的数据端口 */
197 1 LCD_EN = 1; /* 使能信号为H */
198 1 Delay_us(2); /* 延时2us */
199 1 LCD_EN = 0; /* 使能信号为L */
200 1 LCD_CS1= 1; /* 置片选1为L */
201 1 LCD_CS2= 1; /* 置片选2为L */
202 1
203 1 }
204
205
206
207
208
209
210 /*---------------------------------------------------------------------------
211 下面这个函数用于液晶模块的清屏。
212 ---------------------------------------------------------------------------*/
213 void LCD_CLR(uchar Side_Num)
214 {
215 1 uchar i,k,COM;
216 1
217 1 for(i=0;i<8;i++)
218 1 {
219 2 COM=0xB8+i;
220 2 LCD_WriteCommand(COM,Side_Num);
221 2 COM=0x40;
222 2 LCD_WriteCommand(COM,Side_Num);
223 2
224 2 for(k=0;k<64;k++)
225 2 {
226 3 LCD_WriteData(0x00,Side_Num);
227 3 }
228 2 }
229 1
230 1 }
231
232
233 /*---------------------------------------------------------------------------
234 下面这个函数用于向液晶模块初始化。
235 如果没有写完一个半屏的数据就要充分结合此函数来达到要显示的效果
236 ---------------------------------------------------------------------------*/
237 void LCD_Initial(void)
238 {
239 1 LCD_RST = 0; /* 置复位信号为低电平 */
240 1 Delay_x10ms(10);
241 1 LCD_RST = 1; /* 置复位信号为高电平 */
C51 COMPILER V9.01 显示部穇程序 09/02/2013 21:55:46 PAGE 5
242 1 Delay_x10ms(10);
243 1 LCD_WriteCommand(0x3F,Left); /*显示开*/
244 1 LCD_WriteCommand(0x3F,Right);
245 1 LCD_WriteCommand(0xC0,Left); /*起始行*/
246 1 LCD_WriteCommand(0xC0,Right);
247 1 LCD_WriteCommand(0xB8,Left); /*起始页*/
248 1 LCD_WriteCommand(0xB8,Right);
249 1 LCD_WriteCommand(0x40,Left); /*起始列*/
250 1 LCD_WriteCommand(0x40,Right);
251 1 }
252
253 void LCD_ror_wr(uchar x,uchar *a)
254 {
255 1 uchar j;
256 1 if(x<64)
257 1 {
258 2 for(j=0;j<8;j++)
259 2 {
260 3 LCD_WriteCommand(0xB8+j,Left);
261 3 LCD_WriteCommand(0x40+x,Left);
262 3 LCD_WriteData(a[j],Left);
263 3 }
264 2 }
265 1
266 1 else
267 1 {
268 2 x-=64;
269 2 for(j=0;j<8;j++)
270 2 {
271 3 LCD_WriteCommand(0xB8+j,Right);
272 3 LCD_WriteCommand(0x40+x,Right);
273 3 LCD_WriteData(a[j],Right);
274 3 }
275 2 }
276 1
277 1 }
278
279
280 /*------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -