文档视界 最新最全的文档下载
当前位置:文档视界 › 单片机简易计算器程序代码

单片机简易计算器程序代码

单片机简易计算器程序代码
单片机简易计算器程序代码

#include

#include

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long

sbit lcden=P2^2; //定义引脚E 使能

sbit rs=P2^0;

sbit rw=P2^1;

sbit shangdang=P2^7;

char i,temp,num,g=0,f=0,gz=0,ad=0,bd=0,eq=0,qz,k; //gz为跟踪地址,ad,bd分别表示a,b是否按小数点,eq表示是否入过等号

double afd=0,bfd=0; //afd,bfd为小数点后个数

float a,b,daan;long c1,c2; //a,第一个数b,第二个数c,得数daan答案

float dzh;

uchar flag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号

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, //按键标值0x2f-0x30是将字符转化为数字,和后面的0x30+i抵消,得i值

4,5,6,0x2a-0x30,

1,2,3,0x2d-0x30,

0x01-0x30,0,0x3d-0x30,0x2b-0x30 //0x01是清屏命令

};

void delay(uint z) // 延迟函数

{

while(z--);

}

void write_com(uchar com) // 写指令函数

{

delay(1000);

lcden=0;

rs=0;

rw=0;

P0=com; //com指令付给P0口

lcden=1;

delay(20);

lcden=0;

}

void write_date(uchar date) // 写数据函数

{

delay(1000);

lcden=0;

rs=1;

rw=0;

lcden=1;

P0=date;

lcden=0;

}

void init() //初始化

{

write_com(0x38); //功能设置命令:8位,2行DDRAM的地址

delay(200) ;

write_com(0x0e); //显示开,光标开,不闪烁

delay(200) ;

write_com(0x06); //增量方式不移位

delay(200) ;

write_com(0x80); //设置访问地址

delay(200) ;

}

void xianshi(char i,char h,float daan) //c为得数i从最后一位跟踪,H为精确到小数点后几位{ qz=0; k=0;

c1=(long)daan;

c2=(long)((daan-c1)*10000); //1000000为小数点后6位尝试用pow函数答案不理想

if(c2%10>=5)

{c2=(c2/10)+1;

}

else

{c2=c2/10;}

while(c2!=0)

{

k=c2%10;

if(i

{qz=1;}

if(qz==1)//如果小数点后不为0输出开始或者到整数

{ write_date(0x30+k); }

i++; c2=c2/10;

if(i==h&&qz==1) //设置小数点位数

write_date(0x2e);

}

while(i

{ write_date(0x30);i++;if(i==h) {write_date(0x2e);}

} ///补位显示

if(c1==0)

{write_date(0x30);}

while(c1!=0)

{

write_date(0x30+c1%10) ;

c1=c1/10;

}

}

void gg(char gz)

{write_com(0xc0);write_date(0xfe);write_com(0x80+gz);}

void keyscan(void)// 键盘扫描程序

{

if(shangdang==0)//上档键

{delay(100);

if(shangdang==0)

{ while(shangdang==0);

g=!g; //g表示那个档位g=0,下档g=1,上档

if(g==1)

{ write_com(0xc0);write_date(0x5e); write_com(0x80+gz);}

if(g==0)

{write_com(0xc0);write_date(0xfe);write_com(0x80+gz);}

shangdang=1;

}}

P1=0xfe; //第一行,7,8,9,/或sin

if(P1!=0xfe)

{

delay(20);//20ms

if(P1!=0xfe)

{

temp=P1&0xf0;

switch(temp)

{

case 0xe0:num=0;

break;

case 0xd0:num=1;

break;

case 0xb0:num=2;

break;

case 0x70:num=3;

break;

}

}

while(P1!=0xfe);

if(num==0||num==1||num==2)//如果按下的是'7','8'或'9'

{

if(flag==0)//没有按过符号键

{ if(ad==1)

afd++;

a=a*10+table[num]; //a的初值为'0',结果为输入a值

}

else //如果按过符号键

{ if(bd==1)

bfd++;

b=b*10+table[num]; //b的初值为'0' ,结果为输入b值

}

}

else //如果按下的是'/' 或者SIN

{

flag=1;

if(g==0)

{ fuhao=4; i=table1[num];

if(eq==0){gz++; write_date(0x30+i);}

else

{write_com(0x01);write_date(0x41) ;write_date(0x4e);write_date(0x53);write_date(0x30+i);a=da an;gz=gz+4; }

}//4表示除号已按

if(g==1)

{g=0;gg(gz);fuhao=5;if(eq==0){gz=gz+3;write_date(0x53);write_date(0x49);write_date(0x4 e);}

else

{write_com(0x01);write_date(0x53);write_date(0x49);write_date(0x4e);write_date(0x41) ;write_ date(0x4e);write_date(0x53);b=daan;gz=gz+6;}

} //5表示SIN已按

}

if(num==0||num==1||num==2) //显示开头

{ gz++;

i=table1[num];

write_date(0x30+i);} }

P1=0xfd; //第二行4,5,6,7,* 或cos

if(P1!=0xfd)

{

delay(5);

if(P1!=0xfd)

{

temp=P1&0xf0;

switch(temp)

{

case 0xe0:num=4;

break;

case 0xd0:num=5;

break;

case 0xb0:num=6;

break;

case 0x70:num=7;

break;

}

}

while(P1!=0xfd);

if(num==4||num==5||num==6)//如果按下的是'4','5'或'6'

{

if(flag==0)//没有按过符号键

{ if(ad==1)

afd++;

a=a*10+table[num]; //输入a值

}

else//如果按过符号键

{ if(bd==1)

bfd++;

b=b*10+table[num]; //输入b值

}

}

else//如果按下的是'*'

{

flag=1;

if(g==0)

{fuhao=3;i=table1[num];if(eq==0){gz++; write_date(0x30+i);}

else

{write_com(0x01);write_date(0x41) ;write_date(0x4e);write_date(0x53);write_date(0x30+i);a=da an;gz=gz+4;}

}//3表示乘号已按

if(g==1)

{g=0;gg(gz);fuhao=6;if(eq==0){gz=gz+3;write_date(0x43);write_date(0x4f);write_date(0x53);}

else{write_com(0x01);write_date(0x43);write_date(0x4f);write_date(0x53);write_date(0x4e);writ e_date(0x41) ;write_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}

}//cos已按

}

if(num==4||num==5||num==6) //显示开头

{gz++;i=table1[num];

write_date(0x30+i);} }

P1=0xfb; //第三行1,2,3,- 或tan

if(P1!=0xfb)

{

delay(5);

if(P1!=0xfb)

{

temp=P1&0xf0;

switch(temp)

{

case 0xe0:num=8;

break;

case 0xd0:num=9;

break;

case 0xb0:num=10;

break;

case 0x70:num=11;

break;

}

}

while(P1!=0xfb);

if(num==8||num==9||num==10)//如果按下的是'1','2'或'3'

{

if(flag==0)//没有按过符号键

{ if(ad==1)

afd++;

a=a*10+table[num];

}

else//如果按过符号键

{ if(bd==1)

bfd++;

b=b*10+table[num];

}

}

else if(num==11)//如果按下的是'-' 或者'tan'

{

flag=1;

if(g==0)

{i=table1[num];fuhao=2;if(eq==0){ gz++;write_date(0x30+i);}

else{write_com(0x01);write_date(0x41) ;write_date(0x4e);write_date(0x53);write_date(0x30+i);a =daan;gz=gz+4;}

}//2表示减已按

if(g==1)

{g=0;gg(gz);fuhao=7;if(eq==0){write_date(0x54);write_date(0x41);write_date(0x4e);gz=gz+3;} else{write_com(0x01);write_date(0x54);write_date(0x41);write_date(0x4e);write_date(0x41) ;wri

te_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}

} //tan已按

}

if(num==8||num==9||num==10) //显示开头

{gz++;i=table1[num];

write_date(0x30+i);}

}

P1=0xf7;//第四行CE或根号,0,=,+或平方

if(P1!=0xf7)

{

delay(5);

if(P1!=0xf7)

{

temp=P1&0xf0;

switch(temp)

{

case 0xe0:num=12;

break;

case 0xd0:num=13;

break;

case 0xb0:num=14;

break;

case 0x70:num=15;

break;

}

}

while(P1!=0xf7);

switch(num)

{

case 12: //显示按下的是"清零" 或者根号

if(g==0)

{

write_com(0x01);

a=0;

b=0;

flag=0;

fuhao=0;

eq=0;

ad=0;bd=0;afd=0;bfd=0;

gz=0;

}

else if(g==1) //根号

{g=0;gg(gz);fuhao=9;flag=1; if(eq==0){gz++;write_date(0xe8);} else

{write_com(0x01);write_date(0xe8);write_date(0x41) ;write_date(0x4e);write_date(0x53);b=daan ;gz=gz+4;

}

}

break;

case 13: //按下的是"0" 或者小数点

gz++;

if(g==0) //0

{

if(flag==0)//没有按过符号键

{ if(ad==1)

afd++;

a=a*10;

write_date(0x30);

}

else if(flag==1)//如果按过符号键

{ if(bd==1)

bfd++;

b=b*10;

write_date(0x30);

}

}

if(g==1) //小数点

{ write_date(0x2e);

if(flag==0)

{ad=1;}

if(flag==1)

{bd=1;}

g=0;gg(gz);

}

break;

case 14: //按下= 计算程序

{ eq=1;

write_com(0xcf);//按下等于键,光标前进至第二行最后一个显示处

write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格

i=0; if(ad==1) {a=a/pow(10,afd);} ////////////////浮点计算X.***

if(bd==1){b=b/pow(10,bfd);}

if(fuhao==1) //符号1 +

{ daan=a+b;

if(daan<0)

{daan=(-1)*daan;}

xianshi(i,3,daan);

if(a+b<0)

{daan=(-1)*daan;write_date(0x2d);}

write_date(0x3d);} //再写"="

else if (fuhao==8) //平方上档1号

{ daan= a*a;

xianshi(i,3,daan);

write_date(0x3d);} //再写"="

//////////////////---- tan 计算//////////////////////////////

else if(fuhao==2) //- 下档键2号

{

if(a-b>0)

{ daan=a-b; }

else

{daan=b-a; }

xianshi(i,3,daan);

if(a-b<0)

{daan=(-1)*daan;write_date(0x2d);}

write_date(0x3d); //再写"="

}

else if(fuhao==7) // tan 上档2号位置

{ dzh=(float)b*3.141592654/180;

daan=tan(dzh);

if(daan<0)

{daan=(-1)*daan;f=1; }

xianshi(i,3,daan);

if(f==0)

write_date(0x3d);

else

{ daan=(-1)*daan;write_date(0x2d);write_date(0x3d); }

}

/////////////////* cos 计算///////////////////////////////

else if(fuhao==3) //'* '下档3号位置

{daan=a*b;

if(daan<0)

{daan=(-1)*daan;}

xianshi(i,3,daan);

if(a*b<0)

{daan=(-1)*daan;write_date(0x2d);}

write_date(0x3d);

}

else if(fuhao==6) //'cos' 上档3号位置

{

dzh=(float)b*3.141592654/180;

daan=cos(dzh);

if(daan<0)

{daan=(-1)*daan;f=1;}

xianshi(i,3,daan);

if(f==0)

write_date(0x3d);

else

{daan=(-1)*daan; write_date(0x2d);write_date(0x3d); }

}

///////////////////////// / sin 计算///////////////////

else if(fuhao==4) //'/' 下档4号位置

{if(b!=0)

{daan=a/b;

if(daan<0)

{daan=(-1)*daan;}

xianshi(i,3,daan);

if(a/b<0)

{daan=(-1)*daan;write_date(0x2d);}}

else{write_date(0x21);}

write_date(0x3d);

}

else if(fuhao==5) //'sin' 上档4号位置{

dzh=(float)b*3.141592654/180;

daan=sin(dzh);

if(daan<0)

{daan=(-1)*daan;f=1;}

xianshi(i,3,daan);

if(f==0)

write_date(0x3d);

else

{ daan=(-1)*daan;write_date(0x2d);write_date(0x3d); }

}

else if(fuhao==9) //计算根号

{ if(b>=0)

{ daan=sqrt(b);

xianshi(i,3,daan); }

else{write_date(0x21);}

write_date(0x3d);

} a=0;b=0;gz=0;ad=0;bd=0;afd=0;bfd=0;f=0;

break; }

case 15: // 显示'+' 平方

flag=1;

if(g==0)

{ fuhao=1; if(eq==0){gz++; write_date(0x30+table1[num]);}

else{

write_com(0x01);write_date(0x41) ;write_date(0x4e);write_date(0x53);write_date(0x30+tabl

e1[num]);a=daan;gz=gz+4;}

}//显示'+'

else if(g==1)

{g=0;gg(gz);fuhao=8;if(eq==0){gz=gz+2;write_date(0x5e);write_date(0x32);}

else{write_com(0x01);write_date(0x41) ;write_date(0x4e);write_date(0x53);write_date(0x5e);wri te_date(0x32);a=daan;gz=gz+5;

}

} break; //平方

}

}

P1=0xf0;

}

void main() //主函数

{

init();

i=0;

a=0; //第一个参和运算的数

b=0; //第二个参和运算的数

flag=0; //flag表示是否有符号键按下,

fuhao=0; // fuhao表征按下的是哪个符号

P1=0xf0;

shangdang=1;

while(1)

{ keyscan();

}

}

AT89C51单片机简易计算器的设计

AT89C51单片机简易计算器的设计 单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。显示采用字符LCD静态显示。软件方面使用C语言编程,并用PROTUES仿真。 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数

值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图: 二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

单片机简单计算器报告(自己精心整理)

基 于 单 片 机 的 简 易 计 算 器 设 计 自动化控制一班 摘要: 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 本任务是个简易的两位数的四则运算,程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。本任务重在设计构思与团队合作,使得我们用专业知识、专业技能分析和解决问题全面系统的锻炼。 关键词: 单片机计算器范围加减乘除 1 引言 1.1 计算器的历史 说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 1.2 电子计算器的特殊键 在使用电子计算器进行四则运算的时候,一般要用到数字键,四则运算键和清除数据键。除了这些按键,还有一些特殊键,可以使计算更加简便迅速。 2 单片机概述 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。

单片机课程设计 简易计算器的设计

目录 摘要 (1) 绪论 (1) 1.设计要求及功能分析 (1) 1.1 设计要求 (1) 1.2 基本功能 (2) 2.设计方案 (2) 2.1 硬件部分设计方案 (2) 2.1.1 单片机部分 (2) 2.1.2 按键部分 (2) 2.1.3 显示部分 (2) 2.2 软件部分设计方案 (2) 3.系统的硬件总体设计 (4) 3.1 系统的总体硬件设计 (4) 3.2 键盘连接电路 (4) 3.3 显示屏连接电路 (5) 3.4 单片机芯片AT89C51 (6) 3.5 外接电路 (7) 4.系统的软件总体设计 (8) 4.1 键盘识别程序设计 (8) 4.2 显示程序 (11) 4.3 运算程序 (11) 5.元器件清单及程序清单 (12) 5.1 元器件清单 (12) 5.2 程序清单 (12) 6.软件仿真 (18) 6.1 仿真验证 (18) 6.2 性能分析 (20) 6.3 出现故障及其原因 (20) 6.4 解决方法 (20) 结论 (20) 参考文献 (21) 致谢 (21) 附录PCB图 (22)

简易计算器的设计 学生:李飞马鹏超舒宏超 指导老师:王孝俭 摘要:单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可,用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。单片机比专用处理器最适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。 关键词:单片机、计算器、控制电路、仿真。 绪论 设计要求掌握数码管移位动态扫描显示的编程方法,掌握矩阵扫描的编程方法,掌握数据在内部运算的编程方法。设计任务实现最大8位正整数加、减、乘、除,具备清零、等于功能,16个按键功能依次为:数字0、数字1、数字2、数字3、数字4、数字5、数字6、数字7、数字8、数字9、清零、等于、加、减、乘、除。 1.设计要求及功能分析 1.1设计要求: 本次单片微型计算机与接口技术课程设计做的是利用C51单片机为主体的计算器,实现了简单的加、减、乘、除功能。采取的是键盘输入和液晶显示屏的输出结果显示。主要硬件构成部分由四个,一个AT89C51单片机芯片,一个液晶显示屏,一个4*4键盘和一个排阻(10K)做P0口的上拉电阻,可以实现16位的数值操作计算。 1.2基本功能: 首先,计算器可现实8位数字,开机运行时,只有数码管最低位显示为“0”,其他位全部不显示;

基于单片机的简易计算器设计

目录 引言 (1) 第一章设计原理及要求 (2) 1.1设计方案的确定 (2) 1.2系统的设计方案 (2) 1.3系统的设计要求 (2) 第二章硬件模块设计 (4) 2.1单片机AT89C51 (4) 2.1.1 AT89C51芯片的特点 (5) 2.1.2 管脚说明 (5) 2.1.3 振荡器特性 (7) 2.1.4 芯片擦除 (7) 2.2键盘控制模块 (7) 2.2.1 矩阵键盘的工作原理 (8) 2.2.2 键盘电路主要器件介绍 (8) 2.3LCD显示模块 (10) 2.3.1 显示电路 (11) 2.3.2 LCD1602主要技术参数 (11) 2.3.3 引脚功能说明 (11) 2.4运算模块(单片机控制) (12) 第三章软件设计 (14) 3.1功能介绍 (14) 3.2系统流程图 (14) 3.3程序 (16) 第四章系统调试 (17) 4.1软件介绍 (17) 4.1.1 Keil uVision2仿真软件简介 (17) 4.1.2 protues简介 (17)

4.2软件调试 (18) 4.2.1 软件分析及常见故障 (18) 4.2.2 仿真结果演示 (20) 4.3硬件调试 (21) 结束语 (23) 参考文献 (24) 附录 (25) 致谢 (36)

引言 计算工具最早诞生于中国,中国古代最早采用的一种计算工具叫筹策,也被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的,约二百七十枚一束,放在布袋里可随身携带。另外直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加、减、乘、除、乘方和开方运算,甚至可以计算三角函数、指数函数和对数函数。这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。1642年,年仅19岁的法国伟大科学家帕斯卡引用算盘的原理,发明了第一部机械式计算器,在他的计算器中有一些互相联锁的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,人们可以像拨电话号码盘那样,把数字拨进去,计算结果就会出现在另一个窗口中,但是它只能做加减运算。1694年,莱布尼兹在德国将其改进成可以进行乘除的计算。此后,一直到20世纪50年代末才有电子计算器的出现。

AT89C51单片机C实现简易计算器

AT89C51单片机简易计算器的设计 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图:

二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

(二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。 图 2 矩阵键盘布局图 矩阵键盘内部电路图如图3所示:

单片机设计简易计算器

简易计算器 Simply Calculator 1 设计思想 此计算器有键盘部分、单片机、显示部分三部分组成,键盘部分主要完成输入功能;单片机主要完成数据处理功能,包括确定按键,完成运算,以及输出数据;显示器部分主要完成单片机输出的显示。 本设计的思路是利用单片机性能好,稳定性强的优点来实现系统的运行。设计大致可以分为三个步骤:第一步,硬件的选取和设计;第二步,程序的设计和调试;第三步,Protues 系统仿真。 硬件是设计的骨骼,不仅关系到设计总体方向的确定,还要综合考虑节能,环保,以及稳定性和经济性等各种因素。因此需要花费大量的时间。硬件的选取最为重要,包括选用的芯片,显示设备的选取,输入设备的选取等。本设计是通过单片机来实现的,因此选用了ATMEGA16单片机作为主体,输入设备选用矩阵键盘。程序是硬件的灵魂,是实现设计的中心环节。本设计使用的程序语言是C语言,在“ICC AVR”中运行,调试,直到运行出正确结果,然后输出后缀名为.HEX格式的文件,以备在Protues中仿真使用。程序是设计的关键,程序的调试需要大量的时间,耐心,还够要有足的细心才能成功。本设计中就出现了大量的错误,经过认真修改,最终才能运行出正确结果。最后的系统仿真是设计是否成功的验证,是设计不可缺少的重要环节。这就要求能掌握Protues的一些基本操作。2原理分析 矩阵键盘的扫描 —

》 图矩阵键盘图 如图所示,单片机的8个I/O口和矩阵键盘相连,用8个I/O口来控制矩阵键盘的16个按键是非常有意思的,首先我们设置单片机的PD0—PD7为输出,且PD0—PD3依次设置为低电平,而PD4—PD7设置为高电平,然后我们设置PD4—PD7为输入,而PD0—PD3仍然为输出,假如此时M1键按下,则PD0与PD4相连,因为PD0是低电平,而PD4是输入,所以PD4会被拉为低电平,同理,如果M2被按下,则PD5会被拉低,M3按下,PD6会被拉低,M4按下,PD7被拉低。这是判断有无键盘按下的过程,当我们判断是那一个键盘按下时,我们首先设置8个I/O口为输出,输出为FE,即,PD0为低电平,其他全为高电平,然后我们设置PD4—PD7为输入,如果M1被按下,则PD4会比被拉为低电平,此时会变成EE,同理可以知道M2被按下时会变为DE,M3被按下时会变为BE,M4被按下时会变为7E。同理我们可以设置8个I/O口输出FD来检测M5—M8是否被按下,设置8个I/O口输出FC来来检测M9—M12,设置8个I/O口输出F7来检测M13—M16,如果M1—M4没有被按下,就继续检测M4—M8,一次类推,就可以检测出16个按键了。在这次设计中,16个按键M1—M16所对应检测值分别为:EE,DE,BE,7E,ED,DD,BD,7D,EB,DB,BB,7B,E7,D7,B7,77。 数字显示与计算 本次设计选用的显示器是1602液晶显示器,此液晶显示器能显示32个字符,VSS接地,VDD接电源正极,E为时使能信号,R/W为读写选择端(H/L),RS为数据/命令选择端(H/L),D0—D7为数据I/O口。 首先我们初始化液晶显示器,然后显示出第一个被按下的数,并且使光标右移,如果有第二个数按下,则据继续显示,以此类推,然后把所有显示出来的数换算成一个数,如果按下“+”号,则显示出“+”,并且同理显示出“+”号后面按下的数字,然后调用加子程序,运算出结果,如果按下的是“-”,则调用减子程序,如果按下“*”,则调用乘子程序,如果按下“/”,则调用除子程序。然后再调用显示结果子程序,显示出结果。 《

基于51单片机的简易计算器制作

基于51单片机的简易计算器制作专业:电气信息班级:11级电类一班 姓名:王康胡松勇 时间:2012年7月12日 一:设计任务 本系统选用AT89C52单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下: (1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LED 显示数据和结果。 (2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LED上提示八个0;当除数为0时,计算器会在LED上会提示八个负号。 设计要求:分别对键盘输入检测模块;LED显示模块;算术运算模块;错误处理及提示模块进行设计,并用Visio画系统方框图,keil与protues仿真 分析其设计结果。 二.硬件设计 单片机最小系统 CPU:A T89C52 显示模块:两个4位7段共阴极数码管 输入模块:4*4矩阵键盘 1.电路图

电路图说明 本电路图采用AT89C52作为中处理器,以4*4矩阵键盘扫描输入,用两个74HC573(锁存器)控制分别控制数码管的位于段,并以动态显示的方式显示键盘输入结果及运算结果。为编程方便,以一个一位共阴极数码管显示负号。 三,程序设计 #include #define Lint long int #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; //锁存器段选sbit wela=P2^7; sbit display_g=P2^0; //负号段选 sbit display_w=P2^1; //负号位选uchar code table[]={0x3f,0x06,0x5b,0x4f, //0,1,2,3

51单片机简易计算器程序

#include <reg51.h>#include <intrins.h> #include <ctype.h> #include <stdlib.h> #define uchar unsigned char #define uint unsigned int uchar operand1[9], operand2[9]; uchar operator; void delay(uint); uchar keyscan(); void disp(void); void buf(uint value); uint compute(uint va1,uint va2,uchar optor); uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0xff}; uchar dbuf[8] = {10,10,10,10,10,10,10,10}; void delay(uint z) { uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); } uchar keyscan() { uchar skey; P1 = 0xfe; while((P1 & 0xf0) != 0xf0) { delay(3); while((P1 & 0xf0) != 0xf0) { switch(P1) { case 0xee: skey = '7'; break; case 0xde: skey = '8'; break; case 0xbe: skey = '9'; break; case 0x7e: skey = '/'; break; default: skey = '#'; }

单片机实验报告 计算器

单片机原理及其应用实验报告基于51单片机的简易计算器的设计 班级:12电子1班 姓名:金腾达 学号:1200401123 2015年1月6日

摘要 一个学期的51单片机的课程已经随着期末的到来落下了帷幕。“学以致用”不仅仅是一句口号更应该是践行。本设计秉承精简实用的原则,采用AT89C51单片机为控制核心,4X4矩阵键盘作为输入,LCD1602液晶作为输出组成实现了基于51单片机的简易计算器。计算器操作方式尽量模拟现实计算器的操作方式,带有基本的运算功能和连续运算能力。并提供了良好的显示方式,与传统的计算器相比,它能够实时显示当前运算过程和上一次的结果,更加方便用户记忆使用。本系统制作简单,经测试能达到题目要求。 关键词:简易计算器、单片机、AT89C51、LCD1602、矩阵键盘

目录 一、系统模块设计......................................................................................... 错误!未定义书签。 1.1 单片机最小系统 (1) 1.2 LCD1602液晶显示模块 (1) 1.3 矩阵按键模块 (2) 1.4 串口连接模块 (1) 二、C51程序设计 (2) 2.1 程序功能描述及设计思路 (2) 2.1.1按键服务函数 (2) 2.1.2 LCD驱动函数 (2) 2.1.3 结果显示函数 (2) 2.1.4状态机控制函数 (2) 2.1.5串口服务函数 (2) 2.2 程序流程图 (3) 2.2.1系统总框图 (3) 2.2.2计算器状态机流程转换图 (3) 三、测试方案与测试结果 (4) 3.1测试方案 (4) 3.3 测试结果及分析 (7) 4.3.1测试结果(仿真截图) (7) 4.3.2测试分析与结论 (7) 四、总结心得 (7) 五、思考题 (8) 附录1:整体电路原理图 (9) 附录2:部分程序源代码 (10)

单片机简易计算器课程设计

课程设计 题目名称简易计算器设计 课程名称单片机原理及应用 学生姓名 班级学号 2018年6 月20日

目录 一设计目的 本设计是基于51系列单片机来进行的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、乘、除六位整数数范围内的基本四则运算,并在LED上显示相应的结果。软件方面使用C语言编程,并用PROTUES仿真。 二总体设计及功能介绍 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机,实现对计算器的设计。具体设计及功能如下: 由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LED显示数据和结果; 另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘; 执行过程:开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。

三硬件仿真图 硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。 四主程序流程图 程序的主要思想是:将按键抽象为字符,然后就是对字符的处理。将操作数分别转化为字符串存储,操作符存储为字符形式。然后调用compute()函数进行计算并返回结果。具体程序及看注释还有流程图 五程序源代码 #include #include #include/* isdigit()函数*/ #include/* atoi()函数*/ #define uchar unsigned char #define uint unsigned int

51单片机的简易计算器要点

华侨大学厦门工学院单片机控制系统课程设计报告 题目:基于51单片机的简易计算器 专业、班级: 学生姓名: 学号: 指导教师: 2014年 5 月20 日

目录 一、设计任务目的 (2) 二、计任务要求 (2) 三、设计方案选取与论证 (2) 四、电路设计 (3) 4.1总体电路图 (3) 4.2 硬件设计 (4) 4.2.1 矩阵按键 (4) 4.2.2 AT89C52主芯片 (4) 4.2.3 LCD显示 (7) 4.3软件设计 (7) 4.3.1 键盘模块 (8) 4.3.2 计算模块 (8) 4.3.3 显示模块 (9) 五.制作及调试过程 (10) 5.1 制作过程 (10) 5.2 软件调试 (10) 5.3 硬件调试 (11) 结论 (12) 致谢 (13) 参考文献 (13)

一、设计任务目的 设计一个计算器,可以进行简易的四则运算。 二、计任务要求 1、能够进行简单的四则运算,包括带负数的运算。用LCD显示数据和结果(6位即可) 2、采用键盘输入方式,键盘包括数字键(0~9)、符号(+、-、×、÷)、清除键(c)和等号键(=),故只需要16 个按键即可。 3、在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 4、错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD 上提示OV;当除数为0时,计算器会在LCD上提示ERR。 三、设计方案选取与论证 1、单片机部分 单片机以AT89C51来做为核心元器件。 2、按键部分 设计思路:采用4*4行列式键盘,分别设定数字键和功能键,采用查询方式,每次有键按下时,先判断是实数字键还是功能键。但是这种方式采用了大量的I/O口线。 3、显示部分 在单片机应用系统中,使用的显示器主要有LED(发光二极管显示器)、LCD液晶显示器以及CRT接口。 思路:使用液晶显示器来显示。液晶是介于固态和液态间的有机化合物,将其加热会变成透明液态,冷却后变成结晶的混浊固态。在电的作用下,产生冷热变化,从而影响它的透光性,来达到显示的目的。LCD还具有以下几个优点(1)低压、微功耗(2)显示信息量大(3)长寿命(4)无辐射,无污染。 其系统结框图如下:

新基于51单片机的简易计算器

基于51单片机的简易计算器 1、前言: 本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相应的结果;设计电路采用STC90C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入;显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真。 2、设计任务: 计算器软件程序要完成以下模块的设计:(1)键盘输入检测模块;(2)LCD 显示模块;(3)算术运算模块;(4)错误处理及提示模块。 3、主体设计部分: (1)、系统模块图: 2)、系统总流程图:

4、硬件部分

单片机部分+矩阵键盘+1602显示 如图所示为简易计算器的电路原理图。P3口用于键盘输入,接4*4矩阵键盘,键值与键盘的对应表如表----所示,p0口和p2口用于显示,p2口用于显示数值的高位,po口用于显示数值的低位。 简易计算器电路原理图

矩阵键盘有16个按键,满足对简易计算器的计算实现,显示部分采用LCD1602,第一行显示计算的数值符号,第二行显示计算结果。 LCD显示模块: 本设计采用LCD液晶显示器来显示输出数据。通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。 5、软件部分 #include

#include #define uchar unsigned char sbit lcden=P2^7; sbit lcdrs=P2^6; sbit lcdrw=P2^5; sbit lcdbf=P0^7; uchar temp,key,i,j,flag,fh,k; long a,b,c; uchar code table[]={1,2,3,0, 4,5,6,0, 7,8,9,0, 0,0,0,0};

单片机简易计算器设计

单片机简易计算器设计 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

一、设计要求 1.设计4*4的键盘,其中10个数字键0~9,其余6个为“+”“-”“*”“/”“=”和“C” 2.设计2位LED接口电路 3.实现1位数的简单运算 二、硬件系统设计 1、LED接口电路 简易计算器需要2位8段码LED显示电路。用8031单片机经8255A扩展2位8段码LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。在位控制口加集电极开路的反相高压驱动器74LS06以提供驱动LED显示器所需的足够大的电流,然后接至各数码显示器的共阴极端。同理,在段码数据口集电极开路的正相高压驱动器74LS07提供足够大的电流,然后接到数码显示器的各段。逻辑电路结构如下:

2、键盘接口电路 简易计算器需要4*4的行列式键盘。用8031单片机经8255A扩展4*4行列式键盘,8255A的B口和C口用于扩展键盘接口,B口高4位作为输出口,C口低4位作为输入口。逻辑电路结构如下: 3、计算器逻辑电路图 将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图,如下: 三、软件设计 1、LED显示程序设计 LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:

为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字0~9的共阴极字形代码如下表: 0~9七段数码管共阴级字形代码 2位LED显示的程序框图如下: 2、读键输入程序设计 为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如下: 3、主程序设计 (1)数值送显示缓冲程序设计 简易计算器所显示的数值最大位两位。要显示数值,先判断数值正负,如果是负值,则符号位显示“-”,然后将数值除以10,余数送显最最低位,判断商是否为0,若为0则返回,若不为0,则将商除以10,将余数送显高位。程序框图如下: (2)运算主程序设计

单片机简易计算器设计

一、设计要求 1.设计4*4的键盘,其中10个数字键0~9,其余6个为“+”“-”“*”“/”“=”和“C” 2.设计2位LED接口电路 3.实现1位数的简单运算 二、硬件系统设计 1、LED接口电路 简易计算器需要2位8段码LED显示电路。用8031单片机经8255A扩展2位8段码LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。在位控制口加集电极开路的反相高压驱动器74LS06以提供驱动LED显示器所需的足够大的电流,然后接至各数码显示器的共阴极端。同理,在段码数据口集电极开路的正相高压驱动器74LS07提供足够大的电流,然后接到数码显示器的各段。逻辑电路结构如下:

2、键盘接口电路 简易计算器需要4*4的行列式键盘。用8031单片机经8255A扩展4*4行列式键盘,8255A的B口和C口用于扩展键盘接口,B口高4位作为输出口,C口低4位作为输入口。逻辑电路结构如下:

3、计算器逻辑电路图 将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图,如下:

8255A PA0PA1PA2PA3PA4PA5PA6PA7 PB0PB1 PB4PB5PB6PB7PC0PC1PC2PC3 74LS373 G CS A1A0 D0~D7 WR RD RESET WR RD RST ALE P2.78031 +5V Q2~Q7Q1Q0 A2~A7A1A0D0~D7A8~A11 OE CE P0.0~P0.7 P2.0~2.3PSEN +5V 2732 XTAL2 XTAL1晶振6MHZ 8X74LS07 2X74LS06 4X4键盘 三、软件设计 1、LED 显示程序设计 LED 显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED 显示器,器排列形状如下图所示: 为了显示数字或符号,要为LED 显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字0~9的共阴极字形代码如下表:

基于单片机的简易计算器设计

2013 - 2014 学年_一_学期 山东科技大学电工电子实验教学中心 创新性实验研究报告 实验项目名称__基于51单片机的简易计算器设计_ 2013 年12 月27 日

四、实验内容

2、实验内容 (一)、总体硬件设计 本设计选用AT89C52单片机为主控单元。显示部分:采用六位LED动态数码管显示。按键部分:采用2*8键盘;利用2*8的键盘扫描子程序,读取输入的键值。 (二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用两条I/O 线作为行线,八条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为2×8个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口和另一个P口的两个管脚实现16个按键功能,这种形式在单片机系统中也最常用。 矩阵键盘布局图: 矩阵键盘内部电路图如下图所示:

(三)、LED显示模块 本设计采用LED数码显示来显示输出数据。通过D0-D7引脚向LED写指令字或写数据以使LED实现不同的功能或显示相应数据。 (四)运算模块(单片机控制) MCS-51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。 单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能。

单片机课程设计报告(简易计算器)

简易计算器 摘要:计算器是人们的日常生活中是最常见的电子产品之一,它应用极广、发展迅猛,并且不断出现着拥有更加强大功能的计算器。为了解和研究计算器,本次课设设计制作了一个简易计算器,能够在十四位的计算范围内进行“+”、“-”、“*”、“/”的基本运算,能进行负数以及小数点后两位的精确结果显示。该计算器以AT89C51单片机芯片作为核心。采用LCD1602工业字符液晶进行显示。完成的计算器经过检验能够完整的实现预设功能,各种细节完善,具有很高的使用价值。 关键词:单片机;简易计算器;AT89C51;LCD1602

Simple Calculator Abstract:Calculator is People's Daily life is one of the most common electronic products, used very wide, developing rapidly, and constantly appear more powerful function with have calculators. In order to understand and study calculator, this class set design made a simple calculator, can the calculation in within 14 "+" and "-" and "*", "/" the basic computing, can carry out negative and two decimal places accurate results are shown. This calculator with AT89C51 chips as the core. Using liquid LCD1602 industrial characters displayed. Complete calculator after inspection can complete realization, various details preset functions to perfect, have high use value. Keywords:MCU; Simple calculator;AT89C51;LCD1602

基于51单片机的简易计算器设计

河南##############学校 毕业设计(论文) 基于51单片机的简易计算器 系部: 自动控制系 专业: 电气自动化 班级: 自083 姓名: 崔 # # 学号: 091415302 指导老师: 许 # 二零一二年五月八日

基于51单片机的简易计算器 摘要 工程实践教学环节是为了学生能够更好地巩固和实践所学专业知识而设置的,在本次工程实践中,我以《智能化测量控制仪表原理与设计》、《MCS-51系列单片微型计算机及其应用》课程中所学知识为基础,设计了简易计算器。本系统以MCS-51系列中的8051单片机为核心,能够实现多位数的四则运算。该系统通过检测矩阵键盘扫描,判断是否按键,经数据转换把数值送入数码管动态显示。本系统的设计说明重点介绍了如下几方面的内容:基于单片机简易计算器的基本功能,同时对矩阵键盘及数码管动态显示原理进行了简单的阐述;介绍了系统的总体设计、给出了系统的整体流程框图,并对其进行了功能模块划分及所采用的元器件进行了详细说明;对系统各功能模块的软、硬件实现进行了详细的设计说明。 关键词:MCS-51;8051单片机;计算器;加减乘除

Based on the simple calculator 51 SCM Abstract The engineering practice teaching is to students better to consolidate and practice have set up by the professional knowledge, in this engineering practice, I to the intelligent measurement control instrument principle and design ", "the MCS-51 series single chip computer and its application" course knowledge as the foundation, the design the simple calculator. This system to MCS-51 of the 8051 series single chip microcomputer as the core, can realize the connection arithmetic. The system through the test matrix keyboard scan, judge whether key, the data transfer the numerical into digital tube dynamic display. This system mainly introduced the design that the following aspects of content: based on single chip microcomputer simple calculator basic functions, and the matrix keyboard and a digital tube dynamic display of the principle of a simple expatiated; introduced the design of the whole system, the whole process of the system are discussed, and its function module partition and the components for a detailed explanation; the functional modules of the system hardware and software of the implementation of the detailed design instructions. Key words: MCS-51;8051 single chip microcomputer;Calculator;Add, subtract, multiply and divide:

基于C51简易计算器综述

单片机课程设计 简 易 计 算 器 专 业 班 级 学生姓名 学 号 任课教师 提交日期 JINGCHU UNIVERSITY OF TECHNOLOGY

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单.................................. 一、设计任务和要求

1.1 设计要求 本次课程设计,我选择的课题是单片机十进制加法计算器软硬件设计,设计任务为: 设计一键盘显示装置,键盘上除需定义10个十进制数字键外还要相应的功能键,其它键不定义无响应。利用此系统可分别可输入十进制被加数与加数,实现两数相加并将结果以十进制形式显示出来。(扩展:多位10进制数相加) 1.2 性能指标 本课程设计的十进制加法计算器的计算范围为0~255,计算结果全为整数,计算结果溢出结果不显示。 1、加法:三位加法,计算结果超过255溢出不显示 2、减法:三位减法,计算结果若小于零溢出不显示 3、乘法:三位数乘法 4、除法:整数除法 5、有清零功能 1.3 设计方案的确定 按照1.1的设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于 AT89C51芯片的I口不够多,而且为了硬件电路设计的简单化,故选择串行动态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行动态显示显示运算结果。 主程序进行初始化,采用行列扫描进行查表得出键值,每次按键后调用显示子程序。 二、单片机简要原理 在该课程设计中,主要用到一个AT89C51芯片和串接的共阴数码管。作为 该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 2.1 AT89C51的介绍:

相关文档
相关文档 最新文档