📄 shumaguan3.lst
字号:
C51 COMPILER V8.02 SHUMAGUAN3 10/22/2006 19:31:20 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SHUMAGUAN3
OBJECT MODULE PLACED IN shumaguan3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shumaguan3.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 void init(void);
26
27 /**********************************************************************
28 ** 变量定义 **
29 **********************************************************************/
30 unsigned int result=0;
31 unsigned int currentvalue=0,lastvalue;
32 unsigned char lastop;
33 volatile bit flag=0;
34 int code num_tab1[4]=
35 {0x88,0x84,0x82,0x81}
36 ;
37 int code num_tab2[11]=
38 {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}
39 ;
40 unsigned char code keyvalue[][4]={
41 {'7','8','9','/'},
42 {'4','5','6','*'},
43 {'1','2','3','-'},
44 {'o','0','=','+'}
45 };
46 /**********************************************************************
47 **函数功能:主函数 **
48 **参数:无 **
49 **返回:无 **
50 **********************************************************************/
51 void main()
52 {
53 1 unsigned char kvalue;
54 1 init();
55 1 while(1)
C51 COMPILER V8.02 SHUMAGUAN3 10/22/2006 19:31:20 PAGE 2
56 1 {
57 2 if(flag)
58 2 {
59 3 kvalue=key_scan();
60 3 init();
61 3 flag=0;
62 3 if(kvalue!=0)
63 3 result=process(kvalue);
64 3 }
65 2 if(result<=9999)
66 2 {
67 3 display(result);
68 3
69 3 }
70 2 else
71 2 {
72 3 display(0);
73 3
74 3 }
75 2
76 2 }
77 1
78 1 }
79 /**********************************************************************
80 **函数功能:初始化函数(包括中断初始化) **
81 **参数:无 **
82 **返回:无 **
83 **********************************************************************/
84 void init(void)
85 {
86 1 //SP=0x50;
87 1 EA=1;
88 1 EX0=1;
89 1 IT0=1;
90 1 P1=0xf0;
91 1 }
92 /**********************************************************************
93 **函数功能:中断服务子程序 **
94 **参数:无 **
95 **返回:无 **
96 **********************************************************************/
97
98 void int0_isr(void) interrupt 0 using 1
99 {
100 1
101 1 if(!flag)
102 1 {
103 2 EX0=0;
104 2 flag=1;
105 2 }
106 1
107 1
108 1 }
109 /**********************************************************************
110 **函数功能:键值处理函数(处理+.-.*./.=) **
111 **参数:字符型 **
112 **返回:整型 **
113 **********************************************************************/
114 unsigned int process(unsigned char kvalue)
115 {
116 1
117 1 if(isdigit(kvalue))//&&!flag) //如果是数字,求值
C51 COMPILER V8.02 SHUMAGUAN3 10/22/2006 19:31:20 PAGE 3
118 1 {
119 2 currentvalue=transition(kvalue)+currentvalue*10;
120 2 result=currentvalue;
121 2
122 2
123 2 }
124 1 else //如果是功能键
125 1 if(kvalue=='o') //如果是ON/C,清0
126 1 {
127 2 result=0;
128 2 currentvalue=0;
129 2 lastvalue=0;
130 2 }
131 1 else if(kvalue=='+') //如果是“+”
132 1 {
133 2 lastop=kvalue; //lastop保存操作码
134 2 lastvalue=currentvalue;//当前值成为上次值
135 2 currentvalue=0; //当前值清0
136 2 }
137 1 else if(kvalue=='-')
138 1 {
139 2 lastop=kvalue;
140 2 lastvalue=currentvalue;
141 2 currentvalue=0;
142 2 }
143 1 else if(kvalue=='*')
144 1 {
145 2 lastop=kvalue;
146 2 lastvalue=currentvalue;
147 2 currentvalue=0;
148 2 }
149 1 else if(kvalue=='/')
150 1 {
151 2 lastop=kvalue;
152 2 lastvalue=currentvalue;
153 2 currentvalue=0;
154 2 }
155 1
156 1 else if(kvalue=='=') //如果是“=”
157 1 {
158 2 switch(lastop) //判断操作码是什么
159 2 {
160 3 case '+':
161 3 {
162 4 result=result+lastvalue;
163 4 currentvalue=result;
164 4 break;
165 4 }
166 3 case '-':
167 3 {
168 4 result=lastvalue-currentvalue;
169 4 currentvalue=result;
170 4 break;
171 4 }
172 3 case '*':
173 3 {
174 4 result=currentvalue*lastvalue;
175 4 currentvalue=result;
176 4 break;
177 4 }
178 3 case '/':
179 3 {
C51 COMPILER V8.02 SHUMAGUAN3 10/22/2006 19:31:20 PAGE 4
180 4 result=lastvalue/currentvalue;
181 4 currentvalue=result;
182 4 break;
183 4 }
184 3 }
185 2 }
186 1 if(result>9999)
187 1 {
188 2 result=0;
189 2 currentvalue=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -