📄 main.lst
字号:
C51 COMPILER V8.06 MAIN 12/02/2011 18:40:18 PAGE 1
C51 COMPILER V8.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************HL-1实验开发板例程************************
2 * 平台:HL-1 V6.2 + Keil U3 + STC89C52RD
3 * 名称:DS1302 LCD1602显示年月日、时钟
4 * 公司:慧净电子科技有限公司
5 * 淘宝:http://shop37031453.taobao.com
6 * 网站:www.hlmcu.com
7 * 编写:慧净
8 * 日期:2008-8-08
9 * QQ : 121350852 398115088
10 * 晶振:11.0592MHZ
11 * 说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流
12 * 论坛:http://hjdz.5d6d.com
13 ******************************************************************/
14 //LCD1602对比度已调试好,可以直接使用。
15 //操作方法如下:
16 //1.正确安装液晶1602,请查看使用手册目录下的液晶安装方法。
17 //2.下载本程序
18 //该程序使用LCD1602显示
19 //3.调节液晶对比度致液晶清晰显示字符,若已调节好可跳过此步。
20 //4.实验板上S3键为功能键,按下后可选择调节哪个部分。
21 //5.S7为数字增大键。
22 //6.SB为数字减小键。
23 #include<reg52.h>
24 #define uint unsigned int
25 #define uchar unsigned char
26 uchar a,miao,shi,fen,ri,yue,nian,week,flag,temp,key1n;
27 #define yh 0x80 //第一行的初始位置
28 #define er 0x80+0x40 //第二行初始位置
29 //sbit cs1=P3^7;
30 //sbit ledk=P2^5;
31 sbit dula=P2^6;
32 sbit wela=P2^7;
33 sbit wr=P1^1;
34 sbit rs=P1^0;
35 sbit en=P2^5;
36 sbit SCLK=P2^1; // 6 P1.1
37 sbit IO=P2^0; // 7 P1.0
38 sbit RST=P2^4; //时钟 5 P1.2
39 sbit ACC0=ACC^0;
40 sbit ACC7=ACC^7;
41 sbit key=P3^7;
42 sbit key1=P3^0;
43 sbit key2=P3^1;
44 sbit key3=P3^2;
45 uchar code tab1[]={"2009- - THU"};
46 uchar code tab2[]={" : : "};
47 void delay(uint xms)//延时函数
48 {
49 1 uint x,y;
50 1 for(x=xms;x>0;x--)
51 1 for(y=110;y>0;y--);
52 1 }
53 /******************液晶写入************************/
54 write_1602com(uchar com)//液晶写入指令函数
55 {
C51 COMPILER V8.06 MAIN 12/02/2011 18:40:18 PAGE 2
56 1 rs=0;//置为写入命令
57 1 P0=com;//送入数据
58 1 delay(1);
59 1 en=1;//拉高使能端
60 1 delay(1);
61 1 en=0;//完成高脉冲
62 1 }
63 write_1602dat(uchar dat)
64 {
65 1 rs=1;//置为写入数据
66 1 P0=dat;//送入数据
67 1 delay(1);
68 1 en=1;
69 1 delay(1);
70 1 en=0;
71 1 }
72 /*********************over***********************/
73 /********************ds1302****************************/
74 void write_byte(uchar dat)
75 {
76 1 ACC=dat;
77 1 RST=1;
78 1 for(a=8;a>0;a--)
79 1 {
80 2 IO=ACC0;
81 2 SCLK=0;
82 2 SCLK=1;
83 2 ACC=ACC>>1;
84 2 }
85 1 }
86 uchar read_byte()
87 {
88 1 RST=1;
89 1 for(a=8;a>0;a--)
90 1 {
91 2 ACC7=IO;
92 2 SCLK=1;
93 2 SCLK=0;
94 2 ACC=ACC>>1;
95 2
96 2 }
97 1 return (ACC);
98 1 }
99 void write_1302(uchar add,uchar dat)
100 {
101 1
102 1 RST=0;
103 1 SCLK=0;
104 1 RST=1;
105 1 write_byte(add);
106 1 write_byte(dat);
107 1 SCLK=1;
108 1 RST=0;
109 1 }
110 uchar read_1302(uchar add)
111 {
112 1 uchar temp;
113 1 RST=0;
114 1 SCLK=0;
115 1 RST=1;
116 1 write_byte(add);
117 1 temp=read_byte();
C51 COMPILER V8.06 MAIN 12/02/2011 18:40:18 PAGE 3
118 1 SCLK=1;
119 1 RST=0;
120 1 return(temp);
121 1 }
122 uchar BCD_Decimal(uchar bcd)
123 {
124 1 uchar Decimal;
125 1 Decimal=bcd>>4;
126 1 return(Decimal=Decimal*10+(bcd&=0x0F));
127 1 }
128 void ds1302_init()
129 {
130 1 RST=0;
131 1 SCLK=0;
132 1 write_1302(0x80,miao|0x00);//允许写
133 1 }
134
135
136
137
138 void write_sfm(uchar add,uchar dat)//写时分秒
139 {
140 1 uchar gw,sw;
141 1 gw=dat%10;
142 1 sw=dat/10;
143 1 write_1602com(er+add);
144 1 write_1602dat(0x30+sw);
145 1 write_1602dat(0x30+gw);
146 1
147 1
148 1 }
149 void write_nyr(uchar add,uchar dat)
150 {
151 1 uchar gw,sw;
152 1 gw=dat%10;
153 1 sw=dat/10;
154 1 write_1602com(yh+add);
155 1 write_1602dat(0x30+sw);
156 1 write_1602dat(0x30+gw);
157 1
158 1
159 1 }
160 void write_week(uchar week)//写星期函数
161 {
162 1 write_1602com(yh+0x0d);
163 1 switch(week)
164 1 {
165 2 case 1:write_1602dat('M');//delay(5);
166 2 write_1602dat('O');//delay(5);
167 2 write_1602dat('N');
168 2 break;
169 2
170 2 case 2:write_1602dat('T');//delay(5);
171 2 write_1602dat('U');//delay(5);
172 2 write_1602dat('E');
173 2 break;
174 2
175 2 case 3:write_1602dat('W');//delay(5);
176 2 write_1602dat('E');//delay(5);
177 2 write_1602dat('D');
178 2 break;
179 2
C51 COMPILER V8.06 MAIN 12/02/2011 18:40:18 PAGE 4
180 2 case 4:write_1602dat('T');//delay(5);
181 2 write_1602dat('H');//delay(5);
182 2 write_1602dat('U');
183 2 break;
184 2
185 2 case 5:write_1602dat('F');//delay(5);
186 2 write_1602dat('R');//delay(5);
187 2 write_1602dat('I');
188 2 break;
189 2
190 2 case 6:write_1602dat('S');//delay(5);
191 2 write_1602dat('T');//delay(5);
192 2 write_1602dat('A');
193 2 break;
194 2
195 2 case 7:write_1602dat('S');//delay(5);
196 2 write_1602dat('U');//delay(5);
197 2 write_1602dat('N');
198 2 break;
199 2
200 2
201 2 }
202 1
203 1
204 1
205 1 }
206 lcd_init()//液晶初始化函数
207 { wr=0;
208 1 write_1602com(0x38);//设置液晶工作模式
209 1 write_1602com(0x0c);//开显示不显示光标
210 1 write_1602com(0x06);//整屏不移动,指针加一
211 1 write_1602com(0x01);
212 1 write_1602com(yh+2);//字符写入的位置
213 1 for(a=0;a<14;a++)
214 1 {
215 2 write_1602dat(tab1[a]);
216 2 //delay(3);
217 2 }
218 1 write_1602com(er+4);
219 1 for(a=0;a<8;a++)
220 1 {
221 2 write_1602dat(tab2[a]);
222 2 //delay(3);
223 2 }
224 1
225 1 }
226 void keyscan()
227 {
228 1 key=0;
229 1 if(key1==0)//key1为功能键
230 1 {
231 2 delay(5);
232 2 if(key1==0)
233 2 {
234 3 while(!key1);
235 3 key1n++;
236 3 if(key1n==9)
237 3 key1n=1;
238 3 switch(key1n)
239 3 {
240 4
241 4 case 1: TR0=0;//关闭定时器
C51 COMPILER V8.06 MAIN 12/02/2011 18:40:18 PAGE 5
242 4 //TR1=0;
243 4 write_1602com(er+0x0b);//写入光标位置
244 4 write_1602com(0x0f);//设置光标为闪烁
245 4 temp=(miao)/10*16+(miao)%10;
246 4 write_1302(0x8e,0x00);
247 4 write_1302(0x80,0x80|temp);//miao
248 4 write_1302(0x8e,0x80);
249 4 break;
250 4 case 2: write_1602com(er+8);//fen
251 4
252 4 //write_1602com(0x0f);
253 4 break;
254 4 case 3: write_1602com(er+5);//shi
255 4 //write_1602com(0x0f);
256 4 break;
257 4 case 4: write_1602com(yh+0x0f);//week
258 4 //write_1602com(0x0f);
259 4 break;
260 4 case 5: write_1602com(yh+0x0b);//ri
261 4 //write_1602com(0x0f);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -