单片机C语言简易计算器
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/***码选***/
unsigned char code LED_CODES[]=
{0xC0,0xF9,0xA4,0xB0,0x99, //0-4
92,0x82,0xF8,0x80,0x90, //5-9
0x86,0xAF,0xFF,0x7F,0xBF,}; //E,r,空格,.,-
{
a[i]=dsp[i+1];
}
dsp[1]=0; //清零
for(i=2;i<9;i++)
dsp[i]=12;
c=1; //已输入a
/***goto跳转标志***/
goto LR;
}
else if(c==1)
{
for(i=0;i<8;i++) //将第二个数存入b[8]
{
b[i]=dsp[i+1];
按键扫描录入函数
计算器加减乘除四则运算
4.
1.框图设计
显示
录入
5.
(
(
元件名称
型号
数量
用途
单片机
AT89C51
1
控制核心
电阻
10kΩ
4
按键电路
数码管
8位共阳极
1
显示电路
按键
16
按键电路
6.
(
主函数
显示函数
按键函数
(
#include<reg51.H>
/***按键程序***/
char keyscan();
dsp[1]=0;
for(i=2;i<9;i++)
dsp[i]=12;
c=0;
}
}
}
while(dsp[0]==14); //数字输入未完成即按下C,重新等待输入
do
{
if(c==0) //没有数字输入
{
k=dsp[0]; //存计算符(循环内已排除C、=、数字)
for(i=0;i<8;i++) //将第一个数存入a[8]
2.
基于AT89C51单片机的简易计算器,设计要求如下:
(1)计算器至少能正常显示8位数。
(2)开机时,显示“0”
(3)计算器能对整数进行简单的加减乘除四则运算,在做除法时能自动舍去小数部分
(4)运算结果超过可显示的位数时能进行出错提示。
3.
项目组成员
完成课程设计的内容
主函数设计
利用中断持续间时显示
{
c=0;
}
if(dsp[0]==0&&dsp[1]==0&&dsp[2]==12) //个位为0且十位为空时按下0,按键无效,跳回LR等待正确输入
{
/***goto跳转标志***/
goto LR;
}
else if(dsp[0]>9) break; //有操作符按下,跳出数字录入循环
else
{
for(j=i;j>0;j--)
{
dsp[1]=0;
for(i=2;i<9;i++)
dsp[i]=12;
c=0;
}
}
while((dsp[0]==15)&&(c==0)); //等号被按下,等待新的操作符(仅对第一个数字有效)
}
else if(dsp[0]==14) //按下C清零
{
dsp[1]=0;
for(i=2;i<9;i++)
dsp[j]=dsp[j-1]; //移位,以正确显示数字
}
}
if(i==9) //判断是否输入8个有效数字,是则等待操作符,否则直接判断操作符
{
do //使用do while无论是否第一个数都取一次操作符
{
dsp[0]=keyscan(); //获取操作符号
if(dsp[0]==14||dsp[0]<10) //按下C或者第9位数字清零
}
}
}
while((dsp[0]==15)&&(c<2)); //直到ab输入完成且按下等号
calculate(k,a,b); //进行最后计算
/***goto跳转标志***/
goto LR; //跳回LR,等待新一轮计算
dsp[i]=12;
c=0;
}
while(dsp[0]==15&&c==0) //未输满8位且是第一个数字即按下等号,等待非等号操作符
{
dsp[0]=keyscan(); //获取操作符号
if(dsp[0]==14||dsp[0]<10) //按下C或者数字都进行清零,重新输入a
{
dsp[0]=14; //将dsp[0]置为14,防止因数字清零未能拦截
}
c=2; //已输入b
if(dsp[0]!=15) //b输完后操作符不是等号
{
calculate(k,a,b);
for(i=0;i<8;i++) //将计算结果存入a[8],a值更新
{
a[i]=dsp[i+1];
}
k=dsp[0]; //更新计算符
c=1;
/***goto跳转标志***/
goto LR;
LR:do
{
for(i=1;i<9;i++) //数字录入循环
{
dsp[0]=keyscan();
if(c==2&&dsp[0]<10) //此段代码验证是否有旧的计算结果在显示,且不再参与新计算
{
dsp[1]=dsp[0];
for(j=2;j<9;j++)
dsp[j]=12;
c=0;
}
else if(c==2&&dsp[0]>9) //旧的计算结果将参与新的计算,作为第一个数
课程设计报告
课程名称单片机原理及应用
设计题目简易计算器设计
专业班级
姓名
学号
1.
中国古代最早采用的一种计算工具叫算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可以随身携带。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘除,乘方,开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。
/***main函数***/
void main(void)
{
char i,j,k,c;
char a[8],b[8];
/***定时1ms***/
TMOD=0;
//TL0=-(1000/256);
//TH0=-(1000%256);
EA = 1; //总中断开关
ET0 = 1; //开中断
TR0 = 1; //启用计数器0
/***显示程序***/
void display();
char dsp[9]={0,0,12,12,12,12,12,12,12}; //初始化显示数组
/***计算程序***/
void calculate(char k,char c1[8],char c2[8]);
/***片选***/
unsigned char code Select[]=