利用protues仿真计算器.docx
- 文档编号:7480675
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:18
- 大小:54.92KB
利用protues仿真计算器.docx
《利用protues仿真计算器.docx》由会员分享,可在线阅读,更多相关《利用protues仿真计算器.docx(18页珍藏版)》请在冰豆网上搜索。
利用protues仿真计算器
//**************计算器程序***************//
//**************这是主函数**************//
#include
#include"stdlib.h"
#include"init1.h"
#include"key.h"
voidmain()
{
while
(1)
{
init();//显示初始化
do{
k1=k;//用它来判断0-9键的按下与否
k4=k3;//判断运算符是否按下
flag6=flag5;//判断等号
key_scan();
z_x_s();//在处理数据后的显示
if(k!
=k1&&k<10&&key!
='=')
{
write_com(0x1c);//写入一个数字后左移1位
}
}
while(flag7==0);
flag7=0;
flag8++;
}
}
//*************这是初始化程序init.h子文件**************//
uchari,j,k,k1=0,flag=0,flag1=0,flag4,num[10],num2[10],
flag8,flag5,flag6,flag7=0,key=10,wei;
doublejie_guo,relly_num1,relly_num2;
ucharcodetable[10]="0123456789";
uintnum1[10],num3[10];
uinttable2[10];
ucharcodetable1[15]="yourareerror";
ucharqing_ling,k2,k3,k4,y_s_f,number,ji_xu;
sbitled0=P3^7;
voiddelay_ms(uintx)
{
uinty,z;
for(z=x;z>0;z--)
for(y=110;y>0;y--);
}
//***********这是按键扫描子文件key.h***********//
#include"xian_shi.h"
#include"ji_suan.h"
voidkey_scan()
{
uchartemp;
P2=0xfe;
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay_ms
(2);
if(temp!
=0xf0)
{
temp=P2;
switch(temp)
{
case0xee:
key=7;break;
case0xde:
key=8;break;
case0xbe:
key=9;break;
case0x7e:
y_s_f='/';k3++;
if(k3==1){ji_suan();qing_ling=1;}break;
}
if(0<=key&&key<10)
{
cun_zhi();
k++;
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfd;
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay_ms
(2);
if(temp!
=0xf0)
{
temp=P2;
switch(temp)
{
case0xed:
key=4;break;
case0xdd:
key=5;break;
case0xbd:
key=6;break;
case0x7d:
y_s_f='*';k3++;
if(k3==1){ji_suan();qing_ling=1;}break;
}
if(0<=key&&key<10)
{
cun_zhi();
k++;
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfb;
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay_ms
(2);
if(temp!
=0xf0)
{
temp=P2;
switch(temp)
{
case0xeb:
key=1;break;
case0xdb:
key=2;break;
case0xbb:
key=3;break;
case0x7b:
y_s_f='-';k3++;
if(k3==1){ji_suan();qing_ling=1;}break;
}
if(0<=key&&key<10)
{
cun_zhi();
k++;
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xf7;
temp=P2;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay_ms
(2);
if(temp!
=0xf0)
{
temp=P2;
switch(temp)
{
case0xe7:
flag7=1;break;
case0xd7:
key=0;break;
case0xb7:
key='=';flag5++;break;
case0x77:
y_s_f='+';k3++;
if(k3==1){ji_suan();qing_ling=1;if(flag8==1)
led0=0;}break;
}
if(0<=key&&key<10)
{
cun_zhi();
k++;
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
if(flag5!
=flag6)//等号被按下
{
relly_num2=0;
ji_suan();
qiu_jie();
shu_z_z(jie_guo);
}
if((k3!
=k4)&&k3>1&&flag5==0)
{
relly_num2=0;
ji_suan();
qiu_jie();
relly_num1=jie_guo;
qing_ling=1;
for(i=0;i<10;i++)
{
num2[i]='';
num3[i]='';
}
}
if(flag5>0&&(k3!
=k4))
{
relly_num1=jie_guo;
qing_ling=1;
}
if(qing_ling==1)
{
for(i=0;i<10;i++)
{
num[i]='';
delay_ms
(1);
}
init();
k=0;
flag=1;
qing_ling=0;
}
if(flag7==1)
{
flag=0;
k3=0;
k1=0;
k4=0;
flag5=0;
key=10;
k=0;
jie_guo=0;
relly_num1=0;
relly_num2=0;
for(i=0;i<10;i++)
{
num2[i]='';
num3[i]='';
}
}
}
//*************这是1602液晶显示程序xian_sh.h*****//
sbitrs=P3^0;
sbitrw=P3^1;
sbiten=P3^2;
voidwrite_com(ucharcom)
{
rs=0;
rw=0;
P0=com;
en=0;
delay_ms(5);
en=1;
delay_ms(5);
en=0;
}
voidwrite_dat(uchardat)
{
rs=1;
rw=0;
P0=dat;
en=0;
delay_ms(5);
en=1;
delay_ms(5);
en=0;
}
voidinit()
{
en=0;
write_com(0x38);
write_com(0x0c);
write_com(0x01);
}
voidz_x_s()
{
if(flag1==0)
write_com(0x80+0x40+0x10);
else
write_com(0x80+0x40+0x11);
if(key!
='='&&k3==0&&k!
=0)
{
for(i=0;i<10;i++)
{
write_dat(num[i]);
delay_ms
(1);
}
}
elseif(k3>0&&key!
='=')
for(i=0;i<10;i++)
{
write_dat(num2[i]);
delay_ms
(1);
}
elseif(flag5!
=flag6)
{
if(flag8!
=0&&wei==1)
{
for(j=1;j<3;j++)
table2[j]='';
for(i=0;i<3;i++)
{
write_dat(table2[i]);
delay_ms
(1);
}
}
else
{
for(i=wei;i { table2[i]=''; } for(i=0;i { write_dat(table2[i]); delay_ms (1); } for(j=0;j write_com(0x1c); y_s_f=0; } } } //*************这是数字处理子文件ji_saun.h*********// voidshu_z_z(uintdat) { ucharwan,qian,bai,shi,ge; if(0<=dat&&dat<10) { shi=dat/10; ge=dat%10; table2[0]=table[ge]; wei=1; } if(10<=dat&&dat<100) { shi=dat/10; ge=dat%10; table2[0]=table[shi]; table2[1]=table[ge]; wei=2; } if(100<=dat&&dat<1000) { bai=dat/100; shi=dat/10%10; ge=dat%10; table2[0]=table[bai]; table2[1]=table[shi]; table2[2]=table[ge]; wei=3; } if(1000<=dat&&dat<10000) { qian=dat/1000; bai=dat/100%10; shi=dat/10%10; ge=dat%10; table2[0]=table[qian]; table2[1]=table[bai]; table2[2]=table[shi]; table2[3]=table[ge]; wei=4; } if(10000<=dat&&dat<100000) { wan=dat/10000; qian=dat/1000%10; bai=dat/100%10; shi=dat/10%10; ge=dat%10; table2[0]=table[wan]; table2[1]=table[qian]; table2[2]=table[bai]; table2[3]=table[shi]; table2[4]=table[ge]; wei=5; } } voidji_suan() { if(! flag) { for(i=0;i { for(j=0;j { num1[i]*=10; } } for(i=0;i { relly_num1+=num1[i]; } } else { if(k3>1&&(flag5==flag6)) k--; for(i=0;i { for(j=0;j { num3[i]*=10; } } for(i=0;i { relly_num2+=num3[i]; } } } voidqiu_jie() { if(y_s_f=='+') { jie_guo=relly_num1+relly_num2; } if(y_s_f=='-') { jie_guo=relly_num1-relly_num2; } if(y_s_f=='*') { jie_guo=relly_num1*relly_num2; } if(y_s_f=='/') { jie_guo=relly_num1/relly_num2; } } voidcun_zhi() { if(! flag){num[k]=table[key];num1[k]=key; if(key! ='='&&k3>1) { relly_num2=jie_guo; qiu_jie(); shu_z_z(jie_guo); if(jie_guo==9&&k3==3)led0=0; } } else{num2[k]=table[key];num3[k]=key; } } 仿真图连接 器件名称 曾晓制作于2013.09.28
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 protues 仿真 计算器