/*-----------------------------------------------
名称:液晶显示计算器
论坛:www.doflye.net
编写:shifang
日期:2009.5
修改:无
内容:由于单片机浮点数限制,可以计算6位数字运算,大于这个长度,用科学计数法表示
小数位精度后6位,大于6位按四舍五入
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include"1602.h"
#include"delay.h"
#include"keyboard.h"
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
{
unsigned char num,i,sign;
unsigned char temp[16]; //最大输入16个
bit firstflag;
float a=0,b=0;
unsigned char s;
LCD_Init(); //初始化液晶屏
DelayMs(10); //延时用于稳定,可以去掉
LCD_Clear(); //清屏
LCD_Write_String(0,0,"www.doflye.net"); //写入第一行信息,主循环中不再更改此信息,所以在while之前写入
LCD_Write_String(0,1,"www.findbest.net"); //写入第二行信息,提示输入密码
for(s=0;s<25;s++)//延时5s
DelayMs(200);
LCD_Clear();
LCD_Write_String(0,0," LCD calculator"); //写入第一行信息,主循环中不再更改此信息,所以在while之前写入
LCD_Write_String(0,1," Fun: + - x / "); //写入第二行信息,提示输入密码
while (1) //主循环
{
num=KeyPro(); //扫描键盘
if(num!=0xff) //如果扫描是按键有效值则进行处理
{
if(i==0) //输入是第一个字符的时候需要把改行清空,方便观看
LCD_Clear();
if(('+'==num)|| (i==16) || ('-'==num) || ('x'==num)|| ('/'==num) || ('='==num))//输入数字最大值16,输入符号表示输入结束
{
i=0; //计数器复位
if(firstflag==0) //如果是输入的第一个数据,赋值给a,并把标志位置1,到下一个数据输入时可以跳转赋值给b
{
sscanf(temp,"%f",&a);
firstflag=1;
}
else
sscanf(temp,"%f",&b);
for(s=0;s<16;s++) //赋值完成后把缓冲区清零,防止下次输入影响结果
temp[s]=0;
LCD_Write_Char(0,1,num);
///////////////////////
if(num!='=') //判断当前符号位并做相应处理
sign=num; //如果不是等号记下标志位
else
{
firstflag=0; //检测到输入=号,判断上次读入的符合
switch(sign)
{
case '+':a=a+b;
break;
case '-':a=a-b;
break;
case 'x':a=a*b;
break;
case '/':a=a/b;
break;
default:break;
}
sprintf(temp,"%g",a); //输出浮点型,无用的0不输出
LCD_Write_String(1,1,temp);//显示到液晶屏
sign=0;a=b=0; //用完后所有数据清零
for(s=0;s<16;s++)
temp[s]=0;
}
}
else if(i<16)
{
if((1==i)&& (temp[0]=='0') )//如果第一个字符是0,判读第二个字符
{
if(num=='.') //如果是小数点则正常输入,光标位置加1
{
temp[1]='.';
LCD_Write_Char(1,0,num);//输出数据
i++;
} //这里没有判断连续按小数点,如0.0.0
else
{
temp[0]=num; //如果是1-9数字,说明0没有用,则直接替换第一位0
LCD_Write_Char(0,0,num);//输出数据
}
}
else
{
temp[i]=num;
LCD_Write_Char(i,0,num);//输出数据
i++; //输入数值累加
}
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
144-1602液晶显示的计算器(51单片机C语言实例Proteus仿真和代码).rar
共23个文件
obj:4个
c:4个
lst:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 30 浏览量
2023-02-08
13:05:20
上传
评论
收藏 41KB RAR 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
144-1602液晶显示的计算器(51单片机C语言实例Proteus仿真和代码).rar (23个子文件)
144-1602液晶显示的计算器
1602液晶显示计算器.Uv2 2KB
obj
1602.lst 6KB
1602液晶显示计算器.plg 193B
keyboard.lst 4KB
delay.lst 2KB
keyboard.obj 3KB
main.lst 6KB
delay.obj 1KB
1602.obj 6KB
1602液晶显示计算器 20KB
1602液晶显示计算器.hex 14KB
main.obj 7KB
1602液晶显示计算器.m51 23KB
1602.c 3KB
keyboard.h 629B
1602液晶显示计算器.plg 860B
1602液晶显示计算器.Opt 2KB
delay.h 654B
keyboard.c 2KB
delay.c 738B
1602液晶显示计算器_Opt.Bak 2KB
1602.h 769B
main.c 3KB
共 23 条
- 1
资源评论
大富大贵7
- 粉丝: 393
- 资源: 8868
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功