求。用89C51单片机设计4*4矩阵式键盘计算器程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求。用89C51单片机设计4*4矩阵式键盘计算器程序相关的知识,希望对你有一定的参考价值。

4*4矩阵式键盘 能计算 0——9 的加法即可 “加数”“被加数” “和”的数值等能用 七段数码管 显示出来 并带有清零功能
我 QQ 472592893@qq.com 带 PROTEUS 电路图 或图片 谢谢广大专家们

/*我写的这个计算器可以算255范围以内的整数计算,本打算再加入小数与做最后的处理工作。可是又太费时间,所以就放那里了。看见了你的提问,也懒得改一改,你看看能不能用。*/

#include<reg51.h>

unsigned char Line,Row,Val;

void delay()

 unsigned char count;

 for(count=0;count<255;count++)

  ;

void delay1()

 unsigned char count,rt;

 for(count=0;count<40;count++)

  for(rt=0;rt<100;rt++)

  ;

void InitialCPU(void)

 P0=0xFF;

 P1=0x0F;

 P2=0xFF;

 P3=0xFF;

unsigned char leddata[]=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;  //"0-9"

unsigned char ledbai(unsigned char dat)

 

 unsigned char bai;

 bai=dat/100;

 if(bai==0)

  return 0x00;

 P2=0x20;

 P0=leddata[bai]; 

 delay();

 P2=0x00;

 return 0x00;

unsigned char ledshi(unsigned char dat)

 

 unsigned char shi;

 shi=(dat%100)/10;

 if(shi==0)

  return 0x00;

 P2=0x40;

 P0=leddata[shi];

 delay();

 P2=0x00;

 return 0x00;

void ledge(unsigned char dat)

 unsigned char ge;

 ge=dat%10;

 P2=0x80;

 P0=leddata[ge];

 delay();

unsigned char bin=1;

void ledplay(unsigned char dat)

 //LED显示函数

 if(bin==1)

  ledbai(dat);

  bin++;

 

 else if(bin==2)

  ledshi(dat);

  bin++;

 

 else if(bin==3)

  ledge(dat);

  bin=1;

 

unsigned char futemp=0,data1=0,data2=0; 

void InitialTimer0(void)

 TMOD=0x01;

 TH0=(65536-1000)/256;

 TR0=1;      //启动T0

 EA=1;

 ET0=1;      //允许T0中断

void Timer0(void) interrupt 1 using 3

 TR0=0;

 if(data1==0&&futemp==0&&data2==0)  //LED显示data1,即初始值

  ledplay(data1);

   

 else if(data1!=0&&futemp==0&&data2==0) // data1有值了,显示data1,

  ledplay(data1);

 else if(data1==0&&futemp!=0&&data2==0) //有两种可能,1、数据data1为零;2、直接data1没有给它值。总之显示data1

  ledplay(data1);

 else if(data1!=0&&futemp!=0&&data2==0) //输入的是符号,接着显示data1

  ledplay(data1);  

 else if(data1!=0&&futemp!=0&&data2!=0) //显示的是data2

  ledplay(data2);

 TH0=(65536-100)/256;

 TR0=1;

void denghou()

 data2=0;

 futemp=0;

unsigned char KeyTemp,CheckValue,Key1=0x00,Key2=0x00;

void Dispose()

 unsigned char Val;

 if(Line==0x01)

  Line=0;

 else if(Line==0x02)

  Line=1;

 else if(Line==0x04)

  Line=2;

 else if(Line==0x08)

  Line=3;

 if(Row==0x10)

  Row=0;

 else if(Row==0x20)

  Row=1;

 else if(Row==0x40)

  Row=2;

 else if(Row==0x80)

  Row=3;

 Val=Line*4+Row;

 if(Val<10)      //存数

  if(futemp==0)    //存在data1中

   if(data1==0)

    data1=Val;

   else

    data1=data1*10+Val;

  

  else    //存在data2中

   if(data2==0)

    data2=Val;

   else

    data2=data2*10+Val;

  

  

 else if(Val>9&&Val<16)

  if(Val!=13&&Val!=12)

   futemp=Val;   //存符号并进行响应处理

  else if(Val==12)

   data1=0;

   data2=0;

   futemp=0;    

  

  else if(Val==13)

   if(futemp==10)

    data1=data1*data2;

    denghou();

   

   else if(futemp==11)

    data1=data1/data2;

    denghou();

   

   else if(futemp==14)

    data1=data1-data2;

    denghou();

   

   else if(futemp==15)

    data1=data1+data2;

    denghou(); 

   

   else

    while(1)

     P2=0xff;

     P0=0x00;

    

   

  

 

 else

  while(1)

  P2=0xff;

  P0=0x00;

       //显示错误

unsigned char GetKey1(void)

 P1=0x0F;

 CheckValue=P1^0x0F;

 if(CheckValue==0x00)

  return 0x00;

 else if(CheckValue==0x01)

  Line=CheckValue;

 else if(CheckValue==0x02)

  Line=CheckValue;

 else if(CheckValue==0x04)

  Line=CheckValue;

 else if(CheckValue==0x08)

  Line=CheckValue;

 Key1=0x0F;

 return Key1; 

unsigned char GetKey2(void)

 P1=0xF0;

 CheckValue=P1^0xF0;

 if(CheckValue==0x00)

  return 0x00;

 else if(CheckValue==0x10)

  Row=CheckValue;

 else if(CheckValue==0x20)

  Row=CheckValue;

 else if(CheckValue==0x40)

  Row=CheckValue;

 else if(CheckValue==0x80)

  Row=CheckValue;

 delay1();

 KeyTemp = P1^0xF0;

 if(KeyTemp==CheckValue)

  return 0x00;

 Key2=0xF0;

 return Key2; 

void main()

 unsigned char Key1,Key2;

 InitialCPU();

 InitialTimer0();

 while(1)

  

  Key1=GetKey1();

  Key2=GetKey2();

  if(Key1!=0x00&&Key2!=0x00)

  

   Dispose();

   P3=0x00;

  

 

参考技术A 呵呵...这个来找我也是可以的

基于单片机矩阵键盘的电子密码锁设计-毕设课设资料

【资源下载】下载地址:点击下载(807) 百度网盘

密码锁具体功能介绍:       

        本系统由51单片机系统、矩阵键盘、LED显示和报警系统组成。系统能完成开锁、超次锁定、报警、修改用户密码基本的密码锁的功能。除上述基本的密码锁功能外,还具有掉电存储、声光提示等功能,依据实际的情况还可以添加遥控功能。

本系统成本低廉,功能实用,适合做期末或者毕业设计

 

 

 

 

 

以上是关于求。用89C51单片机设计4*4矩阵式键盘计算器程序的主要内容,如果未能解决你的问题,请参考以下文章

51单片机,用c语言,如何用矩阵键盘为一个变量char a赋值?已设计出一个函数,使得每按一个矩阵

怎么用51单片机4*4键盘实现简单计算器 就要加减就可以 汇编语言 麻烦可

89c51单片机延时问题,怎么求出延时是100ms,求详细回答。

3.4 51单片机-矩阵键盘

51单片机 4×4键盘矩阵控制条形LED显示+ Proteus仿真

51单片机 数码管显示(0 -F)+4×4键盘矩阵按键输入