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