问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用51单片机做计算器(要求用C语言编程) 由于是新手所以没积分 对不住各位了

发布网友 发布时间:2022-04-29 09:47

我来回答

4个回答

热心网友 时间:2023-10-14 00:49

给你参考一下的,我最近做的:

我的实验板上的键不够,所以只能做加法运算,而且两数之和不能大于十。

嘿嘿,没错这个给某种人用的。

//********** myh.h ***********有两个文件,一个是头文件myh.h一个是js.c

#include <reg52.h>

typedef unsigned char uchar;

typedef unsigned int  uint;

typedef bit BOOL;

//**

sbit rs=P2^6;

sbit rw=P2^5;

sbit e=P2^7;

//**

uchar Key_Down(void);//返回0到12的键盘的编码

void delay(uchar);//延时

void Init(void);

void Write_Cmd(uchar);

void Write_Data(uchar);

BOOL If_Busy();

//**

uchar code Lcd_tab[]="0123456789+=";

uchar code Key_tab[]={0xb7,0xbb,0xbd,0xbe,0xd7,0xdb,0xdd,0xde,0xe7,0xeb,0xed,0xee};

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

uint Q0;

uint Q1;

uint Q2;

//*************js.c********

 

#include "myh.h"

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

void main()

{uchar m_key; 

uchar m_inc=0;

Init();

Write_Cmd(0x80);

while(1)

{  Q1=0;

   Q0=0;

   Q2=0;

   

 m_key=Key_Down();

 Write_Cmd(0x01);

 Write_Data(Lcd_tab[m_key]);

 Q0=m_key;

   

 m_key=Key_Down();

 Write_Data(Lcd_tab[m_key]);

       

 m_key=Key_Down();

 Write_Data(Lcd_tab[m_key]);

 Q1=m_key;

       

 m_key=Key_Down();

 Write_Data(Lcd_tab[m_key]);

 Q2=Q0+Q1;

 Write_Data(Lcd_tab[Q2]);

     

 

  

   

}

}

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

uchar Key_Down(void)

{uchar Key_number=0;

  uchar m_cx;

  uchar m_cy;

  uchar m_cxy;

  P3=0x0f;

  m_cx=P3;

  while(1)

  {if(m_cx!=0x0f)

    {delay(500);

     m_cx=P3;

     if(m_cx!=0x0f)

  break; }  

 else {P3=0x0f;m_cx=P3;}

  }

  P3=0x0f;

  m_cx=P3&0x0f;

  P3=0xf0;

  m_cy=P3&0xf0;

  m_cxy=m_cx|m_cy;

for(Key_number=0;Key_number<12;Key_number++)

{if(m_cxy==Key_tab[Key_number])

   break;

}

return Key_number;}

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

void delay(uchar time)

{uchar j;

for(;time>0;time--)

for(j=0;j<200;j++);

}

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

void init()

{ delay(10);

  Write_Cmd(0x38);

  delay(10);

  Write_Cmd(0x38);

  delay(10);

  Write_Cmd(0x38);

  delay(10);

  Write_Cmd(0x0c);

  delay(10);

  Write_Cmd(0x06);

  delay(10);

  Write_Cmd(0x01);

}

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

void Write_Cmd(uchar cmd)

{//while(If_Busy());

 e=0;

 rw=0;

 rs=0;

 delay(4);

 P0=cmd;

 delay(4);

 e=1;

 delay(10);

 e=0;

}

//***

void Write_Data(uchar dat)

{//while(If_Busy());

 e=0;

 rw=0;

 rs=1;

 delay(4);

 P0=dat;

 delay(4);

 e=1;

 delay(10);

 e=0;

}

//**

BOOL If_Busy()

{

  BOOL result;

  rw=1;

  rs=0;

  e=1;

  delay(4);

  result=(BOOL)(P2&0x80);

  e=0;

  return result;

}

热心网友 时间:2023-10-14 00:49

关键还是要先有硬件方案,也就是方框图,之后是详细电路图,最后才能谈到写程序。关键点有如下几点:一、要设计单片机最小系统,包括复位、晶振、EA接高电平(不许外扩存储器)。二、要有键盘,对应软件为判键程序。推荐用4×4行列式键盘。三、要有显示单元,新手推荐你用数码管(用164串转并做),或是用1602液晶做显示(更容易些)。对应软件部分是显示函数。以上三点是硬件方案,最后数学计算可以用C写,不复杂。总体来说,判键是难点。因为你首先要输入数据进入单片机;输入的数据进行相应的数*算;再把结果显示到液晶中去。

热心网友 时间:2023-10-14 00:50

首先准备一块最小系统版 就是板子都做好了了 件都焊上了的那种
再准备一个伟福仿真器 使用配套的C语言 就可以了
最小系统版一般会配套示例程序给你 分为C语言 和汇编2个版本
你参考下C语言版本 只关注下键盘扫描(那个键盘)和显示(一般是8段管)2部分的程序就可以了
C语言中实现计算不难。
程序就不给你了 因为硬件系统不一样 地址都不同 给你也作用不大

热心网友 时间:2023-10-14 00:50

需要的功能有:键盘扫描,以及显示。
主要是配合硬件。51自带有数*算符,可直接调用,如果没有时,可自己定义一些函数实现此功能。

热心网友 时间:2023-10-14 00:49

给你参考一下的,我最近做的:

我的实验板上的键不够,所以只能做加法运算,而且两数之和不能大于十。

嘿嘿,没错这个给某种人用的。

//********** myh.h ***********有两个文件,一个是头文件myh.h一个是js.c

#include <reg52.h>

typedef unsigned char uchar;

typedef unsigned int  uint;

typedef bit BOOL;

//**

sbit rs=P2^6;

sbit rw=P2^5;

sbit e=P2^7;

//**

uchar Key_Down(void);//返回0到12的键盘的编码

void delay(uchar);//延时

void Init(void);

void Write_Cmd(uchar);

void Write_Data(uchar);

BOOL If_Busy();

//**

uchar code Lcd_tab[]="0123456789+=";

uchar code Key_tab[]={0xb7,0xbb,0xbd,0xbe,0xd7,0xdb,0xdd,0xde,0xe7,0xeb,0xed,0xee};

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

uint Q0;

uint Q1;

uint Q2;

//*************js.c********

 

#include "myh.h"

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

void main()

{uchar m_key; 

uchar m_inc=0;

Init();

Write_Cmd(0x80);

while(1)

{  Q1=0;

   Q0=0;

   Q2=0;

   

 m_key=Key_Down();

 Write_Cmd(0x01);

 Write_Data(Lcd_tab[m_key]);

 Q0=m_key;

   

 m_key=Key_Down();

 Write_Data(Lcd_tab[m_key]);

       

 m_key=Key_Down();

 Write_Data(Lcd_tab[m_key]);

 Q1=m_key;

       

 m_key=Key_Down();

 Write_Data(Lcd_tab[m_key]);

 Q2=Q0+Q1;

 Write_Data(Lcd_tab[Q2]);

     

 

  

   

}

}

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

uchar Key_Down(void)

{uchar Key_number=0;

  uchar m_cx;

  uchar m_cy;

  uchar m_cxy;

  P3=0x0f;

  m_cx=P3;

  while(1)

  {if(m_cx!=0x0f)

    {delay(500);

     m_cx=P3;

     if(m_cx!=0x0f)

  break; }  

 else {P3=0x0f;m_cx=P3;}

  }

  P3=0x0f;

  m_cx=P3&0x0f;

  P3=0xf0;

  m_cy=P3&0xf0;

  m_cxy=m_cx|m_cy;

for(Key_number=0;Key_number<12;Key_number++)

{if(m_cxy==Key_tab[Key_number])

   break;

}

return Key_number;}

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

void delay(uchar time)

{uchar j;

for(;time>0;time--)

for(j=0;j<200;j++);

}

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

void init()

{ delay(10);

  Write_Cmd(0x38);

  delay(10);

  Write_Cmd(0x38);

  delay(10);

  Write_Cmd(0x38);

  delay(10);

  Write_Cmd(0x0c);

  delay(10);

  Write_Cmd(0x06);

  delay(10);

  Write_Cmd(0x01);

}

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

void Write_Cmd(uchar cmd)

{//while(If_Busy());

 e=0;

 rw=0;

 rs=0;

 delay(4);

 P0=cmd;

 delay(4);

 e=1;

 delay(10);

 e=0;

}

//***

void Write_Data(uchar dat)

{//while(If_Busy());

 e=0;

 rw=0;

 rs=1;

 delay(4);

 P0=dat;

 delay(4);

 e=1;

 delay(10);

 e=0;

}

//**

BOOL If_Busy()

{

  BOOL result;

  rw=1;

  rs=0;

  e=1;

  delay(4);

  result=(BOOL)(P2&0x80);

  e=0;

  return result;

}

热心网友 时间:2023-10-14 00:49

关键还是要先有硬件方案,也就是方框图,之后是详细电路图,最后才能谈到写程序。关键点有如下几点:一、要设计单片机最小系统,包括复位、晶振、EA接高电平(不许外扩存储器)。二、要有键盘,对应软件为判键程序。推荐用4×4行列式键盘。三、要有显示单元,新手推荐你用数码管(用164串转并做),或是用1602液晶做显示(更容易些)。对应软件部分是显示函数。以上三点是硬件方案,最后数学计算可以用C写,不复杂。总体来说,判键是难点。因为你首先要输入数据进入单片机;输入的数据进行相应的数*算;再把结果显示到液晶中去。

热心网友 时间:2023-10-14 00:50

首先准备一块最小系统版 就是板子都做好了了 件都焊上了的那种
再准备一个伟福仿真器 使用配套的C语言 就可以了
最小系统版一般会配套示例程序给你 分为C语言 和汇编2个版本
你参考下C语言版本 只关注下键盘扫描(那个键盘)和显示(一般是8段管)2部分的程序就可以了
C语言中实现计算不难。
程序就不给你了 因为硬件系统不一样 地址都不同 给你也作用不大

热心网友 时间:2023-10-14 00:50

需要的功能有:键盘扫描,以及显示。
主要是配合硬件。51自带有数*算符,可直接调用,如果没有时,可自己定义一些函数实现此功能。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
抖音弹幕怎么关掉?怎么关闭抖音弹幕? 惠普LaserJet P3005D是否支持B5纸的双面打印? word打印出图片总是缺一部分怎么办-word打印图片不完整怎么解决_百度... 理想one哪里产的车辆? 抚州抚州ONE在哪里? one地址在哪里? 如何在图片上写字(如何在图片上添加文字) 网商贷为什么钱没到账 高级经济师职称怎么评 高级经济师需要评审吗 网络热词9是什么意思 单片机做的计算器(C语言代码) 单片机制作简易计算器需要哪些器件 网络语言小九九是什么意思 51单片机设计简易计算器 网络上说的9是什么意思? 请教用单片机制作计算器 需要掌握哪方面的知识 简单单片机计算器程序 单片机简易计算器设计的程序 求助,怎样用单片机做计算器? 用单片机怎么做计算器 单片机做计算器的程序 Nike KD鞋子侧面有35圆片的有哪几款鞋? 为什么kd的篮球鞋气垫是大气柱而不是纤维丝 kd trey 5杜兰特简版篮球鞋好吗 KD是什么服装品牌 深圳耐克专卖店有没有篮球鞋KD V ID圣诞蓝色版 kd系列球鞋 耐克kd多少钱,耐克kd怎么样 Nike KD Trey 5 VIII White/Blue 白蓝45码多少厘米? 键盘里面的AY9是什么意思 单片机实现计算器加减乘除功能。 大神,求51单片机做简易计算器的那个c语言程序 男女发给女友用9:1是什么意思? 五笔中的折区是什么意思? 五笔字根分为多少个区,每个区的字母分别是什么? 五笔字根的拆字规则是什么? 五笔输入法的五个区是根据什么分的? 五笔字根记忆分几个区??? 光鼠标的四根线怎么连接 五笔字根折区的所有键位和位置如何记住 五笔字根怎麼划分键盤区 光电鼠标的接头怎么接 台式电脑怎样连wifi?win7系统的 怎样解释五笔字根表? 光电鼠标4条线怎么接,橙白蓝绿四线 怎么设置W7台式机wifi网络! 光电鼠标怎么安装 要答案红参,干姜,长期当茶喝有没害处? 惠普暗夜精灵7怎么链接无限鼠标