怎样用C语言程序实现计算器功能,要求液晶显示
5个回答
展开全部
是
计算器
那种'8;字型液晶吗?
那种要参考LED显示的线路,哪个线路对应哪个位,然后把这些对应的值先写出来,再用C语言
逻辑
加以控制(运算).
说个
思路
:
比如数字"8"对应的位为:1111
1110(因为要显示数字8的话,7个LED管都要亮,而最后一位为
小数点
.这里只是打个比方,要去查LED对应的位.我记得小数点不是最后一位)
那么unsighed
char
number8=0xfe;(1111
1110)
以此类推,
运算的时候,输入数字,
符号
,数字,等于.
伪代码
如下:
输入数字;
int
num1=0;//第一个数
int
num2=0;//第二个数
char
oper
=
'\0';
if(input
>='0'
&&input<='9')//这个应该是ASCII码,应该是
按键
的扫描码.
单片机
里面不一样.我这只是写个思路.
{//如果输入的是0-9的数字
num1=num1*10+input;//把之前的数乘个10,再把输入的数加到个位.计算器都是这么用的.
count1++;
}
else
{
switch(input)
{
case
'+'://按了
加号
,那么第一个数输入完毕了.
oper
=
'+';//这里我也只是写个思路,不用这样等.
结束输入第一个数的循环;
break;
}
}
输入第二个数的逻辑差不多,就是最后输入完毕时候是输入符号后,要把值算出来.
switch(oper)
{
case
'+'://加法
result
=
num1+num2;
break;
case
'-'//减法
result
=
num1
-
num2;
break;
///其余类似
}
最后输出阶段:
输出那个result;
从最高位开始输出:
int
t=0;bool
first=true;
for(int
l=max;l>0;l--)//这里的max是显示部分能显示多少位
{
t
=
result/pow(10,l);
if(t!=0)
first
=false;//第一个不是0了
if(!first)
{
output(t,l);//把t输出到LED的l位上
result
-=
t*pow(10,l);//输出一位少相应的值.
}
}//这个
算法
没有考虑小数.小数自己研究研究吧.
output(int
t,int
l)//大概这样的
{
switch(t)
{
case
'1':....
//把对应
电路
的位设置为高电位,比如8
case
'8':
电路控制端=number8;//就是前面那个1111
1110,也就是0xfe.
其余数字的
组合方法
查LED
手册
.用的哪种LED就查哪种LED的手册.有的不一样
}
}
计算器
那种'8;字型液晶吗?
那种要参考LED显示的线路,哪个线路对应哪个位,然后把这些对应的值先写出来,再用C语言
逻辑
加以控制(运算).
说个
思路
:
比如数字"8"对应的位为:1111
1110(因为要显示数字8的话,7个LED管都要亮,而最后一位为
小数点
.这里只是打个比方,要去查LED对应的位.我记得小数点不是最后一位)
那么unsighed
char
number8=0xfe;(1111
1110)
以此类推,
运算的时候,输入数字,
符号
,数字,等于.
伪代码
如下:
输入数字;
int
num1=0;//第一个数
int
num2=0;//第二个数
char
oper
=
'\0';
if(input
>='0'
&&input<='9')//这个应该是ASCII码,应该是
按键
的扫描码.
单片机
里面不一样.我这只是写个思路.
{//如果输入的是0-9的数字
num1=num1*10+input;//把之前的数乘个10,再把输入的数加到个位.计算器都是这么用的.
count1++;
}
else
{
switch(input)
{
case
'+'://按了
加号
,那么第一个数输入完毕了.
oper
=
'+';//这里我也只是写个思路,不用这样等.
结束输入第一个数的循环;
break;
}
}
输入第二个数的逻辑差不多,就是最后输入完毕时候是输入符号后,要把值算出来.
switch(oper)
{
case
'+'://加法
result
=
num1+num2;
break;
case
'-'//减法
result
=
num1
-
num2;
break;
///其余类似
}
最后输出阶段:
输出那个result;
从最高位开始输出:
int
t=0;bool
first=true;
for(int
l=max;l>0;l--)//这里的max是显示部分能显示多少位
{
t
=
result/pow(10,l);
if(t!=0)
first
=false;//第一个不是0了
if(!first)
{
output(t,l);//把t输出到LED的l位上
result
-=
t*pow(10,l);//输出一位少相应的值.
}
}//这个
算法
没有考虑小数.小数自己研究研究吧.
output(int
t,int
l)//大概这样的
{
switch(t)
{
case
'1':....
//把对应
电路
的位设置为高电位,比如8
case
'8':
电路控制端=number8;//就是前面那个1111
1110,也就是0xfe.
其余数字的
组合方法
查LED
手册
.用的哪种LED就查哪种LED的手册.有的不一样
}
}
杭州励贝电液科技有限公司
2023-08-23 广告
2023-08-23 广告
设计比例控制器需要以下步骤:1. 确定控制系统的要求,例如控制对象的特性、控制范围、精度等。2. 选择合适的传感器,能够准确测量控制对象的相关参数,例如位置、速度、压力等。3. 选择合适的执行器,能够产生足够的控制作用,例如电缸、电动推杆等...
点击进入详情页
本回答由杭州励贝电液科技有限公司提供
展开全部
说个思路:比如数字"8"对应的位为:1111 1110(因为要显示数字8的话,7个LED管都要亮,而最后一位为小数点.这里只是打个比方,要去查LED对应的位.我记得小数点不是最后一位)
那么unsighed char number8=0xfe;(1111 1110)以此类推,
运算的时候,输入数字,符号,数字,等于.伪代码如下:输入数字;int num1=0;//第一个数
int num2=0;//第二个数
char oper = '\0';
if(input >='0' &&input<='9')//这个应该是ASCII码,应该是按键的扫描码.单片机里面不一样.我这只是写个思路.
{//如果输入的是0-9的数字
num1=num1*10+input;//把之前的数乘个10,再把输入的数加到个位.计算器都是这么用的.
count1++;}else{switch(input){case '+'://按了加号,那么第一个数输入完毕了.
oper = '+';//这里我也只是写个思路,不用这样等.
结束输入第一个数的循环;break;}}输入第二个数的逻辑差不多,就是最后输入完毕时候是输入符号后,要把值算出来.
switch(oper){case '+'://加法
result = num1+num2;break;case '-'//减法
result = num1 - num2;break;///其余类似}最后输出阶段:
输出那个result;
从最高位开始输出:
int t=0;bool first=true;
for(int l=max;l>0;l--)//这里的max是显示部分能显示多少位{t = result/pow(10,l);
if(t!=0) first =false;//第一个不是0了if(!first){output(t,l);//把t输出到LED的l位上
result -= t*pow(10,l);//输出一位少相应的值.}}//这个算法没有考虑小数.小数自己研究研究吧.
//把对应电路的位设置为高电位,比如8case '8':电路控制端=number8;//就是前面那个1111 1110,也就是0xfe.
其余数字的组合方法查LED手册.用的哪种LED就查哪种LED的手册.有的不一样}} 追问: 谢了,你的思路对我有帮助,我试试。我的液晶是内置128个16*8点阵汉字,型号为FYD12864-0402B的。 回答: 那点阵汉字型的LED的话,那么就要用16*8*2个bit位来控制一个字符的显示了,也就是32byte一个字。最好将所有需要的字符做成库(写出来存着),不然好难写那些二进制位哦。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这么简单 还要问啊? 给你个思路!用while 无限控制输入!内部用switch 控制+-*/%根号这些符号!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
既然是简单计算器,只需要实现加减乘除,同时每次支持两个操作数和一个操作符。
同时约定,操作数为整型,对于加减乘输出为整型,除法输入为浮点型即可。
对于输入输出和计算,提供如下代码:
#include <stdio.h>
int main()
{
int a,b,r;
float r_div;
char op;
scanf("%d",&a);//读入操作数a
op = getchar();//读入运算符号
scanf("%d",&b);//读入操作数b
switch(op)//根据运算符号,进行对应的加减乘除运算。
{
case '+':
r = a+b;//加法
break;
case '-':
r = a-b;//减法
break;
case '*':
r = a*b;//乘法
break;
case '/':
r_div = a/(float)b;//除法
break;
default:
printf("unknow operator\n");//未知操作符,属于输入错误。退出程序。
return -1;
}
//根据操作符号,输入对应的运行结果。
if(op == '/')printf("%d%c%d=%f\n", a,op,b,r_div);
else printf("%d%c%d=%d\n", a,op,b,r);
return 0;
}
以上代码就实现了最简单的计算器,可以根据需要,在其上增加其它功能,比如连续计算,或者括号支持等。
同时约定,操作数为整型,对于加减乘输出为整型,除法输入为浮点型即可。
对于输入输出和计算,提供如下代码:
#include <stdio.h>
int main()
{
int a,b,r;
float r_div;
char op;
scanf("%d",&a);//读入操作数a
op = getchar();//读入运算符号
scanf("%d",&b);//读入操作数b
switch(op)//根据运算符号,进行对应的加减乘除运算。
{
case '+':
r = a+b;//加法
break;
case '-':
r = a-b;//减法
break;
case '*':
r = a*b;//乘法
break;
case '/':
r_div = a/(float)b;//除法
break;
default:
printf("unknow operator\n");//未知操作符,属于输入错误。退出程序。
return -1;
}
//根据操作符号,输入对应的运行结果。
if(op == '/')printf("%d%c%d=%f\n", a,op,b,r_div);
else printf("%d%c%d=%d\n", a,op,b,r);
return 0;
}
以上代码就实现了最简单的计算器,可以根据需要,在其上增加其它功能,比如连续计算,或者括号支持等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你需要学习Qt,然后里面会有一个LCDNumber类,会很方便的解决你的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询