📄 saomiao.lst
字号:
C51 COMPILER V7.50 SAOMIAO 04/05/2009 00:13:18 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SAOMIAO
OBJECT MODULE PLACED IN saomiao.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE saomiao.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 //#include <intrins.h>
3
4 #define uint unsigned int
5 #define uchar unsigned char
6
7 uchar code dutable[]={ //共阴极段选表 数码管段选 0~9
8 0xc0,0xf9,0xa4,0xb0,0x99,
9 0x92,0x82,0xf8,0x80,0x90
10 };
11
12 uchar code wetable[]={0x10,0x20,0x40,0x80}; //位选表
13
14 uint wei_num; //四位数码管位选变量
15
16 uint Set_key_num; //设置按钮的按下次数
17
18 uint fen,miao; //定义时间格式变量 12:34
19 uint Time_num;
20
21 sbit Set_key=P1^5; //设置按钮
22 sbit Inc_key=P1^6; //增1按钮
23 sbit Dec_key=P1^7; //减1按钮
24
25 ////////////////////
26 // 延时函数
27 void delay(uint z)
28 {
29 1 uint x,y;
30 1 for(x=110;x>0;x++)
31 1 for(y=z;y>0;y--);
32 1 }
33
34
35 ////////////////////
36 // 数码管显示函数
37 void display(uint ifen,uint imiao)
38 {
39 1 uint shi_fen,ge_fen,shi_miao,ge_miao;
40 1
41 1 shi_fen = ifen/10;
42 1 P0 = wetable[wei_num];
43 1 P2 = dutable[shi_fen];
44 1 wei_num++;
45 1 delay(10);
46 1
47 1 ge_fen = ifen%10;
48 1 P0 = wetable[wei_num];
49 1 P2 = dutable[shi_fen];
50 1 wei_num++;
51 1 delay(10);
52 1
53 1 shi_miao = imiao/10;
54 1 P0 = wetable[wei_num];
55 1 P2 = dutable[shi_fen];
C51 COMPILER V7.50 SAOMIAO 04/05/2009 00:13:18 PAGE 2
56 1 wei_num++;
57 1 delay(10);
58 1
59 1 ge_miao = imiao%10;
60 1 P0 = wetable[wei_num];
61 1 P2 = dutable[shi_fen];
62 1 wei_num++;
63 1 delay(10);
64 1
65 1 wei_num = 0;
66 1
67 1 }
68
69 ////////////////////
70 // 初始化函数
71 void init()
72 {
73 1 Time_num = 0; //清0倒计时中断次数
74 1 wei_num = 0; //清0四位数码管位数变量
75 1
76 1 P0 = 0xfe; //P0口是位选 第一位选通 0 liang
77 1 P2 = 0x11; //P1口是段选 初次运行不显示数值 1 liang
78 1
79 1 Set_key=1; //按键接口设置高电平
80 1 Inc_key=1;
81 1 Dec_key=1;
82 1
83 1 Set_key_num=0; //清0 即:按了0次
84 1
85 1 fen=0; //分、秒清0
86 1 miao=0;
87 1
88 1
89 1 /////////////////
90 1 //动态扫描定时器初始化
91 1 TMOD=0x01;
92 1 TH0=(65536-50000)/256; //50ms
93 1 TL0=(65535-50000)%256;
94 1 EA=1; //开外部中断
95 1 ET0=1; //开始定时器0中断
96 1 TR0=1; //启动定时器0
97 1
98 1 /////////////////
99 1 //时钟定时器初始化
100 1 TMOD=0x01;
101 1 TH1=(65536-50000)/256; //50ms
102 1 TL1=(65535-50000)%256;
103 1 EA=1;
104 1
105 1
106 1 }
107
108
109 ////////////////////
110 // 入口函数
111 void main()
112 {
113 1 init();
114 1 while(1)
115 1 {
116 2 ////////////////////
117 2 //倒计时处理
C51 COMPILER V7.50 SAOMIAO 04/05/2009 00:13:18 PAGE 3
118 2 if(Time_num == 20)
119 2 {
120 3 Time_num = 0;
121 3 if(fen==0)
122 3 {
123 4 if(miao==0)
124 4 ; /////////////////////////
125 4 }
126 3 if(miao==-1)
127 3 {
128 4 miao=59;
129 4 fen--;
130 4 }
131 3 miao--;
132 3 }
133 2 ////////////////////
134 2 // "设置"键按下
135 2 if(Set_key!= 1)
136 2 {
137 3 delay(10);
138 3 if(Set_key!= 1)
139 3 {
140 4 while(Set_key!= 1);
141 4 ET1=0; //Set时 关闭倒计时
142 4 TR1=0;
143 4 if(Set_key_num>=3) //按了3次
144 4 {
145 5 Set_key_num = 0;
146 5 ET1=1; //开始倒计时
147 5 TR1=1;
148 5 }
149 4 Set_key_num++; //次数加1
150 4 }
151 3 }
152 2 ////////////////////
153 2 // "增加"键按下
154 2 if(Inc_key!= 1)
155 2 {
156 3 delay(10);
157 3 if(Inc_key!= 1)
158 3 {
159 4 while(Inc_key!= 1);
160 4 if(Set_key==1) //按了1次,调分钟
161 4 {
162 5 if(fen==60)
163 5 fen=0;
164 5 else
165 5 fen++;
166 5 }
167 4 if(Set_key==2)
168 4 {
169 5 if(miao==60)
170 5 miao=0;
171 5 else
172 5 miao++;
173 5 }
174 4 }
175 3 }
176 2 ////////////////////
177 2 // "降低"键按下
178 2 if(Dec_key!= 1)
179 2 {
C51 COMPILER V7.50 SAOMIAO 04/05/2009 00:13:18 PAGE 4
180 3 delay(10);
181 3 if(Dec_key!= 1)
182 3 {
183 4 while(Dec_key!= 1);
184 4 if(Set_key==1) //按了1次,调秒钟
185 4 {
186 5 if(fen==-1)
187 5 fen=60;
188 5 else
189 5 fen--;
190 5 }
191 4 if(Set_key==2)
192 4 {
193 5 if(miao==-1)
194 5 miao=0;
195 5 else
196 5 miao--;
197 5 }
198 4 }
199 3 }
200 2 }
201 1 }
202
203
204 ////////////////////
205 // 动态扫描中断源
206 void timer0() interrupt 1
207 {
208 1 TH0=(65536-50000)/256; //50ms
209 1 TL0=(65535-50000)%256;
210 1 // display(fen,miao);
211 1 display(12,34);
212 1 }
213
214
215
216 ////////////////////
217 // 秒数时钟中断源
218 void timer1() interrupt 3
219 {
220 1 TH1=(65536-50000)/256; //50ms
221 1 TL1=(65535-50000)%256;
222 1
223 1 Time_num++;
224 1 }
225
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 599 ----
CONSTANT SIZE = 14 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 12
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 + -