📄 main.lst
字号:
C51 COMPILER V8.06 MAIN 12/02/2011 20:29:24 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 * 公司:慧净电子科技有限公司
4 * 淘宝:http://shop37031453.taobao.com
5 * 网站:www.hlmcu.com
6 * 编写:慧净
7 * 日期:2008-8-08
8 * QQ : 121350852 398115088
9 * 晶振:11.0592MHZ
10 * 说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流
11 * 论坛:http://hjdz.5d6d.com
12 ******************************************************************/
13 #include<reg52.h>
14 #include<define.h>
15 void delay(uint z)//延时函数
16 {
17 1 uint x,y;
18 1 for(x=z;x>0;x--)
19 1 for(y=110;y>0;y--);
20 1 }
21 void di() //蜂鸣器报警声音
22 {
23 1 beep=0;
24 1 delay(100);
25 1 beep=1;
26 1 }
27 void write_com(uchar com)
28 {//写液晶命令函数
29 1 rs=0;
30 1 lcden=0;
31 1 P0=com;
32 1 delay(3);
33 1 lcden=1;
34 1 delay(3);
35 1 lcden=0;
36 1 }
37 void write_date(uchar date)
38 {//写液晶数据函数
39 1 rs=1;
40 1 lcden=0;
41 1 P0=date;
42 1 delay(3);
43 1 lcden=1;
44 1 delay(3);
45 1 lcden=0;
46 1 }
47 void init()
48 {//初始化函数
49 1 uchar num;
50 1 EA=1;//打开总中断
51 1 EX1=1;//开外部中断1
52 1 IT1=1;//设置负跳变沿触发中断
53 1 flag1=0;//变量初始化
54 1 t0_num=0;
55 1 s1num=0;
C51 COMPILER V8.06 MAIN 12/02/2011 20:29:24 PAGE 2
56 1 week=1;
57 1 dula=0;//关闭数码管显示
58 1 wela=0;
59 1 lcden=0;
60 1 rd=0;
61 1 //以下几行在首次设置DS12C887时使用,以后不必再写入
62 1 write_ds(0x0A,0x20);//打开振荡器
63 1 write_ds(0x0B,0x26);//设置24小时模式,数据二进制格式
64 1 //开启闹铃中断
65 1 set_time();//设置上电默认时间
66 1 //-----------------------------------------------------*/
67 1 write_com(0x38);//1602液晶初始化
68 1 write_com(0x0c);
69 1 write_com(0x06);
70 1 write_com(0x01);
71 1 write_com(0x80);
72 1 for(num=0;num<15;num++)//写入液晶固定部分显示
73 1 {
74 2 write_date(table[num]);
75 2 delay(1);
76 2 }
77 1 write_com(0x80+0x40);
78 1 for(num=0;num<11;num++)
79 1 {
80 2 write_date(table1[num]);
81 2 delay(1);
82 2 }
83 1 }
84 void write_sfm(uchar add,char date)
85 {//1602液晶刷新时分秒函数4为时,7为分,10为秒
86 1 char shi,ge;
87 1 shi=date/10;
88 1 ge=date%10;
89 1 write_com(0x80+0x40+add);
90 1 write_date(0x30+shi);
91 1 write_date(0x30+ge);
92 1 }
93 void write_nyr(uchar add,char date)
94 {//1602液晶刷新年月日函数3为年,6为分,9为秒
95 1 char shi,ge;
96 1 shi=date/10;
97 1 ge=date%10;
98 1 write_com(0x80+add);
99 1 write_date(0x30+shi);
100 1 write_date(0x30+ge);
101 1 }
102 void write_week(char we)
103 {//写液晶星期显示函数
104 1 write_com(0x80+12);
105 1 switch(we)
106 1 {
107 2 case 1: write_date('M');delay(5);
108 2 write_date('O');delay(5);
109 2 write_date('N');
110 2 break;
111 2 case 2: write_date('T');delay(5);
112 2 write_date('U');delay(5);
113 2 write_date('E');
114 2 break;
115 2 case 3: write_date('W');delay(5);
116 2 write_date('E');delay(5);
117 2 write_date('D');
C51 COMPILER V8.06 MAIN 12/02/2011 20:29:24 PAGE 3
118 2 break;
119 2 case 4: write_date('T');delay(5);
120 2 write_date('H');delay(5);
121 2 write_date('U');
122 2 break;
123 2 case 5: write_date('F');delay(5);
124 2 write_date('R');delay(5);
125 2 write_date('I');
126 2 break;
127 2 case 6: write_date('S');delay(5);
128 2 write_date('A');delay(5);
129 2 write_date('T');
130 2 break;
131 2 case 7: write_date('S');delay(5);
132 2 write_date('U');delay(5);
133 2 write_date('N');
134 2 break;
135 2 }
136 1 }
137 void keyscan()
138 {
139 1 if(flag_ri==1)
140 1 {//这里用来取消闹钟报警,任一键取消报警
141 2 if((s1==0)||(s2==0)||(s3==0)||(s4==0))
142 2 {
143 3 delay(5);
144 3 if((s1==0)||(s2==0)||(s3==0)||(s4==0))
145 3 {
146 4 while(!(s1&&s2&&s3&&s4));
147 4 di();
148 4 flag_ri=0;//清除报警标志
149 4 }
150 3 }
151 2 }
152 1 if(s1==0)//检测S1
153 1 {
154 2 delay(5);
155 2 if(s1==0)
156 2 {
157 3 s1num++;//记录按下次数
158 3 if(flag1==1)
159 3 if(s1num==4)
160 3 s1num=1;
161 3 flag=1;
162 3 while(!s1);di();
163 3 switch(s1num)
164 3 {//光标闪烁点定位
165 4 case 1: write_com(0x80+0x40+10);
166 4 write_com(0x0f);
167 4 break;
168 4 case 2: write_com(0x80+0x40+7);
169 4 break;
170 4 case 3: write_com(0x80+0x40+4);
171 4 break;
172 4 case 4: write_com(0x80+12);
173 4 break;
174 4 case 5: write_com(0x80+9);
175 4 break;
176 4 case 6: write_com(0x80+6);
177 4 break;
178 4 case 7: write_com(0x80+3);
179 4 break;
C51 COMPILER V8.06 MAIN 12/02/2011 20:29:24 PAGE 4
180 4 case 8: s1num=0;
181 4 write_com(0x0c);
182 4 flag=0;
183 4 write_ds(0,miao);
184 4 write_ds(2,fen);
185 4 write_ds(4,shi);
186 4 write_ds(6,week);
187 4 write_ds(7,day);
188 4 write_ds(8,month);
189 4 write_ds(9,year);
190 4 break;
191 4 }
192 3 }
193 2 }
194 1 if(s1num!=0)//只有当S1按下后,才检测S2和S3
195 1 {
196 2 if(s2==0)
197 2 {
198 3 delay(1);
199 3 if(s2==0)
200 3 {
201 4 while(!s2);di();
202 4 switch(s1num)
203 4 {//根据功能键次数调节相应数值
204 5 case 1: miao++;
205 5 if(miao==60)
206 5 miao=0;
207 5 write_sfm(10,miao);
208 5 write_com(0x80+0x40+10);
209 5 break;
210 5 case 2: fen++;
211 5 if(fen==60)
212 5 fen=0;
213 5 write_sfm(7,fen);
214 5 write_com(0x80+0x40+7);
215 5 break;
216 5 case 3: shi++;
217 5 if(shi==24)
218 5 shi=0;
219 5 write_sfm(4,shi);
220 5 write_com(0x80+0x40+4);
221 5 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -