📄 sp0604_实验18_计算器.lst
字号:
C51 COMPILER V8.01 SP0604_实验18_计算芲 04/06/2006 23:05:49 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE SP0604_实验18_计算芲
OBJECT MODULE PLACED IN SP0604_实验18_计算器.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE SP0604_实验18_计算器.c BROWSE DEBUG OBJECTEXTEND TABS(2)
line level source
1 #include <REGX51.H>
2
3
4 #define PORTA P0
5 #define PORTC P2
6 #define PORTB P1
7 #define PINB P1
8 #define LEDDATAPORT PORTA
9 #define LEDBITPORT PORTC
10 const unsigned char LEDDATA[]={0x3f,0x06,0x5b,0x4f,0x66,
11 0x6d,0x7d,0x07,0x7f,0x6f,
12 0x77,0x7c,0x39,0x5e,0x79,0x71,
13 0x00,0x40,
14 };
15 //数码管扫描代码表
16 unsigned char code LEDBITDATA[]=
17 {
18 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
19 };
20
21 void Delay(unsigned int t)
22 {
23 1 while(t)t--;
24 1 }
25
26
27
28
29 void main(void)
30 {
31 1 unsigned char LEDBuffer[8]={0,16,16,16,16,16,16,16};
32 1 unsigned char ScanLEDCount;
33 1
34 1 unsigned char i;
35 1 unsigned char Key;
36 1 unsigned char Temp;
37 1 unsigned char NoFlashFlag;
38 1
39 1 unsigned char GetKeyCount=0;
40 1 unsigned char GetKeyMaxFlag=0;
41 1
42 1 unsigned long NumberA;
43 1 unsigned long NumberB;
44 1 long Result;
45 1 unsigned char NagFlag=0;
46 1 unsigned char DotPosition=0;
47 1 unsigned char CurrentFunction=0;
48 1 unsigned char Signal;
49 1
50 1
51 1 while(1)
52 1 {
53 2 if(DotPosition!=0)
54 2 {
55 3 if(DotPosition==ScanLEDCount)LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]]|0x80;
C51 COMPILER V8.01 SP0604_实验18_计算芲 04/06/2006 23:05:49 PAGE 2
56 3 else LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]];
57 3 }
58 2 else LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]];
59 2 LEDBITPORT=LEDBITDATA[ScanLEDCount];
60 2 ScanLEDCount++;
61 2 if(ScanLEDCount==sizeof(LEDBuffer))ScanLEDCount=0;
62 2 Delay(664);
63 2
64 2 PORTB = 0xF0;
65 2 Delay(10);
66 2 if((PINB & 0xF0)!=0xF0)
67 2 {
68 3 if(NoFlashFlag==0)
69 3 {
70 4 Delay(664);
71 4 if((PINB & 0xF0)!=0xF0)
72 4 {
73 5 NoFlashFlag=1;
74 5 Temp=PINB & 0xF0;
75 5 PORTB = 0x0F;
76 5 Delay(10);
77 5 Temp|=(PINB & 0x0F);
78 5 Key=0;
79 5
80 5 switch(Temp)
81 5 {
82 6 case 0x7e://"=" Calc Button
83 6 Key=15;
84 6 break;
85 6 case 0xbe:
86 6 Key=13;//"/" Div Button
87 6 break;
88 6 case 0xde://"*" Mul Button
89 6 Key=12;
90 6 break;
91 6 case 0xee://"0"
92 6 Key=0;
93 6 break;
94 6 case 0x7d://"-"
95 6 Key=11;
96 6 break;
97 6 case 0xbd://"3"
98 6 Key=3;
99 6 break;
100 6 case 0xdd://"2"
101 6 Key=2;
102 6 break;
103 6 case 0xed://"1"
104 6 Key=1;
105 6 break;
106 6 case 0x7b://"+"
107 6 Key=10;
108 6 break;
109 6 case 0xbb://"6"
110 6 Key=6;
111 6 break;
112 6 case 0xdb://"5" No.5 Button
113 6 Key=5;
114 6 break;
115 6 case 0xeb://"4" No.4 Button
116 6 Key=4;
117 6 break;
C51 COMPILER V8.01 SP0604_实验18_计算芲 04/06/2006 23:05:49 PAGE 3
118 6 case 0x77://"C" Clear Button
119 6 Key=14;
120 6 break;
121 6 case 0xb7://"9"
122 6 Key=9;
123 6 break;
124 6 case 0xd7://"8"
125 6 Key=8;
126 6 break;
127 6 case 0xe7://"7"
128 6 Key=7;
129 6 break;
130 6 }
131 5
132 5 switch(CurrentFunction)
133 5 {
134 6 case 0://输入数据1
135 6 if((Key>=0)&&(Key<=9))
136 6 {
137 7 if(GetKeyMaxFlag==0)
138 7 {
139 8 for(Temp=GetKeyCount;Temp>0;Temp--)
140 8 LEDBuffer[Temp]=LEDBuffer[Temp-1];
141 8 LEDBuffer[0]=Key;
142 8 GetKeyCount++;
143 8 if(GetKeyCount==5)GetKeyMaxFlag=1;
144 8 }
145 7 }
146 6 else if((Key>=10)&&(Key<=13))
147 6 {
148 7 NumberA=0;
149 7 Temp=0;
150 7 while(LEDBuffer[Temp]!=16)
151 7 {
152 8 switch(Temp)
153 8 {
154 9 case 0:
155 9 NumberA+=LEDBuffer[Temp];
156 9 break;
157 9 case 1:
158 9 NumberA+=(unsigned long)(LEDBuffer[Temp])*10;
159 9 break;
160 9 case 2:
161 9 NumberA+=(unsigned long)(LEDBuffer[Temp])*100;
162 9 break;
163 9 case 3:
164 9 NumberA+=(unsigned long)(LEDBuffer[Temp])*1000;
165 9 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -