?? 計算.lst
字號:
C51 COMPILER V7.50 計算 07/20/2008 10:50:57 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 計算
OBJECT MODULE PLACED IN 計算.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE 計算.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*鍵盤輸入數據完成乘法計算程序*/
2
3 #include<reg52.h>
4 #include<intrins.h>
5 #define uchar unsigned char
6 #define uint unsigned int
7
8 sbit pclk = P0 ^ 2;
9 sbit sdata =P0 ^ 3;
10 sbit smg4 = P0 ^ 7;
11 sbit smg3 = P0 ^ 6;
12 sbit smg2 = P0 ^ 5;
13 sbit smg1 = P0 ^ 4;
14
15 uchar idata disp[ 4 ];
16 code uchar dispcode[10] = {0xb7,0x90,0x3d,0xb9,0x9a,
17 0xab,0xaf,0xb0,0xbf,0xbb};//數碼管對應的順序碼
18 /* 名稱: delay1ms
19 * 說明:
20 * 功能: 延時
21 * 調用:_nop_
22 * 輸入: 延時長短數據
23 * 返回值: 無*/
24 void delay1ms(uchar j)//延遲1MS
25 {
26 1 uchar i;
27 1 while(j)
28 1 {
29 2 for( i = 248; i > 0; i-- )
30 2 {
31 3 _nop_( );//延時
32 3 _nop_( );
33 3 }
34 2 j--;
35 2 }
36 1 }
37
38 /* 名稱: send_0
39 * 說明:
40 * 功能:把一個字節按段的順序送到數碼管顯示
41 * 調用:
42 * 輸入:要顯示的十六進制碼
43 * 返回值: 無*/
44 void send_0(uchar ch)
45 {
46 1 uchar i;
47 1 for(i=0;i<8;i++)
48 1 {
49 2 pclk = 0;
50 2 ch<<=1; //右移一位
51 2 sdata = CY;
52 2 pclk = 1;
53 2 pclk = 0;
54 2 }
55 1 }
C51 COMPILER V7.50 計算 07/20/2008 10:50:57 PAGE 2
56
57 /*
58 *名稱:senf_f
59 * 說明:
60 * 功能:發送四字節到數碼管
61 * 調用:send_0()
62 * 輸入: 四位要顯示得的數值
63 * 返回值: 無*/
64 void sent_f(uchar s3,uchar s2,uchar s1,uchar s0)
65 {
66 1 P0 = 0x00; //初始化
67 1 send_0(dispcode[s3]);//第一個數碼管顯示
68 1 smg1 = 1;
69 1 delay1ms(1);// 延時
70 1 P0 = 0x00;
71 1 send_0(dispcode[s2]);//第二個數碼管顯示
72 1 smg2 = 1;
73 1 delay1ms(1);
74 1 P0 = 0x00;
75 1 send_0(dispcode[s1]);//第三個數碼管顯示
76 1 smg3 = 1;
77 1 delay1ms(1);
78 1 P0 = 0x00;
79 1 send_0(dispcode[s0]);//第四個數碼管顯示
80 1 smg4 = 1;
81 1 delay1ms(1);
82 1 P0 = 0x00;
83 1 }
84
85 /*名稱: sure_disk
86 * 說明:
87 * 功能: 按鍵識別
88 * 調用:sent_f()
89 * 輸入:
90 * 返回值: 按鍵對應的數值*/
91 uchar sure_disk()
92 {
93 1 uchar j;
94 1 uchar key,keyvalue;
95 1 uchar sccode,recode;
96 1 P2=0x0f; /*發0行掃描碼*/
97 1
98 1 if((P2 & 0x0f)!= 0x0f) /*若有鍵按下*/
99 1 {
100 2 delay1ms(1); //去抖
101 2 if((P2&0x0f)!= 0x0f) /*逐行掃描初值*/
102 2 {
103 3 sccode=0xfe;
104 3 for(j=4;j>0;j--)
105 3 {
106 4 while((sccode&0x10)!=0)
107 4 {
108 5 P2=sccode; /*輸出行掃描碼*/
109 5 if((P2&0xf0)!=0xf0) /*本行有鍵按下*/
110 5 {
111 6 recode=(P2&0xf0)|0x0f;
112 6
113 6 key=((~sccode)+(~recode)); /*返回特征字節碼*/
114 6 }
115 5 else
116 5 sccode=(sccode<<1)|0x01; /*行掃描碼左移一位*/
117 5 }
C51 COMPILER V7.50 計算 07/20/2008 10:50:57 PAGE 3
118 4 }
119 3 }
120 2 }
121 1 switch(key) //判斷鍵特征值
122 1 {
123 2 case 0x88: keyvalue=0;
124 2 break;
125 2 case 0x84: keyvalue=1;
126 2 break;
127 2 case 0x82: keyvalue=2;
128 2 break;
129 2 case 0x81: keyvalue=3;
130 2 break;
131 2 case 0x48: keyvalue=4;
132 2 break;
133 2 case 0x44: keyvalue=5;
134 2 break;
135 2 case 0x42: keyvalue=6;
136 2 break;
137 2 case 0x41: keyvalue=7;
138 2 break;
139 2 case 0x28: keyvalue=8;
140 2 break;
141 2 case 0x24: keyvalue=9;
142 2 break;
143 2 case 0x22: keyvalue=10;
144 2 break;
145 2 case 0x21: keyvalue=11;
146 2 break;
147 2 case 0x18: keyvalue=12;
148 2 break;
149 2 case 0x14: keyvalue=13;
150 2 break;
151 2 case 0x12: keyvalue=14;
152 2 break;
153 2 case 0x11: keyvalue=15;
154 2 break;
155 2 default: keyvalue=16; //無鍵按下,返回0值
156 2 break;
157 2 }
158 1 return(keyvalue);
159 1 }
160
161 /*主函數*/
162 void main ( void )
163 {
164 1 uchar j,a=0;
165 1 char i;
166 1 uint add,c1,c2;
167 1 for(j=0;j<4;j++)//賦初值
168 1 disp[j]=0;
169 1 sent_f(disp[0],disp[1],disp[2],disp[3]);
170 1 j=2;
171 1 while(1)
172 1 {
173 2
174 2 P2=0xf0;
175 2 if((P2&0xf0)!=0xf0)//判斷是否有按鍵
176 2 {
177 3 delay1ms(1);//延時
178 3 if((P2&0xf0)!=0xf0)//判斷是否有按鍵
179 3 {
C51 COMPILER V7.50 計算 07/20/2008 10:50:57 PAGE 4
180 4 if(sure_disk()<10)//判斷返回數值
181 4 { if(a==0)
182 5 disp[3]=sure_disk();
183 5 if(a==1)
184 5 {
185 6 a=0;
186 6 disp[2]=disp[3];
187 6 disp[3]=sure_disk();
188 6 }a++;
189 5 }
190 4 if(sure_disk()==10)
191 4 {
192 5 c1=disp[2]*10+disp[3];//存儲數據
193 5 for(i=3;i>=0;i--)
194 5 disp[i]=0;
195 5 }
196 4 if(sure_disk()==11)
197 4 {
198 5 c2=disp[2]*10+disp[3];
199 5 for(i=3;i>=0;i--)
200 5 disp[i]=0;
201 5 add=c1*c2;
202 5 disp[0]=add/1000;
203 5 disp[1]=(add/100)%10;
204 5 disp[2]=(add/10)%10;
205 5 disp[3]=add%10;
206 5
207 5 }
208 4
209 4 }
210 3 }
211 2 sent_f(disp[0],disp[1],disp[2],disp[3]);
212 2 }
213 1 }
214
215
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 596 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 11
IDATA SIZE = 4 ----
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 + -