?? 計算器.lst
字號:
C51 COMPILER V7.06 計算器 02/21/2010 21:46:02 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 計算器
OBJECT MODULE PLACED IN 計算器.OBJ
COMPILER INVOKED BY: E:\科協\C51\BIN\C51.EXE 計算器.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg52.h>
2 #define unchar unsigned char
3 #define unint unsigned int
4 sbit rs=P2^0;
5 sbit rw=P2^1;
6 sbit en=P2^2;
7 sbit busy=P0^7;
8 char i,flag,fuhao;
9 unchar num,temp;
10 long a,b,c;
11 unchar code table[]={7,8,9,0,//內部運算用
12 4,5,6,0,
13 1,2,3,0,
14 0,0,0,0};
15 unchar code table1[]={7,8,9,0x2f-0x30,//顯示用7,8,9,/
16 4,5,6,0x2a-0x30,//4,5,6,*
17 1,2,3,0x2d-0x30,//1,2,3,-
18 0x01-0x30,0,0x3d-0x30,0x2b-0x30};//ON/C,0,=,+
19 void delay(unchar z)
20 {
21 1 unchar x,y;
22 1 for(x=z;x>0;x--)
23 1 for(y=110;y>0;y--);
24 1 }
25 void checkbusy()
26 {
27 1 while(busy==1)//P0^7最高位為1為忙,0為閑
28 1 {
29 2 P0=0xff;
30 2 rs=0;
31 2 rw=1;
32 2 en=0;//禁止讀寫
33 2 delay(20);
34 2 en=1;
35 2 }
36 1 }
37
38 void write_com(unchar com)
39 {
40 1 rs=0;
41 1 rw=0;
42 1 en=0;
43 1 checkbusy();
44 1 P0=com;
45 1 delay(5);
46 1 en=1;
47 1 delay(5);
48 1 en=0;
49 1 }
50 void write_date(unchar date)
51 {
52 1 rs=1;
53 1 rw=0;
54 1 en=0;
55 1 checkbusy();
C51 COMPILER V7.06 計算器 02/21/2010 21:46:02 PAGE 2
56 1 P0=date;
57 1 delay(5);
58 1 en=1;
59 1 delay(5);
60 1 en=0;
61 1 }
62 void init()
63 {
64 1 write_com(0x38);
65 1 delay(50);
66 1 write_com(0x0c);//開顯示關光標和閃爍
67 1 delay(50);
68 1 write_com(0x06);//地址向后移
69 1 delay(50);
70 1 write_com(0x80);//初始地址
71 1 write_com(0x01);//清屏
72 1 delay(50);
73 1 i=0;flag=0;//賦初值
74 1 fuhao=0;a=0;b=0;c=0;
75 1
76 1
77 1 }
78 void lcd_clean()//清屏
79 {
80 1 write_com(0x01);
81 1 delay(20);
82 1 }
83 void keyscan()
84 {
85 1
86 1 P3=0xfe;
87 1 temp=P3;
88 1 temp=temp&0xf0;
89 1 if(temp!=0xf0)
90 1 { delay(10);
91 2 temp=P3;
92 2 temp=temp&0xf0;
93 2 if(temp!=0xf0)
94 2 {
95 3 temp=P3;
96 3 switch(temp)
97 3 {
98 4 case 0xee:num=0; break;
99 4 case 0xde:num=1; break;
100 4 case 0xbe:num=2; break;
101 4 case 0x7e:num=3; break;
102 4 }
103 3 }
104 2 while(P3!=0xfe);
105 2 if(num==0||num==1||num==2)
106 2 {
107 3 if(flag==0)
108 3 a=a*10+table[num];//a是在沒按符號鍵之前輸入的值
109 3 if(flag==1)
110 3 b=b*10+table[num];//b是按符號鍵后輸入的值
111 3 }
112 2 if(num==3)//"/"鍵
113 2 {
114 3 flag=1;
115 3 fuhao=4;//"/"
116 3 }
117 2 i=table1[num];//顯示的值
C51 COMPILER V7.06 計算器 02/21/2010 21:46:02 PAGE 3
118 2 write_date(0x30+i);//十六進制表示的ASC碼
119 2 }
120 1 P3=0xfd;
121 1 temp=P3;
122 1 temp=temp&0xf0;
123 1 if(temp!=0xf0)
124 1 { delay(5);
125 2 temp=P3;
126 2 temp=temp&0xf0;
127 2 if(temp!=0xf0)
128 2 {
129 3 temp=P3;
130 3 switch(temp)
131 3 {
132 4 case 0xed:num=4; break;
133 4 case 0xdd:num=5; break;
134 4 case 0xbd:num=6; break;
135 4 case 0x7d:num=7; break;
136 4 }
137 3 }
138 2 while(P3!=0xfd);
139 2 if(num==4||num==5||num==6)
140 2 {
141 3 if(flag==0)
142 3 a=a*10+table[num];
143 3 else
144 3 b=b*10+table[num];
145 3 }
146 2 if(num==7)//"*"
147 2 {
148 3 flag=1;
149 3 fuhao=3;
150 3 }
151 2 i=table1[num];
152 2 write_date(0x30+i);
153 2 }
154 1 P3=0xfb;
155 1 temp=P3;
156 1 temp=temp&0xf0;
157 1 if(temp!=0xf0)
158 1 { delay(5);
159 2 temp=P3;
160 2 temp=temp&0xf0;
161 2 if(temp!=0xf0)
162 2 {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -