简单的51单片机计算器程序 - 范文中心

简单的51单片机计算器程序

07/29

请支持原创,谢谢

1、电路图

2、程序:

/***********************************************************************************************************design by DX from GDOU**************************** **********************************************************/

#include

#include

#define uint8 unsigned char

sbit led1=P1^0;

sbit led2=P1^1;

sbit led3=P1^2;

sbit led4=P1^3;

long int count1,count2; //存放上次的输入和现在的输入

uint8 symbol,p; //存放符号的数值 p 用于多数输入清屏作用

long int outputcount; //存放结果

uint8 KeyCodeTable[]={0x28,0x14,0x24,0x44,0x12,0x22,0x42,0x11,0x21,0x41,

0x18,0x88,0x84,0x82,0x81,0x48}; //键盘按键特征表

int table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90} ;//不懂

uint8 a[4];

void init()

{

uint8 j;

a[0]=0xc0;

for(j=1;j

{

a[j]=0xff;

}

count1=0;

count2=0;

symbol=0;

p=0;

outputcount=0;

}

void delayms(int x) //延时程序

{

uint8 i;

while(x--) for(i=0;i

}

void display() //LED显示

{

P0 = a[0];

led1=0;

delayms(5);

led1=1;

P0 = a[1];

led2=0;

delayms(5);

led2=1;

P0 = a[2];

led3=0;

delayms(5);

led3=1;

P0 = a[3];

led4=0;

delayms(5);

led4=1;

}

uint8 keyscan() //键盘扫描

{

uint8 sCode,kCode,i,k;

P2=0xf0;

if((P2&0xf0)!=0xf0)

{

delayms(2); //软件去抖

if((P2&0xf0)!=0xf0)

{

sCode=0xfe;

for(k=0;k

{

P2=sCode;

delayms(12);

if((P2&0xf0)!=0xf0)

{

kCode=~P2;

for(i=0;i

if(kCode==KeyCodeTable[i])

return(i);

}

else

sCode=_crol_(sCode,1);

}

}

}

return(100); //没按键输入

}

void output(long int x)

{

int i;

uint8 j=0;

uint8 z[3]={0,0,0} ;

if(x>=1000)

{ i=x/1000;

z[0]=i;

a[j]=table[i];

j++; }

if(x>=100)

{ i=(x-z[0]*1000)/100;

z[1]=i;

a[j]= table[i];

j++; }

if(x>=10)

{ i=(x-z[0]*1000-z[1]*100)/10;

z[2]=i;

a[j]= table[i];

j++; }

i=x%10;

a[j]=table[i];

}

void Calculate(uint8 key) //计算程序并显示LED

{

uint8 i,j;

static k=0;

if(key

{

if(p)

{

p=0;

for(j=0;j

{

a[j]=0xff;

}

}

a[k]=table[key];

k=++k%4;

count2*=10;

count2+=key;

outputcount=count2; //把当前按下的值先赋给outputcount

}

else if(key==10) //清零键

{ k=0 ;

init();

}

else if(key

{ k=0;

p=1;

switch(symbol) //多则运算时用于把之前的结果赋给COUNT1 {

case 0 :count1=count2 ;break;

case 11:count1+=count2;break;

case 12:count1-=count2;break;

case 13:count1*=count2;break;

case 14:count1/=count2;break;

default: break;

}

count2=0; //有符号输入时把之前的值赋给count1, 并把符号标号赋给symbol;

symbol=key;

}

else

{

switch(symbol)

{

case 11:outputcount=count1+count2;break;

case 12:outputcount=count1-count2;break;

case 13:outputcount=count1*count2;break; case 14:outputcount=count1/count2;break; default:break;

}

for(j=0;j

{

a[j]=0xff;

}

output(outputcount);

}

}

void main()

{

uint8 key;

init();

P0=0xff;

led1=1;

led2=1;

led3=1;

led4=1;

while(1)

{

display();

if((key=keyscan())!=100)

{ while((keyscan())!=100) ;

Calculate(key); }

}

}


相关内容

  • 单片机八路抢答器课设
    目录 前言................................................................ 1 1.1设计背景及意义 ..................................... ...
  • 89c51抢答器制作
    郑州科技学院 本科课程设计论文 题 目 专 业 姓 名 学 号 指导老师 郑州科技学院信息工程学院 二〇一四年 摘要 ............................................................. ...
  • 自动化专业英语翻译
    B 计算机与网络基础 计算机系统的组成 在说明了什么是计算机之后,让我们在来看一下计算机的定义:计算机是一种能接收.存储和处理数据,并能产生输出结果的快速.精确的符号加工系统,这一系统是在存储指令程序控制下工作的.本文说明为什么计算机是一个 ...
  • ARM与单片机的区别
    1.软件方面 这应该是最大的区别了.引入了操作系统.为什么引入操作系统?有什么好处嘛? 1)方便.主要体现在后期的开发,即在操作系统上直接开发应用程序.不像单片机一样一切都要重新写.前期的操作系统移植工作,还是要专业人士来做. 2)安全.这 ...
  • 电子设计大赛设计报告
    2012年福建省大学生电子设计竞赛 指导教师:林惠君 吴建宁 连桂仁 自平衡小车系统 摘要 我们采用模块化设计的方法,设计了一款基于STC12C5A60S2单片机的自平衡小车系统,实现了题目中的基本要求和发挥部分的全部内容. 本系统基于ST ...
  • 交流电量同步采集
    河南机电高等专科学校 毕业设计(论文) 交流电量同步采集 系 部: 自动控制系 专 业: 电气自动化 班 级: xxxxx xx 姓 名: xxxx xxx xx 学 号: xxx xxx xx x 指导老师: xxx 二零一二年五月 第一 ...
  • 智能捕鼠器
    摘 要 当今社会,人们的生活水平和生活方式都在不断的提高,智能化已经在我们 生活中得到了实施.随着科学技术的进步和人们生活条件的友好改善,各种智能设备在人们的生活中不断出现,使人们的生活越来越方便和舒适.其中以单片机为核心实现的智能捕鼠器因 ...
  • 知网论文检测查重报告样板20**年
    打印 文本复制检测报告单(全文标明引文) №:ADBD2015R_[***********]0527152407xxxxx 检测时2015-05-27 15:24:07 间: 检测文献: 红外防盗报警系统 作者: XX(xxxxxxxx) ...
  • 单片机 四路抢答器
    课程设计说明书 (2009/2010学年第二学期) 课程名称 :题 目 :专业班级 :学生姓名 :学 号 :指导教师 :设计周数 :设计成绩 : 单片机应用课程设计 四路抢答器 电气2班 韩昱 苗敬利 两周(10.6.28-10.07.09 ...
  • 频率计数器
    一.实验目的 本应用系统实验的目的是通过在"单片机原理及应用"课堂上学习的知识,以及查阅资料,培养一种自学的能力.并且引导一种创新的思维,把学到的知识应用到日常生活当中.在设计的过程中,不断的学习,思考和同学间的相互讨论 ...