📄 ʵ
字号:
C51 COMPILER V7.50 实验四 10/20/2008 11:20:40 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 实验四
OBJECT MODULE PLACED IN 实验四.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 实验四.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h> //包含文件
2 #define uchar unsigned char
3 #define uint unsigned int
4
5 char b[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,
6 0xa1,0x86,0x8e,0x8c,0xc1,0xce,0x91,0x89,0xc7,0xff}; // 共阴极字符码
7
8 //延时函数,用于实现程序中的短暂延时,表示延时cnt个毫秒
9 void delay(unsigned int cnt)
10 {
11 1 unsigned char i;
12 1 while(cnt--)
13 1 {
14 2 for(i=220;i>0;i--)
15 2 ;
16 2 }
17 1 }
18
19 //键盘扫描程序
20 uchar keyboardscan(void)
21 {
22 1 uchar sccode,recode;
23 1 P1=0xf0; //P1口附初值
24 1 if((P1&0xf0)!=0xf0)//如果P1口电平不等于0xf0,表示有按键按下
25 1 {
26 2 delay(20); //延时20毫秒后再判断,看是否还有按键按下,次步为软件防抖
27 2 if((P1&0xf0)!=0xf0)//继续判断是否有按键按下
28 2 {
29 3 sccode=0xfe; //进行逐行判断
30 3 while((sccode&0x10)!=0)
31 3 {
32 4 P1=sccode;
33 4 if((P1&0xf0)!=0xf0)
34 4 {
35 5 recode=(P1&0xf0|0x0f);
36 5 switch((~sccode)+(~recode))
37 5 { // 下面是键盘的编码识别
38 6 case 0x11: return(1); break;
39 6 case 0x21: return(2); break;
40 6 case 0x41: return(3); break;
41 6 case 0x81: return(11); break;//返回对应的键值0~15
42 6 case 0x12: return(4); break;
43 6 case 0x22: return(5); break;
44 6 case 0x42: return(6); break;
45 6 case 0x82: return(12); break;
46 6 case 0x14: return(7); break;
47 6 case 0x24: return(8); break;
48 6 case 0x44: return(9); break;
49 6 case 0x84: return(13); break;
50 6 case 0x18: return(10); break;
51 6 case 0x28: return(15); break;
52 6 case 0x48: return(16); break;
53 6 case 0x88: return(14); break;
54 6 default:break;
55 6 }
C51 COMPILER V7.50 实验四 10/20/2008 11:20:40 PAGE 2
56 5 }
57 4 else
58 4 sccode = (sccode<<1)|0x01;
59 4 }
60 3 }
61 2 }
62 1 return(0xff); //如果没有按键按下,则返回0xff
63 1 }
64 void output(uchar number)
65 {
66 1 P0=b[number/10];
67 1 P2=b[number%10];
68 1 }
69 int yunsuan(uchar a,uchar b,uchar c)
70 {
71 1 switch(c)
72 1 {
73 2 case 1:return(a/b);break;
74 2 case 2:return(a*b);break;
75 2 case 3:return(a-b);break;
76 2 case 4:return(a+b);break;
77 2 }
78 1 }
79 void main(void) //主函数
80 {
81 1 unsigned char n1,n2,key,index,a;
82 1 n1=n2=index=0;
83 1 P0=P2=b[0];
84 1 while(1)
85 1 {
86 2 key = keyboardscan();//键盘扫描,看是否有按键按下
87 2 if(key != 0xff)//如果有按键按下,则key不再是0xff了,显示该按键键值
88 2 {
89 3 if(key<10)
90 3 {
91 4 if(!index) n1=key%10;
92 4 else n2=key%10;
93 4 output(key%10);
94 4 }
95 3 else if(key==15)
96 3 {
97 4 n1=n2=index=0;
98 4 output(0);
99 4 }
100 3 else if(key==16)
101 3 {
102 4 if(!index) output(n1);
103 4 else
104 4 {
105 5 a=yunsuan(n1,n2,index);
106 5 a=a%100;
107 5 output(a);
108 5 n1=a;
109 5 n2=index=0;
110 5 }
111 4 }
112 3 else
113 3 {
114 4 if(index==0||n2==0) index=key-10;
115 4 else
116 4 {
117 5 a=yunsuan(n1,n2,index);
C51 COMPILER V7.50 实验四 10/20/2008 11:20:40 PAGE 3
118 5 a=a%100;
119 5 output(a);
120 5 n1=a;
121 5 n2=0;
122 5 index=key-10;
123 5 }
124 4 }
125 3 }
126 2 }
127 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 421 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -