/*//
// _ooOoo_
// o8888888o
// 88" . "88
// (| -_- |)
// O\ = /O
// ____/`---'\____
// .' \\| |// `.
// / \\||| : |||// \
// / _||||| -:- |||||- \
// | | \\\ - /// | |
// | \_| ''\---/'' | |
// \ .-\__ `-` ___/-. /
// ___`. .' /--.--\ `. . __
// ."" '< `.___\_<|>_/___.' >'"".
// | | : `- \`.;`\ _ /`;.`/ - ` : | |
// \ \ `-. \_ __\ /__ _/ .-` / /
//======`-.____`-.___\_____/___.-`____.-'======
// `=---='
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// 佛祖保佑 永无BUG */
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit e=P2^3; //端口定义
sbit rs=P2^4;
sbit rw=P2^0;
sbit busy=P0^7;
sbit ans=P1^0;
//sbit led=P1^7;
char i,j,temp,num,num_1;
long a,b,c,ans1=0,ans2,ans3;
uchar flag,fuhao;
uchar x=0;
uchar code table[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};
uchar code table1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30};
void delay(uchar z) //延时函数
{
uchar y;
for(z;z>0;z--)
for(y=0;y<110;y++);
}
void check() //檢測端口是否繁忙
{
do{
P0=0xFF;
rs=0;
rw=1;
e=0;
delay(1);
e=1;
}while(busy==1);
}
void write_com(uchar com)//寫入地址
{
P0=com;
rs=0;
rw=0;
e=0;
check();
e=1;
}
void write_date(uchar date) //写入数据
{
P0=date;
rs=1;
rw=0;
e=0;
check();
e=1;
}
void init() //初始化函数
{
num=-1;
e=1;
write_com(0X01); //液晶端口初始化
delay(1);
write_com(0x38);
delay(1);
write_com(0x0c);
delay(1);
write_com(0x06);
delay(1);
write_com(0x80);
delay(1);
write_com(0x01);
delay(1);
num_1=0;
i=0;
j=0;
a=0;
b=0;
c=0; //和,差,积,商
flag=0;
fuhao=0; // + - * /
}
void keyscan() //按键扫描
{
if(ans==0)
{
delay(5);
if(ans==0)
{
a=ans2;
ans3=ans2;
write_com(0x01);
delay(200);
write_com(0x80+0x4f);//?????,???????????????
write_com(0x04); //?????????,???????,??????
while(ans2!=0)
{
write_date(0x30+ans2%10);
ans2=ans2/10;
}
ans1=1;
//write_date(0x30+x); //??"="
}
while(!ans);
}
/*------矩阵按键扫描-------*/
P3=0xfe;//扫描第一行按键 1111 1110 P37-P30 P30口为0
if(P3!=0xfe) //
{
delay(20);
if(P3!=0xfe)//消抖
{
temp=P3&0xf0; // 检测P3口 0xf0 1111 0000
switch(temp)
{
case 0xe0:num=0; //第一列 1110 0000 P37-P30
break;
case 0xd0:num=1; //1101 0000
break;
case 0xb0:num=2;
break;
case 0x70:num=3;
break;
}
}
while(P3!=0xfe);
if(num==0||num==1||num==2)
{
if(j!=0)
{
write_com(0x01); //LCD清屏函数
j=0;
}
if(flag==0)
{
a=a*10+table[num]; //
}
else
{
b=b*10+table[num];
}
}
else
{
if(ans1==0)
{
flag=1;
fuhao=4;
ans1=0;
}
if(ans1==1)
{
write_com(0x01);
if(ans3<10)
write_date(0x30+ans3%10);
if(ans3>10)
{
write_date(0x30+ans3/10);
write_date(0x30+ans3%10);
}
flag=1;
fuhao=4;
ans1=0;
j=0;
}
}
i=table1[num];
write_date(0x30+i);
}
P3=0xfd; // 1111 1101
if(P3!=0xfd)
{
delay(5);
if(P3!=0xfd)
{
temp=P3&0xf0;
switch(temp)
{
case 0xe0:num=4;
break;
case 0xd0:num=5;
break;
case 0xb0:num=6;
break;
case 0x70:num=7;
break;
}
}
while(P3!=0xfd);
if(num==4||num==5||num==6&&num!=7)
{
if(j!=0)
{
write_com(0x01);
j=0;
}
if(flag==0)
{
a=a*10+table[num];
}
else
{
b=b*10+table[num];
}
}
else
{
if(ans1==0)
{
flag=1;
fuhao=3;
ans1=0;
}
if(ans1==1)
{
write_com(0x01);
if(ans3<10)
write_date(0x30+ans3%10);
if(ans3>10)
{
write_date(0x30+ans3/10);
write_date(0x30+ans3%10);
}
flag=1;
fuhao=3;
ans1=0;
j=0;
}
}
i=table1[num];
write_date(0x30+i);
}
P3=0xfb;
if(P3!=0xfb)
{
delay(5);
if(P3!=0xfb)
{
temp=P3&0xf0;
switch(temp)
{
case 0xe0:num=8;
break;
case 0xd0:num=9;
break;
case 0xb0:num=10;
break;
case 0x70:num=11;
break;
}
}
while(P3!=0xfb);
if(num==8||num==9||num==10)//??????'1','2'?'3'
{
if(j!=0)
{
write_com(0x01);
j=0;
}
if(flag==0)//???????
{
a=a*10+table[num];
}
else//???????
{
b=b*10+table[num];
}
}
else if(num==11)//??????'-'
{
if(ans1==0)
{
flag=1;
fuhao=2;
ans1=0;
}
if(ans1==1)
{
write_com(0x01);
if(ans3<10)
write_date(0x30+ans3%10);
if(ans3>10)
{
write_date(0x30+ans3/10);
write_date(0x30+ans3%10);
}
flag=1;
fuhao=2;
ans1=0;
j=0;
}
}
i=table1[num];
write_date(0x30+i);
}
P3=0xf7;
if(P3!=0xf7)
{
delay(5);
if(P3!=0xf7)
{
temp=P3&0xf0;
switch(temp)
{
case 0xe0:num=12;
break;
case 0xd0:num=13;
break;
case 0xb0:num=14;
break;
case 0x70:num=15;
break;
}
}
while(P3!=0xf7);
switch(num)
{
case 12:{
write_com(0x01);
a=0;
b=0;
flag=0;
fuhao=0;
}
break;
case 13:{ //????"0"
if(flag==0)//
{
a=a*10;
write_date(0x30);
}
else if(flag==1)//???????
{
b=b*10;
write_date(0x30);
}
}
break;
case 14:{ //等于运算
j=1;
if(fuhao==1)
{
write_com(0x80+0x4f);//
write_com(0x04); //
c=a+b; //加运算
ans2=c;
while(c!=0)
{
write_date(0x30+c%10);
c=c/10;
}
write_date(0x3d); //??"="
a=0;b=0;flag=0;fuhao=0;
}
else if(fuhao==2)
{
write_com(0x80+0x4f);//
write_com(0x04); //
if(a-b>0)
{
c=a-b;//减运算
ans2=c;
}
else
{
c=b-a;
ans2=c;
}
while(c!=0)
{
write_date(0x30+c%10);
c=c/10;
}
if(a-b<0)
write_date(0x2d);
write_date(0x3d); //??"="
a=0;b=0;flag=0;fuhao=0;
}
else if(fuhao==3)
{
write_com(0x80+0x4f);
write_com(0x04);
c=a*b; //乘运算
ans2=c;
while(c!=0)
{
write_date(0x30+c%10);
c=c/10;
}
write_date(0x3d);
a=0;b=0;flag=0;fuhao=0;
}
else if(fuhao==4)
{
write_com(0x80+0x4f);
write_com(0x04);
i=0;
c=(long)((float)a/b);
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
包含程序和仿真 1、利用键盘及LCD1602作为计算器的输入及显示模块; 2、能进行加、减、乘、除的基本运算;按键有0~9,“+-*/=”。 3、有清零“CR"按键; 4、有记忆功能键,按下该键,可以直接显示并运用存储数据进行计算。
资源推荐
资源详情
资源评论
收起资源包目录
基于单片机的计算器.rar (57个子文件)
基于单片机的计算器
Last Loaded 仿真.DBK 94KB
Last Loaded 仿真.pdsbak 17KB
程序
2.rar 33KB
Code_Project
main.OBJ 16KB
main.c 6KB
计算器.uvopt 54KB
计算器 13KB
计算器_uvopt.bak 54KB
计算器.plg 205B
main.LST 17KB
计算器.lnp 27B
计算器.M51 18KB
计算器_uvproj.bak 0B
计算器.hex 8KB
计算器.uvproj 13KB
2
Code_Project
main.OBJ 21KB
main.c 9KB
计算器.uvopt 5KB
计算器 17KB
计算器_uvopt.bak 55KB
计算器.plg 207B
main.LST 27KB
计算器.lnp 27B
计算器.M51 23KB
计算器_uvproj.bak 0B
计算器.uvgui.稚于最初 安于情长 70KB
计算器.hex 9KB
计算器.uvproj 14KB
3.rar 236KB
3
计算器设计
Code_Project2
main.OBJ 19KB
main.c 8KB
计算器.uvopt 54KB
计算器 15KB
计算器_uvopt.bak 55KB
计算器.plg 219B
main.LST 24KB
计算器.lnp 27B
计算器.M51 21KB
计算器_uvproj.bak 0B
计算器.hex 8KB
计算器.uvproj 13KB
Circuit_Project
Calculator.pdsprj.SC-201803112358.Administrator.workspace 2KB
Calculator.pdsprj.hu-PC.hu.workspace 877B
Calculator.pdsprj.JCPC-20170619DI.Administrator.workspace 1KB
Calculator.pdsprj.HYH-PC.HYH.workspace 328B
Calculator.pdsprj 23KB
Calculator.pdsprj.JIAODINGC2D3.jiaoding.workspace 2KB
Backup Of Calculator.pdsbak 23KB
Last Loaded Calculator.pdsbak 23KB
.DS_Store 6KB
Thumbs.db 163KB
Code_Project1.rar 33KB
Code_Project.rar 33KB
仿真.DSN 95KB
仿真.PWI 768B
仿真.pdsprj.LAPTOP-OHTQA5R4.86157.workspace 328B
仿真.pdsprj.LAPTOP-OHTQA5R4.稚于最初 安于情长.workspace 873B
共 57 条
- 1
森旺电子
- 粉丝: 7947
- 资源: 541
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (2025)行政单位会计制度知识竞赛题(含答案).docx
- (2025)汉字听写大会竞赛题库(含答案).docx
- (2025)行政诉讼法知识竞赛必刷题库及答案.docx
- (2025)红十字初级急救员证考试题及答案.docx
- (2025)会计电算化考试试题(含答案).docx
- (2025)会计基础考试题库及答案(带答案解析).docx
- (2025)机电标准化考试试题(含答案).docx
- (2025)基本公共卫生服务项目考试题库及答案.docx
- (2025)机关事业单位《工人技术职业道德》等级考核题库及答案.docx
- (2025)计算机基础理论信息安全基本知识试题及答案.docx
- (2025)计算机二级考试全真试题库及答案(通用版).docx
- (2025)计算机网络技术考试题及答案.docx
- (2025)见证取样员考试试题(带答案).docx
- (2025)监理工程师《案例分析》考试题库及答案.docx
- (2025)见证取样员考试题库及答案.docx
- 英伟达半导体科技(上海)有限公司创投信息
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页