📄 main.lst
字号:
C51 COMPILER V7.00 MAIN 06/06/2011 23:48:44 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 //uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
5 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
6 //段码: 0 1 2 3 4 5 6 7 8 9
7 uchar n,aa,shi,fen,miao,miaoge,miaoshi,fenge,fenshi,shige,shishi;
8 sbit S2=P3^4; //秒表功能
9 sbit S3=P3^5; //调分
10 sbit S4=P3^6; //调时
11 sbit S5=P3^7; //时,分,秒清零
12 sbit wela=P2^7; //位选控制
13 sbit dula=P2^6; //段选控制
14
15 void delayms(uint z);//延时函数声明
16 void keyscan(); //键盘扫描函数声明
17 void display(); //显示函数声明
18 void init(); //初始化函数声明
19 /***************主函数**************/
20 void main()
21 {
22 1 init(); //初始化
23 1 while(1)
24 1 {
25 2 display();
26 2 keyscan();
27 2 }
28 1 }
29 /*************初始化函数************/
30 void init()
31 {
32 1 miao=0; //秒分时的初始化
33 1 fen=0;
34 1 shi=0;
35 1 aa=0;
36 1 n=0;
37 1 TMOD=0x11; //设置定时器0和1为工作方式1
38 1 TH0=(65536-50000)/256; //装设初值
39 1 TL0=(65536-50000)%256;
40 1 EA=1; //开启总中断
41 1 ET0=1; //开启定时器0中断
42 1 TR0=1; //启动定时器0
43 1 TH1=(65536-5000)/256; //装设初值
44 1 TL1=(65536-5000)%256;
45 1 ET1=1; //开启定时器0中断
46 1 TR1=1; //启动定时器0
47 1 }
48 /********定时器T0中断函数**********/
49 void t0(void) interrupt 1
50 {
51 1 TH0=(65536-50000)/256; //装设初值
52 1 TL0=(65536-50000)%256;
53 1 aa++;
54 1 if(aa==18) //到达1秒重新计数并将1秒累加
55 1 {
C51 COMPILER V7.00 MAIN 06/06/2011 23:48:44 PAGE 2
56 2 aa=0; //归零
57 2 miao++;
58 2 if(miao==60)
59 2 {
60 3 miao=0; //如果秒累加为60则清零同时分钟累加计数
61 3 fen++;
62 3 if(fen==60) //如果分钟累加到60清零时进位
63 3 {
64 4 fen=0;
65 4 shi++;
66 4 if(shi==24) //如果时累加到60清零时进位
67 4 shi=0;
68 4 }
69 3 }
70 2 }
71 1 miaoge=miao%10; //将累加的秒de个ge位分离出来
72 1 miaoshi=miao/10; //将累加的秒de个十位分离出来
73 1 fenge=fen%10; //将累加的分de个ge位分离出来
74 1 fenshi=fen/10; //将累加的分钟de个十位分离出来
75 1 shige=shi%10; //将累加的时de个ge位分离出来
76 1 shishi=shi/10; //将累加的时de个十位分离出来
77 1 }
78 /********定时器T1中断函数**********/
79 void t1(void) interrupt 3 //按键处理
80 {
81 1 TH1=(65536-5000)/256;
82 1 TL1=(65536-5000)%256;
83 1 n++;
84 1 if(n==20) //每秒检测一次key1按键
85 1 {
86 2 n=0;
87 2 if(S2==0)
88 2 {
89 3 delayms(10);
90 3 if(S2==0) //key1按键确实被按下
91 3 {
92 4 miao++; //秒加1
93 4 if(miao==60) //秒到60时分进位
94 4 {
95 5 miao=0;
96 5 fen++;
97 5 if(fen==60) //分到60时时进位
98 5 {
99 6 fen=0;
100 6 shi++;
101 6 if(shi==24) //时到24时归零
102 6 shi=0;
103 6
104 6 }
105 5 }
106 4 }
107 3 }
108 2
109 2 }
110 1
111 1 }
112 /*************延时函数*************/
113 void delayms(uint z)
114 {
115 1 uint x,y;
116 1 for(x=z;z>0;z--)
117 1 for(y=110;y>0;y--);
C51 COMPILER V7.00 MAIN 06/06/2011 23:48:44 PAGE 3
118 1 }
119 /*************显示函数*************/
120 void display()
121 {
122 1 dula=1; //hour的十位显示
123 1 P0=table[shishi];
124 1 dula=0;
125 1 P0=0xff;
126 1 wela=1;
127 1 P0=0xfe;
128 1 wela=0;
129 1 delayms(10);
130 1
131 1 dula=1; //hour的个位显示
132 1 P0=table[shige];
133 1 dula=0;
134 1 P0=0xff;
135 1 wela=1;
136 1 P0=0xfd;
137 1 wela=0;
138 1 delayms(1);
139 1
140 1 dula=1; //min的十位显示
141 1 P0=table[fenshi];
142 1 dula=0;
143 1 P0=0xff;
144 1 wela=1;
145 1 P0=0xfb;
146 1 wela=0;
147 1 delayms(1);
148 1
149 1 dula=1; //min的个位显示
150 1 P0=table[fenge];
151 1 dula=0;
152 1 P0=0xff;
153 1 wela=1;
154 1 P0=0xf7;
155 1 wela=0;
156 1 delayms(1);
157 1
158 1 dula=1; //sec的十位显示
159 1 P0=table[miaoshi];
160 1 dula=0;
161 1 P0=0xff;
162 1 wela=1;
163 1 P0=0xef;
164 1 wela=0;
165 1 delayms(1);
166 1
167 1 dula=1; //sec的个位显示
168 1 P0=table[miaoge];
169 1 dula=0;
170 1 P0=0xff;
171 1 wela=1;
172 1 P0=0xdf;
173 1 wela=0;
174 1 delayms(1);
175 1
176 1 }
177 /***********键盘扫描函数*************/
178 void keyscan()
179 {
C51 COMPILER V7.00 MAIN 06/06/2011 23:48:44 PAGE 4
180 1 if(S3==0)
181 1 {
182 2 delayms(10);
183 2 if(S3==0) //key2按键确实被按下
184 2 {
185 3 fen++; //分进位到60时并清零
186 3 if(fen==60)
187 3 {
188 4 fen=0;
189 4 }
190 3 while(!S3);
191 3 fenge=fen%10; //将累加的分钟de个十位和个位分离出来
192 3 fenshi=fen/10;
193 3 }
194 2 }
195 1 if(S4==0)
196 1 {
197 2 delayms(10);
198 2 if(S4==0) //key3按键确实被按下
199 2 {
200 3 shi++; //时进位到24时并清零
201 3 if(shi==24)
202 3 {
203 4 shi=0;
204 4 }
205 3 while(!S4)
206 3 shige=shi%10; //将累加的时de个十位和个位分离出来
207 3 shishi=shi/10;
208 3
209 3 }
210 2 }
211 1 if(S5==0)
212 1 {
213 2 delayms(10);
214 2 if(S5==0) //key4按键确实被按下
215 2 {
216 3 while(!S5);
217 3 miao=0; //将秒分时归零
218 3 fen=0;
219 3 shi=0;
220 3 }
221 2 }
222 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 559 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 2
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 + -