找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7207|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机简易计算器源代码

[复制链接]
跳转到指定楼层
楼主
ID:351456 发表于 2018-6-13 22:19 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52. h>
#define uchar unsigned char
#define uint unsigned int
define duan P0 //数码管显显示段选定义
define wei P2 //数码管显示位选定义
define key P3 //键盘接口定义
Sbit OFF=P1^0;//关机键定义
Sbit sw=P^5;
sbit sp=P^7;
unsigned long int shu1,shu2;//进行运算的两个变量数
unsigned char count;
uchar num;//键盘扫描返回回值
char
flag l, flag shu, flag fuhao, fuhao, newkey,update;
∥flag1开机标志 newkey新按键标志, fuhao运算符,update表示等于号
∥之后紧接着输入的是数的话则清零shul
char key_shu;//按键值
unsigned char code Wela[]={0xf7, 0xfb,0xfd,0xfe}
//六位数码管的位选
unsigned char code Duan[]={0x3f, 0x06,0x5b
//0 1 2
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}
//3 4 5 6 7 8 9无显示共阴阴极数码管
unsigned char count;
uchar Keyscan(); //键盘扫描函数
void display(unsigned long int); //数码管显示函数
void delay(uint i);//延时函数
{
while(i--);
}

void main()
{
flag1=0; //标志关机
{
while(1)
if(keyscan()==15; //开机检测
flag1=1;//标志开机
shu1=shu2=fuhao=flag_shu=newkey=0;//初始化变量
while(flag1)
{
if(!flag fuhao)display(shu1);
else display(shu2);
key_shu=keyscan();
if(newkey==1); //有新键值
{if(key_shu==15) //按下ONC键,清零
{flag_fuhao=0, update=0
shul=shu2=fuhao_flag=shu=newkey=0;
}
else if(key_shu=14&&flag_shu==1&&fuhao) //按下
{switch(fuhao)
{case 10: shu1=shu2+shu1; break;
case 11: shu1==shu2-shu1; break;}
fuhao=0; flag_fuhao=0; update=1;
}
else if(key_shu>=0)&&(key shu<=9)
//按下数字键
{flag_fuhao=0
if(update) shu1=0;
if(shul<100000)
shu1=key_shu+shu1*10; flag_shu=1;}
update=0;
}
else if((key_shu>=10)&&(key_shu<=11)) //按下运算符
{flag_fuhao=1;update=0;
if(flag_shu==1)
{if(fuhao=0;
{shu2=shu1; shu1=0;
fuhao=key_shu;flag_shu=2; }
else
{switch(fuhao)
{case 10: shu2=shu2+shu1; break;
case 11: shu2=shu2-shu1;break;
}
shu1=0; fuhao=key_shu;
}
else if(flag_shu==2)
fuhao=key_shu
}
newkey=0
}
}
}
}

键盘扫描
uchar keyscan()
{
key=0xfe;
if(key!=0xfe)
{
delay(500);
if(key! =0xfe)
{
switch(key)
{
case 0xee;num=7;break;
case 0xde;num=8;break;
case 0xbe;num=9;break;
case 0x7e;num=13;break;
}
newkey=1
delay(500);
while(key!=0xfe)
{
if(flag1)
if(!shu1&&num>=0&&num<=9)
display(num);
else
display(shu1);
}
return num;
}
}
key=0xfd;
if(key!=0xfd)
{
delay(500);
if(key!=0xfd)
{
switch(key)
{
case 0xed;num=4;break;
case 0xdd;num=5;break;
case 0xbd;num=6;break;
case 0x7d;num=12;break;//
newkey=1;
delay(500);
while(key!=0xfd)
{
if(flag1)
if(! shu1&&num>=0&&num<=9)
display(num);
else
display(shu1);
}
return num;
}
}
key=0xf7;
if(key! =0xfb)
{
delay(500);
if(key!=0xfb)
{
switch(key)
{
case 0xeb:num=1;break;
case 0xdb:num=2;break;
case 0xbb:num=3;break;
case 0x7b:num=11;break;
}
newkey=1;
delay(500);
while(key!=0xfb)
{if(flag1)
if(shu1&&num>=0&&num<=9)
display(num);
else
display(shu1);
}
return num;
}
}
key=0xf7;
if(key! =0xf7)
{delay(500);
if(key! =0xf7)
{
switch(key)
{
case 0xe7:num=15;break;//ON/C
case 0xd7:num=0;break;
case 0xb7:num=14;break;/
case 0x77:num=10;break;//
}
newkey=1;
delay(500);
while(key!=0xf7)
if(flag1)
if(!shul&&num>=&&num<=9)
display(num);
else
display(shu1);
}
return num;
}
}
//4
if(!OFF)
{
delay(500);
if(!OFF)
{flag1=0;}
}
return 100;
}

















分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:371857 发表于 2020-6-17 12:14 | 只看该作者
可以画画电路图
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表