怎样用51单片机做计算器啊?
现在打算用89C51单片机做一个简易的计算器,谁能提供给我资料啊?譬如电路图,元器件,工作原理什么的、、、感谢感谢!!!
最新问答
- chocolate宸
1、首先第一步就是要进行查找元器件并放入到原理图中,如下图所示。
2、接着就是要进行原理图连接根据网络标签的方式即可。
3、然后就是要进行编写程序,
程序源代
#include
#include #include
#include
#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);
4、最后一步就是进行验证正确后编译程序在protues中加载HEX观察结果是否正确,如下图所示。
扩展
电脑:
单片机有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。
它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程//调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。
功能特性:
1、可以63K程序空间,接近64K 的16位地址空间;
2、可以Kxdata 空间,全部64K 的16位地址空间;
3、可以真实全部32 条IO脚;
4,完全兼容keilC51 UV2 调试环境,可以通过UV2 环境进行单步,断点, 全速等作;
5、可以使用C51语言或者ASM汇编语言进行调试 ;
6、可以非常方便地进行所有变量观察,包括鼠标取值观察,即鼠标放在某 变量上就会立即显示出它此的值;
7、可选 使用用户晶振,支持0-40MHZ晶振频率;
8、片上带有768字节的xdata,您可以在时选 使用他们,进行xdata 的;
9、可以双DPTR 指针;
10、可以去除ALE 信号输出. ;
11、自适应300-38400bps 的所有波特率通讯;
12、体积非常细小,非常方便插入到用户板中.插入时紧贴用户板,没有连接电缆,这样可以有效地减少运行中的干扰,避免时出现莫名其妙的故障;
13、插针采用优质镀金插针,可以有效地防止日久生锈,选择优质园脚IC插座,保护插针,同时不会损坏目标板上的插座. ;
14,时监控和用户代分离,不可能产生不能的软故障;
15、RS-232接口不计成本采用MAX202集成电路,串行通讯稳定可靠,绝非一般三极管的简易电路可比。
功能:
器占用单片机串口及器2,与Keil C(PC)通讯,故不支持串口及器2 的功能。全速运行时单片机串口及器2 可供用户使用。
使用方法:
1、将器插入需的用户板的CPU插座中,器由用户板供电;
2、将器的串行电缆和PC机接好,打开用户板电源;
3、通过Keil C 的IDE 开发环境UV2 用户程序进行、调试。
浏览 156赞 155时间 2023-09-02 - MyronKiven
1、首先第一步就是要进行查找元器件并放入到原理图中,如下图所示。
2、接着就是要进行原理图连接根据网络标签的方式即可。
3、然后就是要进行编写程序,
程序源代
#include
#include #include
#include
#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);
4、最后一步就是进行验证正确后编译程序在protues中加载HEX观察结果是否正确,如下图所示。
浏览 431赞 112时间 2023-07-29 - 真南真北
1、硬件图
硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。
2、主程序流程图
程序的主要思想是:将按键抽象为字符,然后就是对字符的处理。将作数分别转化为字符串存储,作符存储为字符形式。然后调用compute()函数进行计算并返回结果。具体程序及看注释还有流程图。3、Altium Designer画的PCB图
4、程序源代
#include
#include #include
#include
#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 = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
P1 = 0xfd;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xed: skey = '4'; break;
case 0xdd: skey = '5'; break;
case 0xbd: skey = '6'; break;
case 0x7d: skey = '*'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
P1 = 0xfb;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xeb: skey = '1'; break;
case 0xdb: skey = '2'; break;
case 0xbb: skey = '3'; break;
case 0x7b: skey = '-'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
P1 = 0xf7;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xe7: skey = '$'; break;
case 0xd7: skey = '0'; break;
case 0xb7: skey = '='; break;
case 0x77: skey = '+'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
return skey;
}
void main()
{
uint value1, value2, value;
uchar ckey, cut1 = 0, cut2 = 0;
uchar operator;
uchar i, bool = 0;
init:
buf(0);
disp();
value = 0;
cut1 = cut2 = 0;
bool = 0;
for(i = 0;i < 9;i++)
{
operand1[i] = '