📄 second.lst
字号:
C51 COMPILER V6.23a SECOND 09/08/2003 17:00:53 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE SECOND
NO OBJECT MODULE REQUESTED
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE second.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #pragma SRC
2 #include <stdio.h>
3 #include <reg51.h>
4
5
6 #define TRUE 1
7 #define FALSE 0
8
9 #define DELAY_VALUE 3
10 #define DELAY_VALUE_EXTRA 12
11
12
13
14 #define PinDrvKey1 P1_0
15 #define PinDrvKey2 P1_1
16 #define PinDrvKey3 P1_2
17 #define PinDrvKey4 P1_3
18 //键盘扫描的驱动线
19
20
21 #define PinScanKey1 P1_4
22 #define PinScanKey2 P1_5
23 #define PinScanKey3 P1_6
24 #define PinScanKey4 P1_7
25 //键盘扫描的信号获取线
26
27 #define PinSegA P2_0
28 #define PinSegB P2_1
29 #define PinSegC P2_2
30 #define PinSegD P2_3
31 //七段码的数据线
32
33 #define PinSelectA P2_4
34 #define PinSelectB P2_5
35 #define PinSelectC P2_6
36 //选择器的数据位
37
38 #define PinSelectCS P2_4
39 //选择器的片选位
40
41 #define LedSelect0 0x80
42 #define LedSelect1 0x90
43 #define LedSelect2 0xa0
44 #define LedSelect3 0xb0
45 #define LedSelect4 0xc0
46 #define LedSelect5 0xd0
47
48 #define PinLamp P0_0
49 //指示灯驱动管脚
50 #define PinSpeaker P0_1
51 //蜂鸣器驱动管脚
52
53 sbit P0_0=P0^0;
54 sbit P0_1=P0^1;
55 sbit P0_2=P0^2;
C51 COMPILER V6.23a SECOND 09/08/2003 17:00:53 PAGE 2
56 sbit P0_3=P0^3;
57 sbit P0_4=P0^4;
58 sbit P0_5=P0^5;
59 sbit P0_6=P0^6;
60 sbit P0_7=P0^7;
61
62 sbit P1_0=P1^0;
63 sbit P1_1=P1^1;
64 sbit P1_2=P1^2;
65 sbit P1_3=P1^3;
66 sbit P1_4=P1^4;
67 sbit P1_5=P1^5;
68 sbit P1_6=P1^6;
69 sbit P1_7=P1^7;
70
71 sbit P2_0=P2^0;
72 sbit P2_1=P2^1;
73 sbit P2_2=P2^2;
74 sbit P2_3=P2^3;
75 sbit P2_4=P2^4;
76 sbit P2_5=P2^5;
77 sbit P2_6=P2^6;
78 sbit P2_7=P2^7;
79
80
81 void initial(void);
82 //初始化子程序
83 void delay(short i);
84 //延时子程序
85 void display(unsigned char i,unsigned char num);
86 //显示子程序,其中变量i,num含义为在第i个数码管显示数字num.
87 unsigned char keyscan(void);
88 //键盘扫描子程序
89 void updatee(void);
90
91 unsigned char m1=0;
92 unsigned char m0=0;
93 unsigned char s1=0;
94 unsigned char s0=0;
95 unsigned char s01=0;
96 unsigned char s00=0;
97
98 void main(void)
99 {
100 1 unsigned char status;
101 1 unsigned char keyword;
102 1 initial();
103 1 //键盘驱动信号,发光二极管,以及蜂鸣器都设在无效状态
104 1 for(;;)
105 1 {
106 2 switch(status)
107 2 {
108 3 case 0:
109 3 keyword=keyscan();
110 3 if(keyword==16)
111 3 {
112 4 delay(DELAY_VALUE_EXTRA);
113 4 updatee();
114 4 }
115 3 else
116 3 if(keyword==11)status=1; //0状态为计时状态,1状态为停止状态
117 3 else
C51 COMPILER V6.23a SECOND 09/08/2003 17:00:53 PAGE 3
118 3 {
119 4 PinSpeaker=FALSE;
120 4 delay(DELAY_VALUE);
121 4 PinSpeaker=TRUE; //输入有错,蜂鸣器响
122 4 }
123 3 break;
124 3 case 1:
125 3 keyword=keyscan();
126 3 if(keyword==10)status=0; //开始计时,转到0状态;
127 3 else if(keyword==12)status=2;//2状态为设置初值状态;
128 3 else if(keyword==13){s0=0;
129 4 s1=0;
130 4 m0=0;
131 4 m1=0;
132 4 s01=0;
133 4 s00=0;}//清零
134 3 else
135 3 {
136 4 PinSpeaker=FALSE;
137 4 delay(DELAY_VALUE);
138 4 PinSpeaker=TRUE; //输入有错,蜂鸣器响
139 4 }
140 3 break;
141 3 case 2:
142 3 keyword=keyscan();
143 3 if(keyword==10&&s1<=5&&m1<=5) //秒表设置正确,则开始计时
144 3 status=0;
145 3 else if(keyword==11&&s1<=5&&m1<=5)//状态1与2的切换
146 3 status=1;
147 3 else if(keyword<10&&keyword>=0) //输入的是数字键
148 3 {
149 4 m1=m0;
150 4 m0=s1;
151 4 s1=s0;
152 4 s0=s01;
153 4 s01=s00;
154 4 s00=keyword;
155 4 updatee(); //输入的数字键从低位起往左移
156 4 }
157 3 else
158 3 {
159 4 PinSpeaker=FALSE;
160 4 delay(DELAY_VALUE);
161 4 PinSpeaker=TRUE; //输入有错,蜂鸣器响
162 4 }
163 3 }
164 2 }
165 1
166 1 }
167
168 void initial(void)
169 {
170 1 P1_0=FALSE;
171 1 P1_1=FALSE;
172 1 P1_2=FALSE;
173 1 P1_3=FALSE; //键盘驱动信号都设为低,避免干扰。
174 1 P0_0=TRUE; //发光二极管设为不亮
175 1 P0_1=TRUE; //蜂鸣器不响
176 1 }
177
178
179 void delay(short i) //延迟子程序,为精确计时,需要用汇编语言来做。R7刚好存的是i的值
C51 COMPILER V6.23a SECOND 09/08/2003 17:00:53 PAGE 4
180 {
181 1 short ii;
182 1 ii=i;
183 1 #pragma asm
184 1 X_delay:
185 1 USING 0
186 1 CLR A
187 1 MOV R4,A
188 1 MOV R5,A
189 1 XC0025:
190 1 CLR C
191 1 MOV A,R5
192 1 SUBB A,R7
193 1 MOV A,R6
194 1 XRL A,#080H
195 1 MOV R0,A
196 1 MOV A,R4
197 1 XRL A,#080H
198 1 SUBB A,R0
199 1 JNC XC0028
200 1 INC R5
201 1 CJNE R5,#00H,XC0069
202 1 INC R4
203 1 XC0069:
204 1 SJMP XC0025
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -