📄 shumaguan2.lst
字号:
C51 COMPILER V8.02 SHUMAGUAN2 10/26/2006 22:08:52 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SHUMAGUAN2
OBJECT MODULE PLACED IN shumaguan2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shumaguan2.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************************
2 **文件名:shumaguan.c **
3 **功能:实现键盘、数码管显示,实现计算器功能 **
4 **创建人:xingyuegu **
5 **创建日期:2006-9-10 **
6 **版本:1.0 **
7 **修改日期:2006-10-17 **
8 **版本:2.0 **
9 **********************************************************************/
10
11 #include <reg51.h>
12
13 /**********************************************************************
14 ** 函数申明 **
15 **********************************************************************/
16
17 void delay(unsigned int);
18 void display(int );
19 unsigned char key_scan(void);
20 unsigned char transition(unsigned char);
21 void time_set();
22 void time0_int();
23 bit isdigit(unsigned char );
24 unsigned int process(unsigned char );
25
26 /**********************************************************************
27 ** 变量定义 **
28 **********************************************************************/
29 unsigned int result=0;
30 unsigned int currentvalue=0,lastvalue;
31 unsigned char lastop,op1;
32 bit flag=0;
33 int code num_tab1[4]=
34 {0x88,0x84,0x82,0x81}
35 ;
36 int code num_tab2[11]=
37 {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}
38 ;
39 unsigned char code keyvalue[][4]={
40 {'7','8','9','/'},
41 {'4','5','6','*'},
42 {'1','2','3','-'},
43 {'o','0','=','+'}
44 };
45 /**********************************************************************
46 **函数功能:主函数 **
47 **参数:无 **
48 **返回:无 **
49 **********************************************************************/
50 void main()
51 {
52 1 unsigned char kvalue,flag=0;
53 1 while(1)
54 1 {
55 2
C51 COMPILER V8.02 SHUMAGUAN2 10/26/2006 22:08:52 PAGE 2
56 2 kvalue=key_scan();
57 2 if(kvalue!=0)
58 2 result=process(kvalue);
59 2 kvalue=0;
60 2 if(result<=9999)
61 2 {
62 3 display(result);
63 3
64 3 }
65 2 else
66 2 {
67 3 display(0);
68 3
69 3 }
70 2
71 2 }
72 1
73 1 }
74 /**********************************************************************
75 **函数功能:键值处理函数(处理+.-.*./.=) **
76 **参数:字符型 **
77 **返回:整型 **
78 **********************************************************************/
79 unsigned int process(unsigned char kvalue)
80 {
81 1
82 1 if(isdigit(kvalue)&&!flag) //如果是数字,求值
83 1 {
84 2 currentvalue=transition(kvalue)+currentvalue*10;
85 2 result=currentvalue;
86 2
87 2
88 2 }
89 1 else //如果是功能键
90 1 if(kvalue=='o') //如果是ON/C,清0
91 1 {
92 2 result=0;
93 2 currentvalue=0;
94 2 lastvalue=0;
95 2 }
96 1 else if(kvalue=='+') //如果是“+”
97 1 {
98 2 lastop=kvalue; //lastop保存操作码
99 2 lastvalue=result;//当前值成为上次值
100 2 currentvalue=0; //当前值清0
101 2 }
102 1 else if(kvalue=='-')
103 1 {
104 2 lastop=kvalue;
105 2 lastvalue=result;
106 2 currentvalue=0;
107 2 }
108 1 else if(kvalue=='*')
109 1 {
110 2 lastop=kvalue;
111 2 lastvalue=result;
112 2 currentvalue=0;
113 2 }
114 1 else if(kvalue=='/')
115 1 {
116 2 lastop=kvalue;
117 2 lastvalue=result;
C51 COMPILER V8.02 SHUMAGUAN2 10/26/2006 22:08:52 PAGE 3
118 2 currentvalue=0;
119 2 }
120 1
121 1 else if(kvalue=='=') //如果是“=”
122 1 {
123 2 switch(lastop) //判断操作码是什么
124 2 {
125 3 case '+':
126 3 {
127 4 // result=result+lastvalue;
128 4 result=currentvalue+lastvalue;
129 4 lastvalue=result;
130 4 break;
131 4 }
132 3 case '-':
133 3 {
134 4 result=lastvalue-currentvalue;
135 4 lastvalue=result;
136 4 break;
137 4 }
138 3 case '*':
139 3 {
140 4 result=currentvalue*lastvalue;
141 4 lastvalue=result;
142 4 break;
143 4 }
144 3 case '/':
145 3 {
146 4 result=lastvalue/currentvalue;
147 4 lastvalue=result;
148 4 break;
149 4 }
150 3
151 3 }
152 2 }
153 1 if(result>9999)
154 1 {
155 2 result=0;
156 2 currentvalue=0;
157 2 }
158 1 return result;
159 1 }
160
161
162 /**********************************************************************
163 **函数功能:判断按键的键值是功能键还是数字键 **
164 **参数:整型数 **
165 **返回:BOOL型 **
166 **********************************************************************/
167 bit isdigit(unsigned char kvalue)
168 {
169 1 if(kvalue>='0'&&kvalue<='9')
170 1 return 1;
171 1 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -