|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于单片机设计的简易计算器 能实现基本的加减乘除和清零# `( F' T5 p8 I) v
) c+ }% p7 N3 V/ C
8 K P3 `/ V& A& R& O3 W& Z; ^# m" H- f* h% f7 S% ] G
这是用STC59C52单片机做的计算器,使用数码管显示,能实现基本的加减乘除和清零
0 z$ B& T1 V% M6 F5 p$ e
- \4 m, R9 X8 L' l1 v$ }" g$ L3 }
. v: }6 C9 U( l7 R% ~4 R
" c# c7 N* | }. U6 \# ~
5 l5 x- C8 M- `% A! d9 h源程序:0 |+ b; c1 D$ k5 `: l
/*****利用单片机设计的简易计算器********/
+ A/ b2 ? `) ~6 W/***** 单片机型号:STC59C52 ********/( @# ]6 |( T' w0 i4 \3 x4 `0 t1 Y
/*
( i, W* X, X! j8 M8 N: h; { *采用4*4键盘,4行线,4列线2 Y; D g2 T, \- s$ d9 s7 t- u2 x
*键盘行线列线接P1 IO口
( F O, N( y2 X' d2 @! ] *数码管接P0口* } C* x5 B0 @
*/
* n5 W3 w: r! _* \! ?# T, R( J#include <reg52.h>
" p$ d. W5 I% B/ v; u# u! o#define uchar unsigned char+ }. R+ x3 {6 `# t" ?
#define uint unsigned int
3 v& r* l$ O. b+ ~sbit dula=P2^6;//573段选使能
+ u' u `9 v& D0 q6 Jsbit wela=P2^7;//573位选使能. h- ], c0 n5 f. O# s
8 [/ V N8 i* X* v' L4 M* q) p& d& Y
sbit beep=P3^2;//蜂鸣器
l( k5 t1 v0 K: z* \) y6 E9 I6 _; L- L5 k! V7 {7 S2 j$ ?
9 E8 l8 Q% J/ I& J
( a% Z/ v% e+ e# z$ [
. c3 D( a" O7 H e4 K+ F( W' u _uchar temp,key;//按键变量
% B1 \/ X$ I b5 xuchar fun;//加,减,乘,除,标志位
) n7 [' }" ?" [3 f: `$ i% u. f& Hlong int num1,num2,res;//num1与num2是2个要运算的变量,res是结果9 o) ?* n' m5 w4 a n
uchar aa,dis;//aa 2个运算数标志位 dis 2个运算数与结果标志
* }( C' i; o. U x* e# S, ~5 s" C! Luchar code table[]={ 6 `5 i$ X1 i5 U- M" C0 X% | L2 k
0x00,0x3f,0x06,0x5b,
& [2 r9 \) J0 b 0x4f,0x66,0x6d,0x7d,
- t9 }/ h" W. x, e0 K; T 0x07,0x7f,0x6f,0x77,
$ {' N3 G* o) ?% t. d7 l# a5 }- ~ 0x7c,0x39,0x5e,0x79,0x71};//数码管段码
/ E: X7 ~: t9 k, o2 T( b& _, `uchar code weixuan[]={" t" d# F5 {( Q0 Y6 P9 X5 w2 O
0xdf,0xef,0xf7,5 S/ T" M+ e3 G8 \& w
0xfb,0xfd,0xfe};//数码管位码
7 V% C+ s8 m% Y6 }- y' V! Q$ b+ b2 `1 w5 v- b# U
" }) Y$ d: q0 dvoid delay(unsigned char i)//延时- `4 v1 i* X3 u" Q7 I
{
7 c! x# U, S/ K6 J D0 ?uchar j,k;
# t( p1 g$ U5 U4 o for(j=i;j>0;j--)
% \' Y; }6 M/ @% U0 V for(k=125;k>0;k--);
; A6 C+ D3 \' d; K7 |# u}
" w( e: m6 `) ?* `9 p# i2 r% L- l2 `9 {3 A3 s2 Y" _
0 f6 B" w. b9 } q M. S1 n
void bee()//蜂鸣器( Y; E' Y9 j* H3 n
{
9 P5 g& m) t2 F3 Z( l0 A2 a beep=0;
\: Q4 ]3 M/ \ delay(255);
7 |/ ?* ]8 b; ~2 { delay(255);* x8 E6 ?1 \8 J8 @/ C
beep=1;
0 m: C' W, r7 F}
; ~& ?% y9 k, j& {) v
! g0 y/ a1 U8 W' F
8 V3 P/ {. B9 L7 y2 F) v//按键检测
0 e5 K/ E4 w/ f% h6 x. \+ {//如果没有按键按下,则key取Init()函数中所赋值为16
3 H9 ]- Z; W7 [% H/ p6 |% s, o5 _void key_scan()+ y( \2 y) v3 ~2 W2 @& O/ p- z, y
{
+ g e& h/ W; q P1=0xfe;//先置第一行线为低,其余为高
I9 Y; P7 D; b //高四位为列线,低四位为行线: D, B4 ? l" {, k r0 d
temp=P1;
* j0 [9 X4 h8 q C temp=temp&0xf0;
# m% u% K4 M" U+ e/ F //进行与运算,把结果赋给temp2 h G* ~: j9 X; q
//此时temp = 0xf0" r. D- J6 R N% c9 \! y6 X3 P
if(temp!=0xf0) /*判断temp的高四位是否有0,如果有零的话,则此时temp != 0*/
0 r) y3 b" X0 d$ m; Y {0 ~, S+ N6 I7 X2 N+ x9 q$ I8 G7 g
delay(10);
, k5 \$ y5 Z1 t+ o- I temp = P1;# C+ O9 R* s; t( K- m. J
temp=temp&0xf0;
S* X3 `- a& f% Z+ [+ K( m$ L if(temp!=0xf0)! c% _/ R! L" S7 R9 @3 E) `, I
{- z j# ]- _# Z i5 z1 D" e
temp=P1;' T0 V. k5 b* @# n e
switch(temp)$ I8 G3 f- L9 a9 x" R
{- Q. k }1 k5 J; o# U$ k6 T9 `( \' ]
case 0xee: //此时按键坐标为1行1列4 y; h+ _' L0 l( _1 R1 R
key=1;
! e4 T) N$ s( Y$ r break;6 {) }$ [+ c& |( z
case 0xde:( q2 R5 I: L9 m+ ^3 H+ U0 S$ x
key=2;2 b# C' V$ [6 ?5 {3 l
break;' g' t0 _0 s) x# q# T; A0 [6 G
case 0xbe:
u$ f. o, i0 X$ w) N key=3;6 E7 U. J' ~) }# e3 i
break;; H: S+ K4 g p* I0 Q
case 0x7e: \ _9 M& _/ j! L2 f8 G
key=12;* b+ I* v% s0 K* x1 i* @; P& I4 J8 g
break;. X6 ?: w- j7 n* e* o& k
}
$ f! R; c2 f7 j! k1 N while(temp!=0xf0) //等待按键释放
I* k! M* t. f7 v {
{" U i% h$ F2 V* R' @% s temp=P1;
' S- {. ~' _( H1 C4 P2 M) h temp=temp&0xf0;( c7 O, \6 U# X; u6 d* Z
}4 k/ d( s* B, B8 c8 ]+ k) ]" i
}" I2 k/ g, ~% Z! H
}) \9 ~. O# w; l. \8 e6 |! j# j2 ?
P1=0xfd;, {: J6 a' I& b x$ F
temp=P1;2 E. v) ^2 U6 v+ a
temp=temp&0xf0;8 o; z2 `8 P c! J4 h
if(temp!=0xf0)7 f% r+ C$ |; J
{
, V% s6 L" g" G( z- a8 G delay(10);
5 {, d$ p9 [9 x$ V) }( i temp = P1;
# i5 B1 [% R. G9 K- _/ V: n+ L+ U temp=temp&0xf0;
' U: j( p$ g! C$ H; i if(temp!=0xf0)$ n! y2 w1 |* j4 c f' \/ E0 c
{
; G1 c( V$ P C0 e8 } temp=P1;) T4 b: Y0 S5 U9 L) E
switch(temp)
+ @" r) w* P9 q9 O S) G( w {- H; M( u4 L. m/ M! t( h
case 0xed:* A% U" x6 U* i8 o8 p. [7 l
key=4;
6 r: U) L2 o6 o0 U break;- n$ T* h1 `3 a# e7 @- [
case 0xdd:: d6 i S% \8 E0 Y7 e+ o1 @
key=5;6 H# S1 A1 T- L
break;
* l' R1 W8 V1 b9 u' w case 0xbd:. d# C: i$ f# Z' I% L$ P
key=6;
6 K( X$ {$ i8 e+ E break;9 G& P8 u1 d+ M# | b4 [5 V
case 0x7d:
- k( @3 t* c1 g3 A9 z' A3 l1 s key=13;- _& b! F5 T; d; R: ?
break;& w( F4 E: \) Z" f$ l
}
. s0 m3 d L) L6 b) q) S while(temp!=0xf0)
* J, J4 B Y' R I8 i" K { f. K) q- T, V" z3 Q5 f% _; ?
temp=P1;
5 u0 d7 s( L% Z temp=temp&0xf0;
. s1 ^2 X8 E. W" i4 w3 R }
: p7 k5 u) {! z C6 x- d% v* D7 E }
$ ^ C- E# M$ w5 s: j' U" B1 f9 F9 z% U }
F" ]$ t/ Q* u5 U* a5 G$ }5 } P1=0xfb;& d( d6 R5 m( [: m+ H# n
temp=P1;+ e5 ]" I+ y$ w! h8 p# U' @5 d
temp=temp&0xf0;! o2 F4 `6 _$ N3 I1 A
if(temp!=0xf0). _: W( A! O8 K- }+ p9 C
{
# b6 Y, }! t J delay(10);
2 q9 s+ I/ F. _& s$ Z2 Q( U temp = P1;/ Q1 v; ^& j# ^
temp=temp&0xf0;
3 B; ~3 u. e$ s if(temp!=0xf0)
' U" d" _# w: b) C \! p+ n! U {
% n9 n/ y% c" o temp=P1;+ f i) u" B |1 `
switch(temp)
f* G. y& ?% a4 U% x7 N {
3 J' `' N( K! ^+ { case 0xeb:
) R7 [4 g9 f3 I! B key=7;8 l' J) c; U; a6 L
break;/ H& A V4 q& l9 V U* _
case 0xdb:# s. l. D( F C, ~" s6 w* t
key=8;- Y9 b' N! I* [, @
break;
4 U4 J- N! K, { case 0xbb:( {5 o+ r n6 b0 g# }: {$ c. R/ Y V. k
key=9;& G# _5 y" v0 S' v" A! Y& g% D8 ]
break;
" _9 d8 w6 c& r1 a3 r8 e case 0x7b:
& Z/ m; K% p/ T V4 ^* s key=14;& X7 a, K# {4 r8 d6 C% l- z
break;. Y8 P1 i) Q, z# m& g) z5 z
}5 m6 I3 z N% N( v( v7 D% O
while(temp!=0xf0)
' p7 r/ }/ N" g9 Q. O {+ U( ~" f) K2 w+ h3 ]
temp=P1;
' r8 y4 S! W, [ temp=temp&0xf0;' E; v5 x% T+ O: L" f6 S1 ?) E
}
/ y# `& T5 P# n$ h6 D }- S6 _" t) e6 q& ~
}
' _( G u1 O( e1 J0 M$ l2 w P1=0xf7;
B/ L% Z$ r9 f/ `; Q& r& {( x temp=P1;, e r. `9 V- S7 S) `7 |
temp=temp&0xf0;
/ D e ?7 B4 N8 _* }; O; E/ m if(temp!=0xf0)1 ]- @* v0 x, ~8 a+ ]
{, v, v5 Y$ b- H1 o7 m* D$ |0 R: c4 v% F
delay(10);6 O7 f J& q' I9 H% U, E
temp = P1;
0 g Z6 _6 D! ?. i) Z0 k$ | temp=temp&0xf0;6 n' d; p, B6 D8 j' ^3 o
if(temp!=0xf0)* @: a8 Q$ T( l
{
! U) H, f7 {0 T/ x3 O0 ^, | temp=P1;( `7 c) {8 F1 ^, j1 v% b
switch(temp)1 b+ ?# A% U# a6 d6 P* L
{
! V4 g) |7 Z, o" i7 g0 r" } case 0xe7:
# V G! Z- U5 k( ~& e" Z" \! k. f key=10;9 \1 ] O. N; I7 A; p
break;3 I1 V' @) O" Z8 b
case 0xd7:6 P" Y9 v$ A$ b: M0 J
key=0;
$ @: Q- h$ b$ R3 C' X9 h8 R break;
, g, i$ ?2 G B4 ~& t# U+ m case 0xb7:5 G5 ^5 u9 P2 q6 I v3 Y. g8 Y
key=11;% N7 i8 i- k1 J p
break;
0 s* f( ^0 B$ o3 q2 s7 y5 N case 0x77:9 a! O( h! u9 l
key=15;
5 ?8 K0 X* ]8 o9 R5 A9 a break;
0 ~% g9 c& O: g" D } m, @3 K: m9 Y
while(temp!=0xf0) c! O$ Q. Y1 m+ c$ C) v
{% F& C" V' T* E
temp=P1;8 K. g- x; Y' f+ P7 h
temp=temp&0xf0; : @+ F# Y& W+ ] y
}" E1 u3 ?1 z7 t2 \7 |. ]3 ~
}
% m& v; I: \6 u. F+ P3 Z6 T$ D0 _ }/ X9 d. b0 G& L, q0 }) U) h
}% u/ v# o# g! P3 @' S
/*uchar temp,key;//按键变量
* f* ^4 l8 K8 M* W7 ~uchar fun;//加,减,乘,除,标志位$ z* J& ~( h# c: d. p8 v
long int num1,num2,res; //num1与num2是2个要运算的变量,res是结果- Z4 h5 a" {, O' }0 a
uchar aa,dis;//aa 2个运算数标志位 dis 2个运算数与结果标志
9 a% |; s4 U6 k* L* d$ t1 p9 p; K$ I*/$ T- ?2 v4 w2 j2 l9 l+ L
void Init()//初始化8 W1 y* }; ^* |/ B) E
{
* A5 x$ g2 P# s+ ]' |4 q num1=0;5 |+ z. F* `, Q/ Q: _
num2=0;
0 C, L! c8 v) {& f6 I
9 W* j8 N$ S3 I, v" P //P0 = 0; //关闭所有段选, p* K' X: i1 _: L
wela=1;
' y# L5 {# B) I7 I P0=0xdf;//11011111
8 Y R. y" [, u# I9 _ wela=0;8 u" g4 Z5 v9 \8 d9 y T
. v7 p6 x5 f& a4 \
dula=1;$ j8 G, C7 y9 p- V1 D/ } |
P0=table[1];//显示07 {0 Q1 _1 J3 c9 |* ]
dula=0;& W) O0 [; T( W G; s+ S( a; r
/ O$ W& l# Y: a* G+ R' X( s7 i
key=16;
* R; {- G( F: N, y+ G6 k aa=0;. e- i- X- h% M) X. t8 u
dis=0;6 h" W% p$ ^% R, A8 [ u
res=0;
7 `& Y2 ~$ U# s' R5 T: [}+ I( u+ }0 [0 {
' ^# ~8 a/ O0 j; t
% v6 P+ {: K. `8 p# Y6 x, U
void dis_play(long int nm)//显示函数
0 ^. ]7 y* g s! |) X7 E" H{: T3 k* a* g n2 ~; {
uchar a1,a6;//a1位段选变量,a6为位选变量% Z+ O2 v: M( N: o
long int shu;
a6 J8 b! e& C; Z% e8 u/ ` shu=nm;
% A# y! G9 ?- O+ i# w6 K2 Z if(shu==0)
( o8 {7 G- S3 h" U f! y {
, q" f1 G. G) m+ w. B; B8 j* v wela=1;8 y# s2 ?/ `/ o1 x$ t+ Z& R4 y
P0=0xdf;
~* u$ { V. y9 e# [ L wela=0;6 |/ Z- j! F" d; K
dula=1;
/ @( u$ T0 n+ P5 u6 h3 y P0=table[1];
6 S6 A- Z2 I6 {- g: I: f dula=0;
: e" z# I- W* p% G }
* ]8 Y7 Z4 o" ?" |3 ~ else A/ Q6 q1 p, c1 {
{7 ?5 @$ p: R8 e2 X
for(a6=0; a6<6; a6++)
9 y8 g, f1 ^; \- Y {
- v, M3 e8 N* e1 [: g a1=shu%10;//shu%10 shu比10小 a1=shu本身
9 c# D& P# _0 _, I* h/ H+ L& J/ t6 k9 p if(shu!=0)
3 y# m) n; s; v* [, [ {- F. ]6 q6 ?$ m
a1=a1+1;+ c5 |& a* m! D
}
3 m' S& Q' |& _) e6 Y; I% T shu=shu/10;//shu/10 shu比10小 shu为07 {8 N0 ?; f7 ^6 P
P0=table[a1];/ ~7 _) w/ `+ W* d. d! L' m
dula=1;
7 x+ ?1 y# h2 j0 e) W) w dula=0;
X& b5 a1 ?- j5 S2 E P0=weixuan[a6];. ^8 V8 o) f' U I1 d. y! G0 J8 z
wela=1;
+ h8 {% ~# K2 Y9 z wela=0;
$ w, `8 z: X' N5 o1 y delay(5);' D' S0 j% Y+ ^9 s4 z
}
* p( Z' g. `8 \ }8 d# J% X# Z2 h8 Y- W+ k" o6 ]; g* ]# h" R
}
& x0 b, G! P6 P4 W4 Q ^4 }* P& Xvoid display()//显示选择函数,dis 0或1显示运算数,dis为2显示结果
, _0 G0 J5 Z* M$ {0 H e4 d0 _{
* {3 e" K9 q8 B2 C5 \ switch (dis)5 y: ]. Z# a+ T B
{
0 q3 H C \$ f0 j; Z6 m case 0:
8 ]2 \* R) P$ ? {6 P1 {3 p5 V5 Y1 m/ B
dis_play(num1);" b0 {# C; I' O+ U
}
1 q* E* ]% A+ u) b; b break;& [* g& A6 O8 R7 g. E- W
case 1:; E! k& a4 @* n% e
{
6 D( M7 k5 ^1 D) f( J: P1 K% [ dis_play(num2);3 G; b2 a" e* z5 I
} + l+ m7 f3 b/ U" e. a' }# O' A6 e* ]5 O
break;! Z+ g0 F/ o1 `7 |
case 2:1 b+ d# r/ Y' d
{
% d2 f/ B* |* j dis_play(res);
, v& i- G6 w5 |7 U3 Z5 E/ n0 c }
! k0 ?2 z: A$ ` W break;
# G5 t. g4 A0 m3 t5 u; q }
8 E) D9 ?7 X, W( a}. ?! k: e: X; O" p9 L1 x4 y: x6 o4 E; ]
( O+ A. D# o% O/ K
& x i; K) ]) @5 g% ]& [7 xvoid shanshuo()//数码管闪烁- x& H* \0 t! V& N9 ]( L7 \, ?) B
{/ }+ c. O1 S M3 ]4 D1 y6 U4 f+ z& W/ p
wela=1;$ |8 Y- r. J: H. ^# Y
P0=0xff;
8 E) x# B3 q/ W8 t7 _6 O1 l wela=0; {/ H( v# _/ H- Q2 f
delay(255);% B9 n5 d$ I9 Z; X& p2 K
}
e2 O, }9 ]& \5 p) m* B8 W" z
+ Y+ @- X) U" o1 F- O. k7 ~6 W7 `; s$ E H- x' R
/*uchar temp,key;//按键变量3 [- n8 t+ u$ M4 x, O
uchar fun;//加,减,乘,除,标志位2 v' @3 C* `& v5 M4 a
long int num1,num2,res; //num1与num2是2个要运算的变量,res是结果
* G( ^4 R1 W% D, |uchar aa,dis;//aa 2个运算数标志位 dis 2个运算数与结果标志* j+ ?# }; v; `, d, |+ n
*/
" I4 ^2 J5 R" C+ p( qvoid check()//运算函数) K3 M, d2 }% U+ h Z4 C
{
4 V. m% }! r8 V) d if(key!=16)2 r4 H: x; E7 @3 u7 T
{
8 q" [" O" y# R0 s* ?) m bee();
3 A' l4 L+ q4 E6 s% ~: i, u if(key>=10)
5 p4 B7 j- N% O1 ` {
& w" q8 J; [* S. k) w6 O switch (key)7 c: Q7 K4 t+ ?% `. X* n4 _
{
; E9 V7 O, D+ _- K1 E; F8 e0 K0 \ // CE
& b+ j9 [5 m2 z! X; i case 10:$ c) A p. S' d- T9 ~
Init();2 \& v6 s' }& D L! |7 e, q9 ]
break; & g7 J3 I+ a) A; ?8 q6 i3 B
// =5 N; l0 e3 Y4 P, V
case 11:4 a2 K4 `/ m7 \% F4 J6 k6 b- {' x
{
4 |% _) Z: U2 I! Z( |+ E& j0 ] switch (fun)//加,减,乘,除选择标志位
$ H4 U% r4 u+ `( r {& V& Q' f# s5 n* A$ D
case 0:
9 I4 N. y7 R) q" u res=num1+num2,dis=2;( T" h* {4 u, ]& W r' ~
break;//加法, Q. d. O5 Q0 p% n A
case 1:: ?! Z9 i) {, C5 B
res=num1-num2,dis=2;
+ P$ W/ s! I6 ^, M$ @9 Q" W break;//减法
. N+ x5 {$ `: D: p) C- q& { case 2:res=num1*num2,dis=2;
- O Y, L/ _1 y0 z9 Q% T break;//乘法
: N- K9 e7 S' G( Z7 n case 3:res=num1/num2,dis=2;5 b+ e e$ T/ m3 v" k* ?
break;//除法. q/ d" m: M8 c4 K! P
}' |* a1 W; @" ~/ P6 I! S3 M
};% d8 [* ^$ W2 X# N& Z5 {
break;* {# J" S& Z ^* s1 b
// +
! c2 b+ I$ s4 S$ {: @ case 12:, o9 t6 d" D! U$ F( \3 `2 s5 m5 @5 ^
fun=0,aa=1,shanshuo();
7 s; _4 f/ F( R2 \ break;
2 d+ N, W/ a2 u3 p% [. D6 {4 _ // -
- ~+ [& B: Y7 N+ i9 b' s- b% I case 13:
4 x- C' e; Y5 @1 I( G1 j fun=1,aa=1,shanshuo();
0 h- D! H6 I' I d( ?2 t break;
& Q- |0 s; i" N% v Q4 B // *
. d9 B2 x( S" j& A case 14:
" g* u* M9 D" [: `( U fun=2,aa=1,shanshuo();0 h4 n' z9 a, R6 d: T
break;
- N- i0 T0 j P, o4 v2 r // / . S6 B. r6 b: L% v x
case 15:, n; E6 V5 h- D, [5 f, O0 w8 a# X% ^
fun=3,aa=1,shanshuo();
+ P) d7 r5 g+ p$ E3 q8 y break;
) t- q/ }# [% J0 |) A6 b1 E4 l* [; ]" o }
7 e! T! t* y! _7 D% M8 G4 t }, c2 m# f4 H* [" b) U
else
% W2 s5 } w) \6 u" n4 C3 y {
1 f% }0 f/ }% d$ p8 p" `2 @ switch (aa)//运算变量赋值标志位) ^" T0 O4 U& c5 |7 j) v8 }1 F
{
/ F" e9 ^+ @3 z c+ B, o8 c) g case 0:8 e; V# E5 k4 Q/ j- ?* c
{
; R, r N u' h% n$ I1 b, c num1=num1*10+key;//把按键检测到的值赋给num1运算变量1
- v) j/ H+ e1 q- U- W# B };
+ u- r3 S$ Y% N0 D1 a q3 K2 N/ K break;
$ [' l; P6 Z3 C7 @$ k1 C case 1:* K6 \, x& a" e, `# y' u
{) c' n [7 P: ?9 u1 S
dis=1;
# Z; a; p- ?, A num2=num2*10+key;//把按键检测到的值赋给num2运算变量2
* E& w% j0 l0 E- ]4 y };; J+ y1 p3 ], ^1 _9 h' w( Q( w
0 R/ [" H6 C0 j8 e! d
. U4 w0 t- b3 q+ S! N+ J% p4 q3 ^! F1 r
8 [* e5 C# Y& u' j6 l…………余下代码请下载附件…………1 D" B1 l1 Y: T4 j- m$ I
8 l$ b7 j7 f8 k3 b% E) D2 \. \2 u. c
! B/ s; H. l6 O% O
下载:
) L- K5 p' R$ t( G" O( n& M" p, k
|
|