HL单片机简单计算器程序xysWord格式.docx

上传人:b****5 文档编号:16561161 上传时间:2022-11-24 格式:DOCX 页数:13 大小:68.30KB
下载 相关 举报
HL单片机简单计算器程序xysWord格式.docx_第1页
第1页 / 共13页
HL单片机简单计算器程序xysWord格式.docx_第2页
第2页 / 共13页
HL单片机简单计算器程序xysWord格式.docx_第3页
第3页 / 共13页
HL单片机简单计算器程序xysWord格式.docx_第4页
第4页 / 共13页
HL单片机简单计算器程序xysWord格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

HL单片机简单计算器程序xysWord格式.docx

《HL单片机简单计算器程序xysWord格式.docx》由会员分享,可在线阅读,更多相关《HL单片机简单计算器程序xysWord格式.docx(13页珍藏版)》请在冰豆网上搜索。

HL单片机简单计算器程序xysWord格式.docx

0x7f,0x6f,0x77,0x7c,//C,D,E,F,无显示,"

_"

"

."

0x39,0x5e,0x79,0x71,0x00,0x08,0x80};

//***********************【延迟函数】************************//

voiddelay(uintz)

{

uintx,y;

for(x=100;

x>

0;

x--)

for(y=z;

y>

y--);

}

//***********************【中断函数】************************//

voidjishu()interrupt1

aa=0;

//***********************【显示函数】************************//

display1(d)//【个位显示】

P0=table[d];

//将第num个显示编码送P0

dula=1;

//一个下降沿将数据锁存

dula=0;

P0=0xdf;

//位选通全部的数码管

wela=1;

wela=0;

display2(e)

P0=table[e];

//【十位显示】

P0=0xef;

display3(f)

P0=table[f];

//【百位显示】

P0=0xf7;

display(g)//【千位显示】

P0=table[g];

P0=0xfb;

display4(shu)//【数显示】//*********************************千百十个四位显示▼▼

xiaoshu=zh*10;

xshu=xiaoshu%10;

if(xshu>

=1)//******************************判断是否存在小数点▼

{

if(shu/100>

=1)//(判断有没有百位)

{

bai=shu/100;

shi=shu%100/10;

ge=shu%100%10;

while

(1)

{

display(bai);

delay

(2);

display3(shi);

display2(ge);

display2(18);

display1(xshu);

}

}//if(shu/100

elseif(shu/10>

=1)//(判断有没有十位)

shi=shu/10;

ge=shu%10;

}//elseif(shu/10

elseif(shu/1>

=1)

ge=shu/1;

}//elseif(shu/1

else

{while

(1){display2(18);

delay

(2);

display1(xshu);

}}

}//if(xshu//******************************判断是否存在小数点▲

else//第一个if对应的else

if(shu/1000>

=1)//(判断有没有千位)

qian=shu/1000;

bai=shu%1000/100;

shi=shu%1000%100/10;

ge=shu%1000%100%10;

display(qian);

display3(bai);

display2(shi);

display1(ge);

}//if(qian

elseif(shu/100>

}

elsedisplay1(shu);

}//else

}//【数显示】//****************************千百十个四位显示▲▲

display5(shi,ge)//【定时】十个位显示,用于防止死循环的动态显示

EA=1;

ET0=1;

TMOD=0x01;

TH0=(65536-100000)/256;

//0.5s计数

TL0=(65536-100000)%256;

while(aa)

display2(shi);

delay(5);

display1(ge);

TR0=1;

//启动定时器TR0

}

display1(17);

delay(300);

display1(16);

//*********************【蜂鸣器鸣灭函数】**********************//

voidwhbeep()

while(temp!

=0xf0)//这段程序是检测按键是否被释放

{

temp=P3;

//如果没有释放就一直等待并且

temp=temp&

0xf0;

beep=0;

//蜂鸣器一直响

beep=1;

//释放后关闭蜂鸣器

//************************【主函数】*************************//

//**************【主要通过键盘检测等技术来实现】*************//

voidmain()

{

i=0;

j=0;

display4(0);

while

(1)

P3=0xfe;

//●★●给P3.0送低电平,其余为高电平,即11111110,以便检测第一列的四个键盘

temp=P3;

//把P3口数据读回来

temp=temp&

//把P3口与11110000相与

=0xf0)//当有键按下刚一定不相等,于是进入//下一步检测

//软件延时去抖动

switch(temp)//因为我们刚才是将第一行置的低,在这里再判断是第几列

case0xe0:

num=1;

i++;

break;

//如果temp=0xee则为第一行和第一列的交叉点,由此我们知道是矩阵键盘上的第一个键被按下,我们给num=1

case0xd0:

num=2;

case0xb0:

num=3;

case0x70:

num=4;

whbeep();

//控制蜂鸣器的响

delay(8);

//延时

while(temp!

=0xf0);

//软件松手检测

if(j==0)

if(i==1){a2=num;

a2a1=a2;

display1(a2a1);

P1=0xfe;

}//如果j=0,i=1,表示第一次输入,赋值给a2-》显示-》开第一个灯

else{a1=num;

a2a1=10*a2+a1;

aa=4;

display5(a2,a1);

TR0=0;

}//如果j=0,i=1,表示第二次次输入,赋值给a1-》关计数器-》显示-》开第一个灯

else{

if(i==1){b2=num;

b2b1=b2;

display1(b2b1);

P1=0xf8;

}////如果j>

=1,i=1,表示第一次输入,赋值给a2-》显示-》开第一个灯

else{b1=num;

b2b1=10*b2+b1;

display5(b2,b1);

}//如果j>

=1,i=2,表示第二次次输入,赋值给a1-》关计数器-》显示-》开第一个灯

}//while(temp!

=0xf0)

P3=0xfd;

//●★●给P3.1送低电平,其余为高电平,即11111101,以便检测第二列的四个键盘

switch(temp)

num=5;

//i自加作用为标记第一第二次输入,过程为i=1、2、0、1、2。

num=6;

//**********其实程序中的总流程为,输入a2(输入a1?

),输入运算符号(用j=1234标记),输入b2(在输入b1),运算,输出*****//

num=7;

num=8;

}//P1=0xfe;

}//

}

P3=0xfb;

//●★●给P3.2送低电平,其余为高电平,即11111011,以便检测第三列的四个键盘

num=9;

num=0;

num=11;

num=12;

if(num<

=9)//由于9、0为数字输入故用if判断区分开来

{

if(j==0)

{

if(i==1){a2=num;

else{a1=num;

}

else{

if(i==1){b2=num;

else{b1=num;

elseif(num==12){P1=0xf0;

display4(zh);

}//***********【显示计算结果】***********//

P3=0xf7;

//●★●给P3.3送低电平,其余为高电平,即11110111,以便检测第四列的四个键盘

num=13;

num=14;

num=15;

num=16;

if(num==13){j=1;

P1=0xfc;

}//用j标记输入的运算类型

elseif(num==14){j=2;

elseif(num==15){j=3;

else{j=4;

if(num>

=13)display1(num);

//运算符显示d,c,e,无显示

if(j>

0)

switch(j)//当输入b2开始时就计算运算结果,以方便随时输出结果

case0:

zh=0;

break;

case1:

zh=a2a1+b2b1;

case2:

zh=a2a1-b2b1;

case3:

zh=a2a1*b2b1;

case4:

zh=a2a1/b2b1;

}//if(i==3)

}//while

(1)

}//void

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1