网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月18日漏签0天
单片机吧 关注:211,634贴子:1,045,954
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 0回复贴,共1页
<<返回单片机吧
>0< 加载中...

51单片机简易计算器,为什么不会用的。

  • 只看楼主
  • 收藏

  • 回复
  • pnlxyu
  • 下士
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<reg52.h>
#include"delay.h"
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar n,f,m,stop;
long k1,k2,k; //满足数据大小
uchar yun;
uchar a[6] = {0,0,0,0,0,0};//定义初始数码管显示
uchar code table[]={ //数码管花样数组
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x89,0x86,
0xc7,0xc7,0xc0,0xff};
long jia(long x,long y) //运算加
{
long z;
z = x + y;
if (z < 999999)
return z;
else
return 0;
}
long jian(long x, long y) //运算减
{
long z;
if (x> y)
z = x - y;
else
z = y - x;
return z;
}
long cheng(long x, long y) //运算乘
{
long z;
z = x * y;
if(z < 999999)
return z;
else
return 0;
}
long chu(long x,long y) //运算除
{
long z;
if(x > y)
z = x / y;
else
z = y / x;
return z;
}
void quwei(long x,uchar a[]) //取位函数
{
uchar i;
for(i=0;i<=5;i++)
{
a[i] = x % 10; //取出各位
x = x / 10;
}
}
void display(uchar a[]) //动态扫描显示 函数
{
uchar i,j2;
j2 = 0xdf;
for(i = 0; i<= 5; i++)
{
P2 = j2;
P0 = table[a[i]];
delay(1);
j2 = _cror_(j2,1);
}
}
uchar keyscan()
{
uchar num,temp;
P1=0xfe; //扫描第一行
temp=P1;
temp=temp&0xf0; // 读取P1按键数据
while(temp!=0xf0)
{
delay(5);
temp=P1; //保存按键值
temp=temp&0xf0; // 读取P1按键数据
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:num=10;
break;
case 0xde:num=9;
break;
case 0xbe:num=8;
break;
case 0x7e:num=7;
break;
}
while(temp!=0xf0)
{
temp=P1; //保存按键值
temp=temp&0xf0; // 读取P1按键数据
}
}
}
P1=0xfd; //扫描第二行
temp=P1;
temp=temp&0xf0; // 读取P1按键数据
while(temp!=0xf0)
{
delay(5);
temp=P1; //保存按键值
temp=temp&0xf0; // 读取P1按键数据
while(temp!=0xf0)
{
temp=P1; //保存按键值
switch(temp)
{
case 0xed:num=11;
break;
case 0xdd:num=6;
break;
case 0xbd:num=5;
break;
case 0x7d:num=4;
break;
}
while(temp!=0xf0)
{
temp=P1; //保存按键值
temp=temp&0xf0; // 读取P1按键数据
}
}
}
P1=0xfb; //扫描第三行
temp=P1;
temp=temp&0xf0; // 读取P1按键数据
while(temp!=0xf0)
{
delay(5);
temp=P1; //保存按键值
temp=temp&0xf0; // 读取P1按键数据
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xeb:num=12;
break;
case 0xdb:num=3;
break;
case 0xbb:num=2;
break;
case 0x7b:num=1;
break;
}
while(temp!=0xf0)
{
temp=P1; //保存按键值
temp=temp&0xf0; // 读取P1按键数据
}
}
}
P1=0xf7; //扫描第四行
temp=P1;
temp=temp&0xf0; // 读取P1按键数据
while(temp!=0xf0)
{
delay(5);
temp=P1; //保存按键值
temp=temp&0xf0; // 读取P1按键数据
while(temp!=0xf0)
{
temp=P1; //保存按键值
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=0;
break;
}
while(temp!=0xf0)
{
temp=P1; //保存按键值
temp=temp&0xf0; // 读取P1按键数据
}
}
}
return num;
}
void main()
{
n = 0; //初始化
k1 = 0;
k2 = 0;
k = 0;
yun = 0;
f = 0;
while(1)
{
if(f == 0)
{
switch(keyscan()) //读取按键号
{
case 0: m=0;f=1;break;//0
case 1: m=1;f=1;break;//1
case 2: m=2;f=1;break;//2
case 3: m=3;f=1;break;//3
case 4: m=4;f=1;break;//4
case 5: m=5;f=1;break;//5
case 6: m=6;f=1;break;//6
case 7: m=7;f=1;break;//7
case 8: m=8;f=1;break;//8
case 9: m=9;f=1;break;//9
case 10:m=10;f=1;yun=1;break; //加
case 11:m=11;f=1;yun=2;break; //减
case 12:m=12;f=1;yun=3;break; //乘
case 13:m=13;f=1;yun=4;break; //除
case 14:m=14;f=2;break; //等于
case 15:m=15;k1=0;k2=0;f=1;k=0;break;//清除
}
if(f == 1) //有按键按下
{
if(m < 10) //按的是数字键
{
n++;
if(n == 1) //只有个位
k1 = m;
else if(n > 1) //多位时
k1 = m * 10 + k1;
quwei(k1,a); //取出各位的数值
}
else //按的是功能键
{
k2 = k1; //将第一个接收的值储存
k1 = 0; //清零 继续接收数字
n = 0;
}
f = 0;
}
}
if(f == 2)
{
switch(yun) //读运算符
{
case 1: k = jia(k1,k2);break; //加
case 2: k = jian(k1,k2);break; //减
case 3: k = cheng(k1,k2);break; //乘
case 4: k = chu(k1,k2);break; //除
}
quwei(k,a); //取出结果各位的值
}
display(a); //动态扫描显示
}
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回单片机吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示