?? text1.lst
字號(hào):
C51 COMPILER V8.08 TEXT1 03/11/2009 19:20:36 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: E:\單片機(jī)軟件\keil\kell\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 sbit p30=P3^0;
3 sbit p31=P3^1;
4 sbit p32=P3^2;
5 sbit p33=P3^3;
6 sbit p34=P3^4;
7 sbit p35=P3^5;
8
9 sbit p10=P1^0;
10 sbit p11=P1^1;
11 sbit p12=P1^2;
12 sbit p13=P1^3;
13 int LED[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
14 int temp1=0,temp2=0,rst;
15 int dat[6]={0},flag=0,flg=0;//dat[0]最低位個(gè)位 flag按鍵標(biāo)志位 flg運(yùn)算符標(biāo)志
16
17 void delay(int m)//延時(shí)程序
18 {
19 1 while(--m);
20 1 }
21
22 void disp(int key_dat)//按鍵數(shù)據(jù)顯示函數(shù)
23 {
24 1 int i;
25 1 if(flag)//標(biāo)志判斷 如果 flag=1 說明有按下
26 1 for(i=5;i>=1;i--)//數(shù)組中數(shù)據(jù)向后移一位
27 1 {
28 2 dat[i]=dat[i-1];
29 2 }
30 1 dat[0]=key_dat;//第一位賦值按鍵值
31 1 P3=0X01;//p3.0口有效
32 1 for(i=0;i<6;i++)
33 1 {
34 2 P2=LED[dat[i]];//將數(shù)據(jù)傳送到p2口
35 2 delay(50);
36 2 P3=P3<<1;//p3口右移一位
37 2 }
38 1 flag=0;//標(biāo)志判斷 如果 flag=0 說明沒有按下
39 1 }
40
41 void clr(void)//清零函數(shù)
42 {
43 1 int i;
44 1 for(i=0;i<6;i++)
45 1 dat[i]=0;
46 1 disp(dat[0]);
47 1 }
48
49 void temp(int f)//運(yùn)算符號(hào)(處理第一個(gè)數(shù)及運(yùn)算符)
50 {
51 1 if(flag)
52 1 temp1=dat[5]*100000+dat[4]*10000+dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];
53 1 flg=f;//1 add ;2 sub ;3mul ;4 div
54 1 flag=0;
55 1 clr();//清零
C51 COMPILER V8.08 TEXT1 03/11/2009 19:20:36 PAGE 2
56 1 }
57
58 void display(int n)//LED顯示
59 {
60 1 char i;
61 1 dat[5]=n/100000;//十萬位
62 1 dat[4]=n/10000%10;//萬位
63 1 dat[3]=n/1000%10;//千位
64 1 dat[2]=n/100%10;//百位
65 1 dat[1]=n/10%10;//十位
66 1 dat[0]=n%10;//個(gè)位
67 1 delay(20);
68 1
69 1 P3=0X01;
70 1 for(i=0;i<6;i++)
71 1 {
72 2 P2=LED[dat[i]];
73 2 delay(20);
74 2 P3=P3<<1;
75 2 }
76 1
77 1 }
78
79 void result(void)//運(yùn)算結(jié)果函數(shù)
80 {
81 1 if(flag)
82 1 temp2=dat[5]*100000+dat[4]*10000+dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];
83 1 switch(flg)
84 1 {
85 2 case 0: temp2=temp1;break;
86 2 case 1: rst=temp1+temp2;break;
87 2 case 2: rst=temp1-temp2;break;
88 2 case 3: rst=temp1*temp2;break;
89 2 case 4: rst=temp1/temp2;break;
90 2
91 2 }
92 1 flg=0;
93 1 flag=0;//標(biāo)志判斷 if flag=0 說明沒有鍵按下
94 1 display(rst);
95 1 }
96
97
98 void keyscan(void)//鍵盤掃描函數(shù)
99 {
100 1 P1=0xef;//第一列
101 1 if(!p13){flag=1;while(!p13)clr();}//on鍵清零
102 1 if(!p12){flag=1;while(!p12)disp(1);}//1
103 1 if(!p11){flag=1;while(!p11)disp(4);}//4
104 1 if(!p10){flag=1;while(!p10)disp(7);}//7
105 1
106 1
107 1 P1=0xdf;//第二列
108 1 if(!p13){flag=1;while(!p13)disp(0);}//0
109 1 if(!p12){flag=1;while(!p12)disp(2);}//2
110 1 if(!p11){flag=1;while(!p11)disp(5);}//5
111 1 if(!p10){flag=1;while(!p10)disp(8);}//8
112 1
113 1
114 1 P1=0xbf;//第三列
115 1 if(!p13){flag=1;while(!p13)result();}//等號(hào)
116 1 if(!p12){flag=1;while(!p12)disp(3);}//3
117 1 if(!p11){flag=1;while(!p11)disp(6);}//6
C51 COMPILER V8.08 TEXT1 03/11/2009 19:20:36 PAGE 3
118 1 if(!p10){flag=1;while(!p10)disp(9);}//9
119 1
120 1 P1=0x7f;//第四列
121 1 if(!p13){flag=1;while(!p13)temp(1);}//+
122 1 if(!p12){flag=1;while(!p12)temp(2);}//-
123 1 if(!p11){flag=1;while(!p11)temp(3);}//*
124 1 if(!p10){flag=1;while(!p10)temp(4);}///
125 1 disp(dat[0]);//如果沒有按鍵 就還顯示原來的數(shù)值
126 1 }
127
128 main()
129 {
130 1
131 1 while(1)
132 1 {
133 2 keyscan();//鍵盤掃描調(diào)用
134 2 }
135 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 985 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 42 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -