0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

白茶茶668 来源:白茶茶668 作者:白茶茶668 2023-08-01 00:51 次阅读

该计算器系统51 系列的单片机进行的数字计算器系统设计,可以完成计算器的键盘输入, 进行加、 减、乘、除的简单四则运算,并在 LCD屏幕上相应的显示结果。选择内部存储资源丰富的 51 单片 机,输入采用 4×4矩阵键盘,显示采用LCD1602屏幕模块进行显示。软件方面从分析计算器功能、 流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对 C 语言和汇编语言进行比较分析, 针对计算器四则运算算法特别是乘法和除法运算的实现,最终选 用全球编译效率最高的KEIL 公司的μVision5 软件,采用C语言进行编程,并用 Proteus8 进行仿真

image.png

部分程序:

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit rs=P2^6; //数据命令选择

sbit lcden=P2^7;//使能信号


uchar code table[]= " ";


long int data_a,data_b; //第一个数和第二个数

long int data_c; //计算结果


uchar dispaly[10]; //显示缓冲


sbit MUSIC_REST =P2^2;//语音芯片复位脚

sbit MUSIC_DATA =P2^1;//语音芯片脉冲识别

sbit bus =P2^0;//语音芯片工作状态识别信号

uchar bbh,xm1,xm2,xm0;


void delay_us(unsigned int us)//延时函数

{

while(us--)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

void Music(unsigned char music_count)

{

MUSIC_REST=1;

delay_us(200);

MUSIC_REST=0;

delay_us(200);


while(music_count>0)

{

MUSIC_DATA=1;

delay_us(100);

MUSIC_DATA=0;

delay_us(100);

music_count--;

}

}

//************************************************************************/

// 描述: 延时t us函数

//************************************************************************/

void LCD_Delay_us(unsigned int t)

{

while(t--); //t=0,退出

}

//************************************************************************/

// 描述: 延时t ms函数

//************************************************************************/

void LCD_Delay_ms(unsigned int t)

{

unsigned int i,j;

for(i=0;i;i++)>

for(j=0;j<113;j++) //执行113次循环

;

}

//************************************************************************/

// 描述: 1602液晶写指令

//************************************************************************/

void write_com(uchar com) //1602液晶写指令

{

rs=0; //写指令

lcden=0; //使能1602

P0=com; //写入指令com

LCD_Delay_ms(1); //延时1ms

lcden=1; //使能1602

LCD_Delay_ms(2); //延时2ms

lcden=0; //使能1602

}

//************************************************************************/

// 描述:1602液晶写数据

//************************************************************************/

void write_date(uchar date) //1602液晶写数据

{

rs=1; //写数据

lcden=0; //使能1602

P0=date; //写入数据date

LCD_Delay_ms(1); //延时1ms

lcden=1; //使能1602

LCD_Delay_ms(2); //延时2ms

lcden=0; //使能1602

}

//************************************************************************/

// 描述:指定x,y写入字符函数

//************************************************************************/

void W_lcd(unsigned char x,unsigned char y,unsigned char Data)

{

if (y == 0){write_com(0x80 + x);} //第一行

else{write_com(0xc0 + x);} //第二行

write_date( Data); //写入数据

}

//指定x,y写入字符串函数

void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)

{

if (y == 0){write_com(0x80 + x);} //第一行

else{write_com(0xC0 + x);} //第二行

while (*s) //

{write_date( *s); s++;} //写入数据

}

//************************************************************************/

// 描述:初始化液晶,及画面初始化

//************************************************************************/

void init_lcd(void) //初始化液晶,及画面初始化

{

lcden=0; //使能1602

write_com(0x38); //8 位总线,双行显示,5X7 的点阵字符

LCD_Delay_us(100); //延时100us

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

write_com(0x06); //光标右移动

write_com(0x01); //清屏

write_com(0x80); //DDRAM 地址归0

}

//************************************************************************/

// 描述: 反转法键盘扫描

//************************************************************************/

short keycheckdown() /* 反转法键盘扫描 */

{


short temp1,temp2,temp,a=0xff;

P1=0xf0; /* 输入行值(或列值) */

LCD_Delay_ms(20); /* 延时 */

temp1=P1; /* 读列值(或行值) */

P1=0xff;

LCD_Delay_ms(20); /* 延时 */

P1=0x0f; /* 输入列值(或行值) */

LCD_Delay_ms(20); /* 延时 */

temp2=P1; /* 读行值(或列值) */

P1=0xff;

temp=(temp1&0xf0)|(temp2&0xf); /* 将两次读入数据组合 */

switch(temp) /* 通过读入数据组合判断按键位置 */

{

case 0x77 :a=0x0d;Music(27);while(!bus);break;// 按键/

case 0x7b :a=0x0e;Music(31);while(!bus); break;// 按键=

case 0x7d :a=0;Music(2);while(!bus);break;// 按键0

case 0x7e :a=0x0f; break;// 按键CE

case 0xb7 :a=0x0c;Music(26);while(!bus);break;// 按键*

case 0xbb :a=0x9;Music(11);while(!bus);break; // 按键9

case 0xbd :a=0x8;Music(10);while(!bus);break; // 按键8

case 0xbe :a=0x7;Music(9);while(!bus);break; // 按键7

case 0xd7 :a=0x0b;Music(25);while(!bus);break;// 按键-

case 0xdb :a=0x6;Music(8);while(!bus);break; // 按键6

case 0xdd :a=0x5;Music(7);while(!bus);break; // 按键5

case 0xde :a=0x4;Music(6);while(!bus);break; // 按键4

case 0xe7 :a=0x0a;Music(24);while(!bus);break;// 按键+

case 0xeb :a=3;Music(5);while(!bus);break; // 按键3

case 0xed :a=2;Music(4);while(!bus);break; // 按键2

case 0xee :a=1;Music(3);while(!bus);break; // 按键1

default :a=0xff;

}

return a; /* 返回按键值 */

}

image.png

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4425

    浏览量

    167425
  • 51单片机
    +关注

    关注

    274

    文章

    5702

    浏览量

    123532
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136714
  • 计算器
    +关注

    关注

    16

    文章

    437

    浏览量

    37331
收藏 人收藏

    评论

    相关推荐

    基于51单片机简易计算器制作 相关资料推荐

    基于51单片机简易计算器制作51单片机可以实现的功能很多,今天笔者介绍一种使用4*4矩阵键盘和
    发表于 07-06 06:12

    基于51单片机简易计算器,用LCD1602显示 精选资料分享

    基于51单片机简易计算器经历了一番学习,成功做出了一个简易计算器,并且在程序开头加了一个小密
    发表于 07-14 07:28

    怎样去设计一种基于51单片机简易计算器

    怎样去设计一种基于51单片机简易计算器简易计算器上的矩阵按键分别代表什么意思?
    发表于 09-07 07:01

    如何设计一个基于51单片机简易计算器

    1.简介本计算器是以MCS-51系列AT89C51单片机为核心构成的简易计算器系统。该系统通过
    发表于 11-18 08:50

    51单片机简易计算器(单片机小实验,含C程序和Ptotues电路图)

    51单片机简易计算器(单片机小实验,含C程序和Ptotues电路图)一个单片机的小实验,做一个
    发表于 04-22 11:04 812次下载

    基于51单片机简易计算器设计_程津津

    发表于 04-27 17:22 74次下载

    基于MC51单片机简易计算器设计_毕业设计(论文)

    毕业设计(论文)-基于MC51单片机简易计算器设计 有需要的看一看,不收积分。
    发表于 11-20 16:49 136次下载

    简易计算器设计

    基于51单片机简易计算器,采用按键与数码管实现
    发表于 12-31 14:33 20次下载

    基于51单片机简易计算器,用LCD1602显示

    基于51单片机简易计算器经历了一番学习,成功做出了一个简易计算器,并且在程序开头加了一个小密
    发表于 11-11 15:51 48次下载
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>简易</b><b class='flag-5'>计算器</b>,用LCD1602显示

    基于51单片机简易计算器

    1.简介本计算器是以MCS-51系列AT89C51单片机为核心构成的简易计算器系统。该系统通过
    发表于 11-11 19:51 54次下载
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>简易</b><b class='flag-5'>计算器</b>

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

    一.硬件方案本设计是以51单片机为核心的计算器模拟系统设计,输入采用4×4矩阵键盘,可以进行加、减、乘、除4位带符号数字运算,并在LCD1602上显示操作过程。。主要由51
    发表于 11-13 10:21 28次下载
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>简易</b><b class='flag-5'>计算器</b>设计

    基于51单片机简易计算器LCD显示

    分享一个小作品,是根据普中单片机给的简易计算器的代码的思路自己改写的,IO口的话也能对应的上开发板的引脚,他原来给的程序是只能实现两位数差十倍的加减乘除,特别是除法的话A/B A<B在
    发表于 11-23 16:36 3次下载
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>简易</b><b class='flag-5'>计算器</b>LCD显示

    基于51单片机简易计算器(数码管显示)源代码

    基于51单片机简易计算器(数码管显示)例程源代码
    发表于 05-12 16:39 58次下载

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

    基于51单片机简易计算器设计(实物)
    发表于 01-02 10:02 41次下载

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

    电子发烧友网站提供《基于51单片机简易计算器设计.rar》资料免费下载
    发表于 01-12 10:50 9次下载