51单片机计算器程序文档格式.docx
- 文档编号:20257957
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:14
- 大小:42.05KB
51单片机计算器程序文档格式.docx
《51单片机计算器程序文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机计算器程序文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
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[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];
=999999999)&
99999999))
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];
=99999999)&
9999999))
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];
=9999999)&
999999))
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];
=999999)&
99999))
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];
=99999)&
9999))
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)&
999))
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];
=999)&
99))
buf[13]=table[temp/100];
buf[14]=table[(temp%100)/10];
buf[15]=table[(temp%100)%10];
=99)&
9))
buf[14]=table[temp/10];
buf[15]=table[temp%10];
elseif(temp<
=9)
buf[15]=table[temp];
unsignedcharkey_scan()
unsignedcharcode_h,code_l;
P1=0xf0;
if((P1&
0xf0)!
=0xf0)
delayms
(2);
=0xf0)//两次判断,确认有键按下
code_h=0xfe;
//低四位为行地址,对每一行进行扫描,即将每一行依次赋值0
while((code_h&
0x10)!
=0x00)
P1=code_h;
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);
//4
case0x48:
dat_proc
(1);
//1
case0x14:
dat_proc(8);
//8
case0x24:
dat_proc(5);
//5
case0x44:
dat_proc
(2);
//2
case0x84:
dat_proc(0);
//0
case0x12:
dat_proc(9);
//9
case0x22:
dat_proc(6);
//6
case0x42:
dat_proc(3);
//3
case0x82:
result_proc();
//=
case0x11:
char_proc(4);
///
case0x21:
char_proc(3);
//*
case0x41:
char_proc
(2);
//-
case0x81:
char_proc
(1);
//+
case0x88:
start_proc();
//on
default:
voiddat_proc(unsignedintkey_dat)
if(key_times==0)
temp=key_dat;
if(flag==0)
temp=(temp1*10+key_dat);
elseif(flag==1)
temp=(temp2*10+key_dat);
temp1=temp;
temp2=temp;
delayms(200);
key_times++;
voidchar_proc(unsignedchari)
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);
case2:
temp=(temp1-temp2);
case3:
temp=(temp1*temp2);
case4:
temp=(temp1/temp2);
voidstart_proc()
voidtime0()interrupt1using2
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 单片机 计算器 程序