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