📄 text2.lst
字号:
C51 COMPILER V7.07 TEXT2 01/29/2009 01:09:49 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>//加载头文件
2 #define uchar unsigned char//变量类型的宏定义
3 #define uint unsigned int//变量类型的宏定义
4 #define SET 5
5 #define MON 4
6 #define DAY 3
7 #define HOU 2
8 #define MIN 1
9 uchar SEG7[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};/*0~9的数码管段码*/
10 uchar act[12]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x04,0x08,0x10,0x20};
11 uchar MS,mon,day,hou,min;
12 uchar key,discnt;
13 uint cnt;
14 sbit MSKEY=P0^5; /*功能键标志*/
15 sbit MONKEY=P0^4;//月按键
16 sbit DAYKEY=P0^3;//天按键
17 sbit HOUKEY=P0^2;//时按键
18 sbit MINKEY=P0^1;//分按键
19 //sbit CHECKKEY=P3^0;//查询按键
20 sbit CLK=P1^0;
21 sbit DATA=P1^1;
22
23 void TIMERIni(void);
24 void menu(void);
25 void delay(uint k);
26 void keyboard(void);
27 void send164(uchar m);
28 void dis_time(uchar m);
29 void dis_adjtime(uchar m);
30
31 void menu(void)//扫描按键子函数
32 {
33 1
34 1 if(key==SET){MS++;if(MS==2)MS=0;}// 调整模式
35 1 if(MS==1)
36 1 {
37 2 switch(key)
38 2 {
39 3 case (MIN):{min++;if(min>=60)min=0; }break;
40 3 case (HOU):{hou++;if(hou>23)hou=0; } break;
41 3 case(DAY):{day++;if(day>31)day=1; }break;
42 3 case(MON):{mon++;if(mon>12)mon=1; }break;
43 3 default:break;
44 3 }
45 2 }
46 1 key=0;
47 1
48 1 }
49
50 void delay(uint k)
51 {
52 1 uint i,j;
53 1 for(i=0;i<k;i++)
54 1 {
55 2 for(j=0;j<1000;j++) ;
C51 COMPILER V7.07 TEXT2 01/29/2009 01:09:49 PAGE 2
56 2 }
57 1 }
58
59 void keyboard(void)
60 {
61 1 P0=0X3F;
62 1 if((P0&0x02)==0)
63 1 { delay(5);
64 2 while((P0&0x02)==0);
65 2 key=MIN;
66 2 }
67 1 else
68 1 if((P0&0x04)==0)
69 1 {
70 2 delay(5);
71 2 while((P0&0x04)==0);
72 2 key=HOU;
73 2 }
74 1 else
75 1 if((P0&0x08)==0)
76 1 {
77 2 delay(5);
78 2 while((P0&0x08)==0);
79 2 key=DAY;
80 2 }
81 1 else
82 1 if((P0&0x10)==0)
83 1 {
84 2 delay(5);
85 2 while((P0&0x10)==0);
86 2 key=MON;
87 2 }
88 1 else
89 1 if((P0&0x20)==0)
90 1 {
91 2 delay(5);
92 2 while((P0&0x20)==0);
93 2 key=SET;
94 2 }
95 1 }
96
97
98 void time0(void) interrupt 1
99 {
100 1 TH0=0xF4;TL0=0x48;
101 1 keyboard();
102 1 if(discnt>11)discnt=0;// 显示为8位数码管
103 1 if(cnt>600)cnt=0;// 报警时的闪烁周期
104 1 switch(MS)
105 1 {
106 2 case 0:{dis_time(discnt);}break;// 显示走时
107 2 case 1:{dis_adjtime(discnt);}break;// 显示调时
108 2 default: break;
109 2 }
110 1 discnt++;cnt++;
111 1
112 1 }
113
114
115 void send164(uchar m)
116 {uchar k,i,b;
117 1 k=SEG7[m];
C51 COMPILER V7.07 TEXT2 01/29/2009 01:09:49 PAGE 3
118 1 i=8;
119 1 CLK=0;
120 1 while (i--)
121 1 {b=k>>i;
122 2 if((b&0x01)==0x01)DATA=1;
123 2 else DATA=0;
124 2 CLK=1;
125 2 CLK=0;
126 2 }
127 1
128 1 }
129 //P2 KOU //P1kou
130 void dis_time(uchar m)
131 {
132 1 P1&=0XC3;
133 1 P2=0X00;
134 1 {switch(m)
135 2 {case 0:{send164(mon/10);P2|=act[m];}break;
136 3 case 1:{send164(mon%10);P2|=act[m];}break;
137 3 case 2:{send164(day/10);P2|=act[m];}break;
138 3 case 3:{send164(day%10);P2|=act[m];}break;
139 3 case 4:{send164(hou/10);P2|=act[m];}break;
140 3 case 5:{send164(hou%10);P2|=act[m];}break;
141 3 case 6:{send164(min/10);P2|=act[m];}break;
142 3 case 7:{send164(min%10);P2|=act[m];}break;
143 3 case 8:{send164(0);P1|=act[m];P2=0X00;}break;
144 3 case 9:{send164(0);P1|=act[m];P2=0X00;}break;
145 3 case 10:{send164(0);P1|=act[m];P2=0X00;}break;
146 3 case 11:{send164(0);P1|=act[m];P2=0X00;}break;
147 3 default:break;}
148 2 }
149 1
150 1 }
151
152
153 void dis_adjtime(uchar m)
154 {
155 1 if(cnt>200)
156 1 {
157 2 P1&=0XC3;
158 2 P2=0X00;
159 2 switch(m)
160 2 {case 0:{send164(mon/10);P2|=act[m];P1&=0XC3;}break;
161 3 case 1:{send164(mon%10);P2|=act[m];P1&=0XC3;}break;
162 3 case 2:{send164(day/10);P2|=act[m];P1&=0XC3;}break;
163 3 case 3:{send164(day%10);P2|=act[m];P1&=0XC3;}break;
164 3 case 4:{send164(hou/10);P2|=act[m];P1&=0XC3;}break;
165 3 case 5:{send164(hou%10);P2|=act[m];P1&=0XC3;}break;
166 3 case 6:{send164(min/10);P2|=act[m];P1&=0XC3;}break;
167 3 case 7:{send164(min%10);P2|=act[m];P1&=0XC3;}break;
168 3 case 8:{send164(0);P1|=act[m];P2=0X00;}break;
169 3 case 9:{send164(0);P1|=act[m];P2=0X00;}break;
170 3 case 10:{send164(0);P1|=act[m];P2=0X00;}break;
171 3 case 11:{send164(0);P1|=act[m];P2=0X00;}break;
172 3 default:break;
173 3 }
174 2 }
175 1 else
176 1 {
177 2 P1&=0XC3;
178 2 P2=0X00;
179 2 }
C51 COMPILER V7.07 TEXT2 01/29/2009 01:09:49 PAGE 4
180 1 }
181
182
183 void TIMERIni(void)
184 {
185 1 TMOD=0X01;
186 1 TH0=0xF4;TL0=0x48;
187 1 EA=1;
188 1 ET0=1;
189 1 TR0=1;
190 1 }
191
192 void main(void)
193 {
194 1 TIMERIni();
195 1 while(1)
196 1 {
197 2 // keyboard();
198 2 if(key>0)
199 2 {
200 3 menu();
201 3 }
202 2 }
203 1 }
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 683 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 31 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -