📄 jsq.lst
字号:
C51 COMPILER V8.08 JSQ 10/03/2008 12:03:01 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE JSQ
OBJECT MODULE PLACED IN jsq.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE jsq.c DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include <intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 #define ComDat P2 //命令或数据线
7 sbit RS=P3^0; //RS为寄存器选择,1=数据寄存器、0=指令寄存器。
8 sbit RW=P3^1; //RW为读写信号线,1=读操作,0=写操作。
9 //当RS=RW=0可以写入指令或者显示地址,
10 //当RS=0,RW=1可以读忙信号,
11 //当RS=1,RW=0可以写入数据。
12 sbit EN=P3^2; //当en端由高电平跳变成低电平时,液晶模块执行命令。
13 sbit led=P0^3; //照明
14
15 sbit busy=P2^7; //忙指示
16
17 uchar code table[]=
18 {
19 '0','1','2','3',
20 '4','5','6','7',
21 '8','9',0x20,'=',
22 '+','-','*','/'
23 };
24
25
26 uchar temp,num,m,n,x,y,i; //定义变量
27 uchar a,b,c; //定义运算变量
28 uchar saomiao(); //定义扫描函数
29 void delay1(uchar); //定义延时函数
30 void delay(); //定义液晶忙程序
31 void WriComm(uchar); //定义写控制函数
32 void WriData(uchar); //定义写数据函数
33 void chushihua();
34
35 void main()
36 {
37 1 chushihua();
38 1 while(1)
39 1 { saomiao(); //扫描键盘
40 2 if(x==1)
41 2 { x=0;
42 3 m++; //控制第一行显示
43 3 n++; //控制第二行显示
44 3 delay1(255);
45 3 WriData(num);
46 3 if(num==10)
47 3 {
48 4 WriComm(0x01);//清零
49 4 a=b=c=0;
50 4 }
51 3 if(num<10)
52 3 { i++;
53 4 if(i==1)
54 4 a=num;
55 4 else
C51 COMPILER V8.08 JSQ 10/03/2008 12:03:01 PAGE 2
56 4 {
57 5 a=a*10+num;
58 5 i=0;
59 5 }
60 4 }
61 3 if(num==12)
62 3 b=a;
63 3 else if(num==13)
64 3 b=a;
65 3 else if(num==14)
66 3 b=a;
67 3 else if(num==15)
68 3 b=a;
69 3
70 3 if(num==11)
71 3 { if(y==1)
72 4 { y=0;
73 5 c=b+a;
74 5 }
75 4 else if(y==2)
76 4 { y=0;
77 5 c=b-a;
78 5 }
79 4 else if(y==3)
80 4 { y=0;
81 5 c=b*a;
82 5 }
83 4 else if(y==4)
84 4 { y=0;
85 5 c=b/a;
86 5 }
87 4 delay1(255);
88 4 WriData(c/10);
89 4 WriData(c%10);
90 4 a=b=c=0;
91 4 }
92 3 if(m==16)
93 3 { m=0;
94 4 WriComm(0xc0);
95 4 }
96 3 if(n==32)
97 3 { n=0;
98 4 WriComm(0x80);
99 4 }
100 3 //-----------------------------------------------
101 3 }
102 2 }
103 1 }
104 //--------------------初始化-----------------------------
105 void chushihua()
106 {
107 1 led=0; //开背光
108 1 delay1(5);
109 1 WriComm(0x01); //清屏并光标复位
110 1 WriComm(0x38); //设置显示模式:8位2行5x7点阵
111 1 WriComm(0x0c); //显示器开、光标关、光标禁止闪烁
112 1 WriComm(0x14); //文字不动,光标自动右移
113 1 WriComm(0x80);
114 1 }
115
116 //-------------延时子程序---------------------------------------
117 void delay1(uchar z)
C51 COMPILER V8.08 JSQ 10/03/2008 12:03:01 PAGE 3
118 {
119 1 uchar a,b;
120 1 for(a=z;a>0;a--)
121 1 for(b=255;b>0;b--);
122 1 }
123
124 //---判断液晶显示器是否忙------------
125 void delay()
126 {
127 1 do
128 1 {
129 2 ComDat=0xff; //判断液晶显示器是否忙的子程序
130 2 RS=0;
131 2 RW=1;
132 2 EN=0;
133 2 _nop_();
134 2 EN=1;
135 2 }
136 1 while(busy); //busy为高电平表示忙,循环等待
137 1 }
138 //---写命令--------------------------
139 void WriComm(uchar Com)
140 {
141 1 ComDat=Com;
142 1 RS=0; //写入控制命令的子程序
143 1 RW=0;
144 1 EN=0;
145 1 delay(); //等待
146 1 EN=1;
147 1 }
148 //---写数据------------------------------
149 void WriData(uchar k)
150 {
151 1 ComDat=table[k];
152 1 RS=1;
153 1 RW=0; //准备写入数据
154 1 EN=0; //执行显示命令
155 1 delay(); //判断液晶模块是否忙
156 1 EN=1;
157 1 }
158
159 //----------------键盘扫描程序---------------------------
160 uchar saomiao()
161 {
162 1 P3=0xfe;
163 1 temp=P3;
164 1 temp=temp&0xf0;
165 1 if(temp!=0xf0)
166 1 { x=1;
167 2 delay1(50);
168 2 if(temp!=0xf0)
169 2 {
170 3 switch(temp)
171 3 {
172 4 case 0xe0: num=0;
173 4 break;
174 4 case 0xd0: num=1;
175 4 break;
176 4 case 0xb0: num=2;
177 4 break;
178 4 case 0x70: num=3;
179 4 break;
C51 COMPILER V8.08 JSQ 10/03/2008 12:03:01 PAGE 4
180 4
181 4 }
182 3 }
183 2 }
184 1
185 1 P3=0xfd;
186 1 temp=P3;
187 1 temp=temp&0xf0;
188 1 if(temp!=0xf0)
189 1 { x=1;
190 2 delay1(50);
191 2 if(temp!=0xf0)
192 2 {
193 3 switch(temp)
194 3 {
195 4 case 0xe0: num=4;
196 4 break;
197 4 case 0xd0: num=5;
198 4 break;
199 4 case 0xb0: num=6;
200 4 break;
201 4 case 0x70: num=7;
202 4 break;
203 4
204 4 }
205 3 }
206 2 }
207 1
208 1 P3=0xfb;
209 1 temp=P3;
210 1 temp=temp&0xf0;
211 1 if(temp!=0xf0)
212 1 { x=1;
213 2 delay1(50);
214 2 if(temp!=0xf0)
215 2 {
216 3 switch(temp)
217 3 {
218 4 case 0xe0: num=8;
219 4 break;
220 4 case 0xd0: num=9;
221 4 break;
222 4 case 0xb0: num=10; //清零返回值
223 4 break;
224 4 case 0x70: num=11;//等于返回
225 4 break;
226 4
227 4 }
228 3 }
229 2 }
230 1
231 1 P3=0xf7;
232 1 temp=P3;
233 1 temp=temp&0xf0;
234 1 if(temp!=0xf0)
235 1 { x=1;
236 2 delay1(50);
237 2 if(temp!=0xf0)
238 2 {
239 3 switch(temp)
240 3 {
241 4 case 0xe0: num=12;y=1;
C51 COMPILER V8.08 JSQ 10/03/2008 12:03:01 PAGE 5
242 4 break;
243 4 case 0xd0: num=13;y=2;
244 4 break;
245 4 case 0xb0: num=14;y=3;
246 4 break;
247 4 case 0x70: num=15;y=4;
248 4 break;
249 4
250 4 }
251 3 }
252 2 }
253 1 return num,x,y;
254 1 }
255 //--------------------------------------------------------
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 599 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
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 + -