📄 main_lcd.lst
字号:
C51 COMPILER V7.06 MAIN_LCD 05/09/2007 10:46:29 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN_LCD
OBJECT MODULE PLACED IN main_lcd.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE main_lcd.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*****************************************************************/
2 /* */
-
3 /*名称: ds1302读写+显示程序 */
-
-
4 /*功能: 读写DS1302,通过LCD12864显示出来。 */
-
5 /*难度等级: 高 */
-
6 /* 作者: zengrenliang */
7 /* 版权: http://www.51kaifa.com */
8 /*编写日期: 2006.05.21 */
-
-
9 /*****************************************************************/
10
11 #include <reg52.h>
12 #include"ds1302.h"
13 #include <string.h>
14 #define uchar unsigned char
15
16 /******************************引脚定义*****************************/
17
18 sbit lck = P3^5;//锁存信号
19 sbit CSA = P2^4;//又区选择
20 sbit CSB = P2^5;//左区选择
21 sbit RW = P2^7;//LCD片选
22 sbit DI = P2^6;//数据/命令选择
23 /************************LCD12864常用命令及参数定义******************/
24 #define DISPON 0x3f
25 #define DISPOFF 0x3e
26 #define DISPFIRST 0xc0
27 #define SETX 0x40
28 #define SETY 0xb8
29 #define LCDBUZY 0x80
30 #define L 0x00
31 #define R 0x40
32 #define LIMIT 0x80
33
34 /*********************************全局变量***************************/
35 uchar cbyte, statu;
36 bit xy;
37
38 /***********************************函数声明**************************/
39 void initial();
40 void uDelay(uchar MS);
41 void WrL(uchar x);
42 void WrR(uchar x);
43 void Lcmcls(void);
44 void LcdbuzyR(void);
45 void LcdbuzyL(void);
46 void delay1s(void);
47 void Lcminit (void);
48 void Putpicture(void);
C51 COMPILER V7.06 MAIN_LCD 05/09/2007 10:46:29 PAGE 2
49 void readtemp(void);
50 void delay(unsigned int time);
51 void VtoH8x16change(uchar *hzbuf);
52 void Puthalf(uchar *strch,uchar row,uchar col);
53 void Wrdata(uchar x,uchar row,uchar col);
54 void Puthz(uchar *str,uchar row,uchar col);
55 void v_Get1302(uchar ucCurtime[]);
56 void Locatexy(uchar row,uchar col);
57 void v_Set1302(uchar *pSecDa) ;
58 void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
59 void vWrite16x16Chinese(uchar *ch,uchar row,uchar col,bit flag);
60 void vWrite8x16String(uchar *str,uchar col, uchar row, bit flag);
61
62
63 extern uchar code picture[];//以图片的形式显示 "年 月 日,时 分 秒"
64 extern uchar code char_Table[95][16];//字符点阵码表
65
66 uchar buffer[8];//DS1302的数据存储区
67 uchar code *XingQi[7] = //星期
68 {
69 "Monday","Tuesday", "Wednesday","Thursday","Friday","Saturday","Sunday"
70 };
71
72
73 /*******************************主程序******************************/
74 void main(void)
75 {
76 1 uchar disp;
77 1 uchar temp,copymt;
78 1
79 1 copymt = 0xff;
80 1 buffer[0]=00;//秒
81 1 buffer[1]=30;//分
82 1 buffer[2]=12;//时
83 1 buffer[3]=10;//日
84 1 buffer[4]=1;//月
85 1 buffer[5]=02;//星期
86 1 buffer[6]=07;//年
87 1 initial();
88 1 Lcminit();//初始化LCD
89 1 v_Set1302(&buffer);//设置和启动DS1302
90 1 Putpicture();//显示 "时 分 秒 ,年 月 日"
91 1 while(1)
92 1 {
93 2 v_Get1302(&buffer); //读取DS1302
94 2 delay(10000);
95 2 if(buffer[0]!=copymt){//每秒刷新一次
96 3 copymt = buffer[0];
97 3 disp = buffer[0] % 10 + '0';
98 3 vWrite8x16Character(&char_Table[disp-0x20][0],0,92,0);//秒个位
99 3 temp =buffer[0];// & 0x7f;
100 3 temp = temp/10;
101 3 disp = temp%10 + '0';
102 3 vWrite8x16Character(&char_Table[disp-0x20][0],0,84,0);//秒十位
103 3
104 3 disp = buffer[1] % 10 + '0';
105 3 vWrite8x16Character(&char_Table[disp-0x20][0],0,52,0);//分个位
106 3 temp =buffer[1];// & 0x7f;
107 3 temp = temp/10;
108 3 disp = temp%10 + '0';
109 3 vWrite8x16Character(&char_Table[disp-0x20][0],0,44,0);//分十位
110 3
C51 COMPILER V7.06 MAIN_LCD 05/09/2007 10:46:29 PAGE 3
111 3 disp = buffer[2] % 10 + '0';
112 3 vWrite8x16Character(&char_Table[disp-0x20][0],0,12,0);//时个位
113 3 temp =buffer[2];// & 0x7f;
114 3 temp = temp/10;
115 3 disp = temp%10 + '0';
116 3 vWrite8x16Character(&char_Table[disp-0x20][0],0,4,0);//时十位
117 3
118 3 vWrite8x16String(XingQi[buffer[5]] ,3, 40,0);//显示星期
119 3
120 3 disp = buffer[3] % 10 + '0';
121 3 vWrite8x16Character(&char_Table[disp-0x20][0],6,96,0);//日个位
122 3 temp =buffer[3];// & 0x7f;
123 3 temp = temp/10;
124 3 disp = temp%10 + '0';
125 3 vWrite8x16Character(&char_Table[disp-0x20][0],6,88,0);//日十位
126 3
127 3
128 3 disp = buffer[4] % 10 + '0';
129 3 vWrite8x16Character(&char_Table[disp-0x20][0],6,64,0);//月个位
130 3 temp =buffer[4];// & 0x7f;
131 3 temp = temp/10;
132 3 disp = temp%10 + '0';
133 3 vWrite8x16Character(&char_Table[disp-0x20][0],6,56,0);//月十位
134 3
135 3 disp = buffer[6] % 10 + '0';
136 3 vWrite8x16Character(&char_Table[disp-0x20][0],6,32,0);//年个位
137 3 temp =buffer[6]/* & 0x7f*/;
138 3 temp = temp/10;
139 3 disp = temp%10 + '0';
140 3 vWrite8x16Character(&char_Table[disp-0x20][0],6,24,0);//年十位
141 3 }
142 2 }
143 1 }
144
145
146
147
148 /*********************************微秒级延时******************************/
149 void delay(unsigned int time)
150 { unsigned int i;
151 1 for(i=0;i<time;i++);
152 1 }
153
154
155 //*********************************初始化LCD*******************************/
156
157 void Lcminit (void)
158 {
159 1 cbyte=DISPOFF;
160 1 WrL(cbyte);
161 1 WrR(cbyte);
162 1 cbyte=DISPON;
163 1 WrL(cbyte);
164 1 WrR(cbyte);
165 1 cbyte=DISPFIRST;
166 1 WrL(cbyte);
167 1 WrR(cbyte);
168 1 Lcmcls();
169 1 Locatexy(0,0);
170 1 }
171
172
C51 COMPILER V7.06 MAIN_LCD 05/09/2007 10:46:29 PAGE 4
173 /***********************************LCD清屏********************************/
174 void Lcmcls(void)
175 { uchar i,j;
176 1 for(i=0;i<8;i++){
177 2 delay(6);
178 2 for(j=0;j<LIMIT;j++){
179 3 delay(6);
180 3 Wrdata(0x0,i,j);
181 3 }
182 2 }
183 1 }
184
185 /*****************写左区******************/
186
187 void WrL(uchar x)
188 {
189 1
190 1 RW = 1;//RW=1(读)
191 1 CSA = 0;
192 1 CSB = 1;
193 1 DI = 0;//命令操作
194 1 lck = 0;
195 1 P1 = 0xff;//ELCD=1,使能LCD
196 1 lck = 1;
197 1 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环检测
198 1 lck = 0;
199 1 P1 = 0xef;//ELCD=1,使能LCD
200 1 lck = 1;
201 1 RW = 0;//RW=0(写)
202 1 P0 = x; //数据送到P0口
203 1
204 1 CSA = 0;
205 1 CSB = 1;
206 1 DI = 0;
207 1
208 1 lck = 0;
209 1 P1 = 0xff;//ELCD=1,使能LCD,把数据打入LCD
210 1 lck = 1;
211 1 delay(3);
212 1 lck = 0;
213 1 P1 = 0xef;//ELCD=0
214 1 lck = 1;
215 1
216 1 }
217
218 /**************写右区**************/
219 void WrR(uchar data x)
220 {
221 1 RW = 1;//R/W=1读
222 1 CSA = 1;
223 1 CSB = 0;
224 1 DI = 0;//命令操作
225 1 lck = 0;
226 1 P1 = 0xff;
227 1 lck = 1;
228 1 //EN = 1;//使能LCD
229 1 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
230 1 lck = 0;
231 1 P1 = 0xe;
232 1 lck = 1;
233 1 RW = 0;//RW = 0写
234 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -