求51单片机的简易计算机的设计,要求+ _ * / .

四位显示,有完整过程,从选硬件到编程
哪位有的话,请发到727943533@qq。com

第1个回答  2010-09-09
8位显示 51单片机 键盘
#include <reg51.h>
#define uchar unsigned char
unsigned char disdata[8];
uchar op=12;//按键位置
long a=0;//运算结果
bit flag=0;//上一次是数字键
uchar code dispcode[]={ 0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,0xff
};
unsigned char code dispbitcode[]={0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe};

uchar disdata[]={16,16,16,16,16,16,16,16};
void init()//初始化
{ uchar op=12; a=0;

P0=0xff;P2=0xff;
}

uchar inkey() ///键定义
{
uchar i,j=1,k;//J=1表示00000001;
uchar code keytab[16]={0x81,0x41,0x21,0x11,
0x82,0x42,0x22,0x12,0x84,0x44,0x24,0x14,0x88,0x48,0x28,0x18};
for(i=0;i<4;i++)
{ P1=~j; k=~P1; k=k&0xf0; if(k!=0)break; j=j<<1;}
k=k+j;
for(i=0;i<16;i++)
if(keytab[i]==k)
break;
return i;
}
long disp2long()//把输入的数字转换为逻辑运算的数字
{
uchar i;long b=0;
for(i=0;i<8;i++)
{ b=b*10+disdata[i];}
return b;
}
void long2disp(long x)//把逻辑运算得到的数字转换为显示数组
{
uchar i;
for(i=8;i>0;i--)
{ disdata[i-1]=x%10;x=x/10;}
}
void keyaction(uchar x) //运算处理
{ uchar i,c;
uchar code err[]={0,0,0,10,11,11,12,11};
if(x<10)//本次是数字键
{if(flag==0) //上一次是数字键
{ for(i=0;i<7;i++)
disdata[i]=disdata[i+1];
disdata[7]=x;//显示本位
}
else//上一次是运算符
{for(i=0;i<7;i++) disdata[i]=0;disdata[7]=x;}
flag=0;
}
else//本次是运算键
{
if(flag==0)//上一次是数字键 则计算
{
switch(op)
{case 10: a=0;break;
case 11:break;
case 12:a=a+disp2long();break;
case 13:a=a-disp2long();break;
case 14:a=a*disp2long();break;
case 15:a=a/disp2long();break;
}
if((a>200000)||(a<-200000) )
{ for(i=0;i<8;i++) disdata[i]=err[i]; }
else
{ if(a<0&&a>-200000)//如果计算结果为负,则添加负号
{ c=0-a;long2disp(c);disdata[0]=0x0d;}
else long2disp(a);
}
}
flag=1;op=x; //前面是符号则覆盖
}
}
void main() //主程序
{
uchar key;

init();
TMOD=0x01;EA=1;ET0=1;
TR0=1;

while(1)
{

key=inkey();
if(key!=16)
{keyaction(key);break;}

}
}

void t0(void) interrupt 1
{uchar i;
TH0=(65536-5000) / 256;
TL0=(65536-5000) % 256;

P0=dispcode[disdata[i]];
P2=dispbitcode[i];
i++;
if(i=8)
i=0;

}

基于51单片机的简易计算器设计,急
\/\/功能 0 1 2 3 4 5 6 7 8 9 + - × ÷ = 清零 表3-1 3.2 计算器的软件设计 include<reg51.h> \/\/头文件 define uint unsigned int \/\/ define uchar unsigned char sbit lcden=P2^3; \/\/定义引脚 sbit rs=P2^4;sbit rw=P2^0;sbit busy=P0^7;char i,j,temp,num,nu...

大神,求51单片机做简易计算器的那个c语言程序
以下是我编的简易计算器程序,基本成功 \/\/4*4键盘检测程序,按下键后相应的代码显示在液晶屏上 \/\/显示5位后,第6次显示操作符号 \/\/再显示下一个数 \/\/ 键值与功能对应表 \/\/键值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \/\/功能 0 1 2 3 4 5 6 7 8 9 + - × ÷ ...

怎样用51单片机做计算器啊?
使用Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力; 在单片机课程设计和全国大学生电子设计竞赛中,我们使用 Proteus 开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,...

51单片机制作简易数字频率计程序
\/\/求千位 x=date%1000\/100; \/\/求百位 c=date%100\/10; \/\/求十位 v=date%10; \/\/求个位 P2=wei[0]; P0=duan[z];

简单的51单片机设计,用8个按键独立控制8个灯的程序!(高分!)要求如下...
void delay(uint z);void main(){ uchar a;a=0x00;P0=0x00;\/\/P0输出; led共阴接法 P1输入按键另一端接地 P0加上拉电阻 P1=0xff;while(1){ P0=0x00;if(P1!=0xff){ a=P1;switch(a){ case 0xfe: P0=0x01;delay(3000);break;case 0xfd: P0=0x02;delay(3000);break;case 0x...

如何设计51单片机系统最小系统?
1、时钟电路51 单片机上的时钟管脚:XTAL1(19 脚) :芯片内部振荡电路输入端。XTAL2(18 脚) :芯片内部振荡电路输出端。2、复位电路在单片机系统中,复位电路是非常关键的,当程序跑飞(运行不正常)或死机(停止运行)时,就需要进行复位。MCS-5l 系列单片机的复位引脚RST( 第9 管脚) 出现2个...

急求51单片机c语言简易程序:二个输入口,分别控制三个输出口
sbit Key1=P3^2;\/\/输入1,不能更改 sbit Key2=P3^3;\/\/输入2,不能更改,因为 51外部中断就这两个IO口是 sbit Out1=P0^0;\/\/输出1 sbit Out2=P0^1;\/\/输出2 void Delay(uint del){ uint i,j;for(i=0; i<del; i++)for(j=0; j<1827; j++);} void INT_Init(){ EX0 = ...

51单片机的简易频率计设计
单片机直接用USB连电脑只能取电不能通讯,通讯的话 需要接口电路,例如USB转TTL的芯片,CH340,PL2303,这样的芯片才可以,如果直接测TTL电平的话 确实不需要其他外围电路了,因为51的信号就是TLL电平的。

51单片机设计的简易的计算器
51单片机设计的简易的计算器 80 4位的数码管,4*4键盘,大家有没有软件程序的呀,我硬件做好了,就差程序了。编程我不怎么在行的。如果有的话请发到wangpeng_8803@126.com谢谢了。... 4位的数码管,4*4键盘,大家有没有软件程序的呀,我硬件做好了,就差程序了。编程我不怎么在行的。如果有的话 请发到...

如何用51单片机做计算器(要求用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)...

相似回答