51单片机计算器程序.docx
- 文档编号:7159681
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:14
- 大小:42.05KB
51单片机计算器程序.docx
《51单片机计算器程序.docx》由会员分享,可在线阅读,更多相关《51单片机计算器程序.docx(14页珍藏版)》请在冰豆网上搜索。
51单片机计算器程序
#include
#include
unsignedchardatadigit;
unsignedchardataindex;
unsignedchardatabuf[16];
unsignedcharcodetable[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
unsignedinttemp_dat;
unsignedlonginttemp1,temp2,temp;
unsignedintflag,flag1,key_times,key_flag,key_temp;
unsignedcharkey_scan();
voiddelay(void);
voidkey_proc();
voidsys_init();
voiddis_result();
voiddis_init();
voidresult_proc();
voidstart_proc();
voiddat_proc(unsignedintkey_dat);
voidchar_proc(unsignedchari);
voiddelayms(unsignedcharms);
voidmain()
{
sys_init();
while
(1)
{
key_proc();
dis_result();
}
}
voidsys_init()
{
P0=0xff;
P2=0x00;
TMOD=0x01;
TH0=0xfc;
TL0=0x17;
digit=0x00;
index=0;
temp=0;
temp1=0;
temp2=0;
flag=0;
key_times=0;
temp_dat=0;
key_flag=0;
key_temp=0;
dis_init();
IE=0x82;
TR0=1;
}
voiddis_init()
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[10];
buf[7]=table[10];
buf[8]=table[10];
buf[9]=table[10];
buf[10]=table[10];
buf[11]=table[10];
buf[12]=table[10];
buf[13]=table[10];
buf[14]=table[10];
buf[15]=table[10];
}
voiddis_result()
{
if((temp<=4294967295)&&(temp>999999999))
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[temp/1000000000];
buf[7]=table[(temp%1000000000)/100000000];
buf[8]=table[((temp%1000000000)%100000000)/10000000];
buf[9]=table[(((temp%1000000000)%100000000)%10000000)/1000000];
buf[10]=table[((((temp%1000000000)%100000000)%10000000)%1000000)/100000];
buf[11]=table[(((((temp%1000000000)%100000000)%10000000)%1000000)%100000)/10000];
buf[12]=table[((((((temp%1000000000)%100000000)%10000000)%1000000)%100000)%10000)/1000];
buf[13]=table[(((((((temp%1000000000)%100000000)%10000000)%1000000)%100000)%10000)%1000)/100];
buf[14]=table[((((((((temp%1000000000)%100000000)%10000000)%1000000)%100000)%10000)%1000)%100)/10];
buf[15]=table[((((((((temp%1000000000)%100000000)%10000000)%1000000)%100000)%10000)%1000)%100)%10];
}
if((temp<=999999999)&&(temp>99999999))
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[10];
buf[7]=table[temp/100000000];
buf[8]=table[(temp%100000000)/10000000];
buf[9]=table[((temp%100000000)%10000000)/1000000];
buf[10]=table[(((temp%100000000)%10000000)%1000000)/100000];
buf[11]=table[((((temp%100000000)%10000000)%1000000)%100000)/10000];
buf[12]=table[(((((temp%100000000)%10000000)%1000000)%100000)%10000)/1000];
buf[13]=table[((((((temp%100000000)%10000000)%1000000)%100000)%10000)%1000)/100];
buf[14]=table[(((((((temp%100000000)%10000000)%1000000)%100000)%10000)%1000)%100)/10];
buf[15]=table[(((((((temp%100000000)%10000000)%1000000)%100000)%10000)%1000)%100)%10];
}
if((temp<=99999999)&&(temp>9999999))
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[10];
buf[7]=table[10];
buf[8]=table[temp/10000000];
buf[9]=table[(temp%10000000)/1000000];
buf[10]=table[((temp%10000000)%1000000)/100000];
buf[11]=table[(((temp%10000000)%1000000)%100000)/10000];
buf[12]=table[((((temp%10000000)%1000000)%100000)%10000)/1000];
buf[13]=table[(((((temp%10000000)%1000000)%100000)%10000)%1000)/100];
buf[14]=table[((((((temp%10000000)%1000000)%100000)%10000)%1000)%100)/10];
buf[15]=table[((((((temp%10000000)%1000000)%100000)%10000)%1000)%100)%10];
}
if((temp<=9999999)&&(temp>999999))
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[10];
buf[7]=table[10];
buf[8]=table[10];
buf[9]=table[temp/1000000];
buf[10]=table[(temp%1000000)/100000];
buf[11]=table[((temp%1000000)%100000)/10000];
buf[12]=table[(((temp%1000000)%100000)%10000)/1000];
buf[13]=table[((((temp%1000000)%100000)%10000)%1000)/100];
buf[14]=table[(((((temp%1000000)%100000)%10000)%1000)%100)/10];
buf[15]=table[(((((temp%1000000)%100000)%10000)%1000)%100)%10];
}
if((temp<=999999)&&(temp>99999))
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[10];
buf[7]=table[10];
buf[8]=table[10];
buf[9]=table[10];
buf[10]=table[temp/100000];
buf[11]=table[(temp%100000)/10000];
buf[12]=table[((temp%100000)%10000)/1000];
buf[13]=table[(((temp%100000)%10000)%1000)/100];
buf[14]=table[((((temp%100000)%10000)%1000)%100)/10];
buf[15]=table[((((temp%100000)%10000)%1000)%100)%10];
}
if((temp<=99999)&&(temp>9999))
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[10];
buf[7]=table[10];
buf[8]=table[10];
buf[9]=table[10];
buf[10]=table[10];
buf[11]=table[temp/10000];
buf[12]=table[(temp%10000)/1000];
buf[13]=table[((temp%10000)%1000)/100];
buf[14]=table[(((temp%10000)%1000)%100)/10];
buf[15]=table[(((temp%10000)%1000)%100)%10];
}
elseif((temp<=9999)&&(temp>999))
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[10];
buf[7]=table[10];
buf[8]=table[10];
buf[9]=table[10];
buf[10]=table[10];
buf[11]=table[10];
buf[12]=table[temp/1000];
buf[13]=table[(temp%1000)/100];
buf[14]=table[((temp%1000)%100)/10];
buf[15]=table[((temp%1000)%100)%10];
}
elseif((temp<=999)&&(temp>99))
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[10];
buf[7]=table[10];
buf[8]=table[10];
buf[9]=table[10];
buf[10]=table[10];
buf[11]=table[10];
buf[12]=table[10];
buf[13]=table[temp/100];
buf[14]=table[(temp%100)/10];
buf[15]=table[(temp%100)%10];
}
elseif((temp<=99)&&(temp>9))
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[10];
buf[7]=table[10];
buf[8]=table[10];
buf[9]=table[10];
buf[10]=table[10];
buf[11]=table[10];
buf[12]=table[10];
buf[13]=table[10];
buf[14]=table[temp/10];
buf[15]=table[temp%10];
}
elseif(temp<=9)
{
buf[0]=table[10];
buf[1]=table[10];
buf[2]=table[10];
buf[3]=table[10];
buf[4]=table[10];
buf[5]=table[10];
buf[6]=table[10];
buf[7]=table[10];
buf[8]=table[10];
buf[9]=table[10];
buf[10]=table[10];
buf[11]=table[10];
buf[12]=table[10];
buf[13]=table[10];
buf[14]=table[10];
buf[15]=table[temp];
}
}
unsignedcharkey_scan()
{
unsignedcharcode_h,code_l;
P1=0xf0;
if((P1&0xf0)!
=0xf0)
{
delayms
(2);
if((P1&0xf0)!
=0xf0)//两次判断,确认有键按下
{
code_h=0xfe;//低四位为行地址,对每一行进行扫描,即将每一行依次赋值0
while((code_h&0x10)!
=0x00)
{
P1=code_h;
if((P1&0xf0)!
=0xf0)
{
code_l=(P1&0xf0|0x0f);
return((~code_h)+(~code_l));//取反之后,高四位与低四位都只有一个1,相加不会进位
}
else
code_h=((code_h<<1)|0x01);//依次进行扫描
}
}
}
return(0);
}
voidkey_proc()
{
unsignedcharkey_value;
key_value=key_scan();
switch(key_value)
{
case0x18:
dat_proc(7);break;//7
case0x28:
dat_proc(4);break;//4
case0x48:
dat_proc
(1);break;//1
case0x14:
dat_proc(8);break;//8
case0x24:
dat_proc(5);break;//5
case0x44:
dat_proc
(2);break;//2
case0x84:
dat_proc(0);break;//0
case0x12:
dat_proc(9);break;//9
case0x22:
dat_proc(6);break;//6
case0x42:
dat_proc(3);break;//3
case0x82:
result_proc();break;//=
case0x11:
char_proc(4);break;///
case0x21:
char_proc(3);break;//*
case0x41:
char_proc
(2);break;//-
case0x81:
char_proc
(1);break;//+
case0x88:
start_proc();break;//on
default:
break;
}
}
voiddat_proc(unsignedintkey_dat)
{
if(key_times==0)
temp=key_dat;
else
{
if(flag==0)
temp=(temp1*10+key_dat);
elseif(flag==1)
temp=(temp2*10+key_dat);
}
if(flag==0)
temp1=temp;
elseif(flag==1)
temp2=temp;
delayms(200);
key_times++;
}
voidchar_proc(unsignedchari)
{
key_times=0;
key_flag=i;
if(temp==0)flag=0;
else
{
flag=1;
}
}
voidresult_proc()
{
unsignedcharflag_value;
flag_value=key_flag;
switch(flag_value)
{
case1:
temp=(temp1+temp2);break;
case2:
temp=(temp1-temp2);break;
case3:
temp=(temp1*temp2);break;
case4:
temp=(temp1/temp2);break;
}
key_times=0;
flag=0;
}
voidstart_proc()
{
temp=0;
temp1=0;
temp2=0;
flag=0;
key_times=0;
temp_dat=0;
key_flag=0;
}
voidtime0()interrupt1using2
{
TH0=0xfc;
TL0=0x17;
P2=0x00;
P0=buf[index];
P2=digit;
digit=digit++;
index++;
index&=0x0f;
}
voiddelayms(unsignedcharms)
{
unsignedchari;
while(ms--)
{
for(i=0;i<120;i++);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 计算器 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)