当前位置:文档之家› 简单的51单片机计算器程序

简单的51单片机计算器程序

简单的51单片机计算器程序
简单的51单片机计算器程序

请支持原创,谢谢

2、程序:

**************************************************************************** **************************** ************************************************************************************ #in elude

#in clude vintrin s.h>

#defi ne uint8 un sig ned char sbit led 仁P"0;

sbit led2=P1A 1;

sbit led3=P"2;

sbit led4=P1A3; long int coun t1,co un t2; //存放上次的输入和现在的输入

uint8 symbol,p; long int outputco unt; 〃存放符号的数值

p 用于多数输入清屏作用 〃存放结果

uint8 KeyCodeTable[]={0x28,0x14,0x24,0x44,0x12,0x22,0x42,0x11,0x21,0x41,

0x18,0x88,0x84,0x82,0x81,0x48}; //键盘按键特征表 卜 XTfciLI 戸口 JYKMJ L fO.l^AElt

L XTA12

■口环 OS] 萨 口 MKIH L

narf

■口 m 右 L 环

嗨[ FQja'AK

ro.T^A&f F^3

FZIY.iB pz.vje PZ^AC L ALE

K.^AIZl

0 FZ^AG L

PUD Pl.l

F1Z ?2

PZJ&'AR FZ.trAV

rain 映

F3.1H?

VllTTT

iF3.?nn PIS

P3ST1 f\A

FIT

.inm .IEDH ,,

/** *desig n by DX from GDOU **/

1电路图

.1EDR.

□ 4 U1!

- ^Sl~

int table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90} ;// 不懂uint8 a[4];

void init()

{

uint8 j;

a[0]=0xc0;

for(j=1;j<4;j++)

{

a[j]=0xff;

}

count1=0;

count2=0;

symbol=0;

p=0;

outputcount=0;

}

void delayms(int x) //延时程序{

uint8 i;

while(x--) for(i=0;i<120;i++);

}

void display() //LED 显示

{

P0 = a[0]; led1=0; delayms(5); led1=1;

P0 = a[1]; led2=0;

led2=1;

P0 = a[2]; led3=0; delayms(5); led3=1;

P0 = a[3]; led4=0; delayms(5); led4=1;

}

void output(long int x) {

int i;

uint8 j=0;

uint8 z[3]={0,0,0} if(x>=1000) { i=x/1000;

z[0]=i; a[j]=table[i]; j++; }

uint8 keyscan()

{

//键盘扫描 uint8 sCode,kCode,i,k;

P2=0xf0;

if((P2&0xf0)!=0xf0)

{

delayms(2);

// 软件去抖 if((P2&0xf0)!=0xf0)

{

sCode=0xfe;

for(k=0;k<4;k++)

{

P2=sCode; delayms(12);

if((P2&0xf0)!=0xf0)

{

kCode=~P2;

for(i=0;i<16;i++)

if(kCode==KeyCodeTable[i])

return(i);

}

else

sCode=_crol_(sCode,1);

}

}

}

return(100); //没按键输入

{ i=(x-z[0]*1000)/100; z[1]=i;

a[j]= table[i];

j++; }

if(x>=10)

{ i=(x-z[0]*1000-z[1]*100)/10; z[2]=i;

a[j]= table[i];

j++; }

i=x%10; a[j]=table[i];

}

void Calculate(uint8 key) // 计算程序并显示{

LED

uint8 i,j;

static k=0;

if(key<10) { if(p) {

p=0;

for(j=0;j<4;j++)

{

a[j]=0xff;

}

}

a[k]=table[key];

k=++k%4;

count2*=10;

count2+=key;

outputcount=count2; //把当前按下的值先赋给outputcount }

else if(key==10) //清零键

{ k=0 ;

init();

}

else if(key<15)

{ k=0;

p=1;

switch(symbol) //多则运算时用于把之前的结果赋给COUNT1

{

case 0 :count1=count2 ;break;

case 11:count1+=count2;break;

case 12:count1-=count2;break;

case 13:count1*=count2;break;

case 14:count1/=count2;break;

default: break;

}

count2=0; //有符号输入时把之前的值赋给count1, 并把符号标号赋给symbol;

symbol=key;

}

else

{

switch(symbol)

{

case 11:outputcount=count1+count2;break;

case 12:outputcount=count1-count2;break;

case 13:outputcount=count1*count2;break;

case 14:outputcount=count1/count2;break; default:break;

}

for(j=0;j<4;j++)

{

a[j]=0xff;

}

output(outputcount);

}

}

void main()

{

uint8 key;

init();

P0=0xff;

led1=1;

led2=1;

led3=1;

led4=1;

while(1)

{

display();

if((key=keyscan())!=100)

{ while((keyscan())!=100) ;

Calculate(key); }

相关主题
文本预览
相关文档 最新文档