📄 main.lst
字号:
C51 COMPILER V7.07 MAIN 10/21/2007 14:59:45 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //*********************************************
2 // 作者:龙海
3 // 单位:四海农科所
4 // 功能:实现计算器功能
5 //
6 //
7 //*********************************************
8 #include <reg52.h>
9 unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
10 unsigned char code tab[4][4] = {{1,2,3,13},{4,5,6,14},{7,8,9,15},{10,11,12,16}};
11 unsigned char code disbcode[]={0x04,0x08,0x10,0x20};
12 unsigned char buf[]={0,10,10,10};
13 unsigned int show=0;
14 unsigned int dat1=0;
15 unsigned int dat2=0;
16 unsigned int sum=0;
17 unsigned char wx=0;
18 unsigned char fuhao=0;
19 sbit clk = P0^0;
20 sbit din = P0^1;
21
22
23 //***********************************
24 //延时10毫秒;
25 //***********************************
26 void delay()
27 {
28 1 unsigned int i = 7000;
29 1 while(i!=0)
30 1 i--;
31 1 }
32
33 //**********************************
34 // 键盘扫描程序
35 //
36 //**********************************
37
38 char kbscan(void)
39 {
40 1 unsigned char hang,lie,key;
41 1 if(P2!=0xf0)
42 1 {
43 2 delay();
44 2 if(P2!=0xf0)
45 2 {
46 3 switch(P2&0xf0)
47 3 {
48 4 case 0x70:hang = 0;break;
49 4 case 0xb0:hang = 1;break;
50 4 case 0xd0:hang = 2;break;
51 4 case 0xe0:hang = 3;break;
52 4 }
53 3 P2 = 0x0f;
54 3 switch(P2&0x0f)
55 3 {
C51 COMPILER V7.07 MAIN 10/21/2007 14:59:45 PAGE 2
56 4 case 0x07:lie = 0;break;
57 4 case 0x0b:lie = 1;break;
58 4 case 0x0d:lie = 2;break;
59 4 case 0x0e:lie = 3;break;
60 4 }
61 3 P2 = 0xf0;
62 3 while(P2 != 0xf0);
63 3 key = tab[hang][lie];
64 3 }
65 2 }
66 1 else
67 1 key = 0;
68 1 return(key);
69 1 }
70
71 //***********************************
72 // 向164发送数据
73 //
74 //***********************************
75 void send(unsigned char da)
76 {
77 1 unsigned char temp,i;
78 1 clk=0;
79 1 for(i=0;i<8;i++)
80 1 {
81 2 temp = da;
82 2 if((temp&(0x80>>i))!=0)
83 2 din=1;
84 2 else din=0;
85 2 clk=1;
86 2 clk=0;
87 2 }
88 1 }
89 //**************************************
90 // 2毫秒定时中断
91 //**************************************
92
93 void time0(void) interrupt 1
94 {
95 1 TH0 = 0xec;
96 1 TL0 = 0x78;
97 1 P0 = 0x00;
98 1 send(dispcode[buf[wx]]);
99 1 P0 = disbcode[wx];
100 1 wx++;
101 1 if(wx==4)
102 1 wx=0;
103 1 buf[0]=show%10;
104 1 buf[1]=show%100/10;
105 1 buf[2]=show%1000/100;
106 1 buf[3]=show/1000;
107 1 if(show<10)
108 1 buf[1]=10;
109 1 if(show<100)
110 1 buf[2]=10;
111 1 if(show<1000)
112 1 buf[3]=10;
113 1
114 1
115 1 }
116
117 //*********************************
C51 COMPILER V7.07 MAIN 10/21/2007 14:59:45 PAGE 3
118 //
119 //
120 //*********************************
121 main()
122 {
123 1 unsigned char cnt=0;
124 1 P0 = 0x00;
125 1 P2 = 0xf0;
126 1 TCON = 0x00;
127 1 TMOD = 0x01;
128 1 TH0 = 0xec;
129 1 TL0 = 0x78;
130 1 IE = 0x82;
131 1 TR0 = 1;
132 1
133 1 while(1)
134 1 {
135 2 cnt = kbscan();
136 2 if(12<cnt&&cnt<17)
137 2 {
138 3 if(fuhao == 0)
139 3 {
140 4 fuhao = cnt;
141 4 }
142 3 else
143 3 {
144 4 switch(fuhao)
145 4 {
146 5 case 13: sum=dat1+dat2;break;
147 5 case 14: sum=dat1-dat2;break;
148 5 case 15: sum=dat1*dat2;break;
149 5 case 16: sum=dat1/dat2;break;
150 5 }
151 4 show=sum;
152 4 dat1=sum;
153 4 dat2=0;
154 4 sum =0;
155 4 fuhao=cnt;
156 4 }
157 3 cnt=0;
158 3 }
159 2 else if(0<cnt&&cnt<11)
160 2 {
161 3 if(fuhao==0)
162 3 {
163 4 dat1=dat1*10+(cnt-1);
164 4 show=dat1;
165 4 }
166 3 else
167 3 {
168 4 dat2=dat2*10+(cnt-1);
169 4 show=dat2;
170 4 }
171 3 cnt=0;
172 3 }
173 2 else if(cnt==11)
174 2 {
175 3 dat1=0;
176 3 dat2=0;
177 3 sum=0;
178 3 fuhao=0;
179 3 cnt=0;
C51 COMPILER V7.07 MAIN 10/21/2007 14:59:45 PAGE 4
180 3 show=0;
181 3 }
182 2 else if(cnt==12)
183 2 {
184 3 switch(fuhao)
185 3 {
186 4 case 13: sum=dat1+dat2;break;
187 4 case 14: sum=dat1-dat2;break;
188 4 case 15: sum=dat1*dat2;break;
189 4 case 16: sum=dat1/dat2;break;
190 4 }
191 3 cnt=0;
192 3 show=sum;
193 3 }
194 2 else cnt=0;
195 2 }
196 1
197 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 761 ----
CONSTANT SIZE = 31 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 3
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 + -