×
单片机 > 单片机程序设计 > 详情

基于单片机控制12864显示矩阵键盘输入的计算器

发布时间:2020-05-30 发布时间:
|
/*-----------------------------------------------------
程序设计:胥学辰-----绝对原创!
设计时间:2011-10-13辰时----2011-10-13午夜。
程序功能:
1:可以对输入的两个数字进行加减剩除运算。
2:可以连续运算。例如:12-2=10,再按减等于8,可以依次减下去。
3:运算完成后显示,再按返回键可以进入最初界面,继续运算。
程序按键:
1:进入运算界面:15.
2:确定输入:14
3:加法:13
4:减法:12
5:乘法:11
6:除法:10
7:返回:9
程序缺点:
1:由于键盘有限,没有设置更改键,必须返回重新输入!
2:暂时不能进行负数运算!

完整版本的程序下载地址:
http://www.51hei.com/f/1286411.rar  
----------------------------------------------------------*/  
[page]
#include
#define uchar unsigned char
#define uint unsigned int
#define ulint unsigned long int
ulint m=0,m1=0;
ulint m2;
uchar xdata flag=1,flag1=1,flag2=0,flag3=0,flag4=0,flag5=0;
uchar flag6=0,flag7=0,flag8;
uchar data Mi0,Mi,Mi1,Mi2,Mi3,Mi4,Mi5,num,temp,key1,k,j=0,j1=0;
sbit rs=P2^6;
sbit rw=P2^5;
sbit en=P2^7;
sbit psb=P2^2;
uchar dat_Shuru_1[8]={0,0,0,0,0,0,0,0};
uchar dat_Shuru_2[8]={0,0,0,0,0,0,0,0};
uchar data table_Ts_1[]="15:运算输入!14:确定输入!13:重输输入!12:返回输入!输入:结果:";
void delay(uchar z)
{
    uchar x,y;
 for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}
uchar key()
{
   P3=0xfe;
   temp=P3;
   temp=temp&0xf0;
   while(temp!=0xf0)
    {
     delay(10);
     temp=P3;
     temp=temp&0xf0;
     while(temp!=0xf0)
     {
      temp=P3;
     switch(temp)
      {
       case 0xee:num=0;Mi=1;
        break;
       case 0xde:num=1;Mi=1;
        break;
       case 0xbe:num=2;Mi=1;
        break;
       case 0x7e:num=3;Mi=1;
        break;
      }
      
     while(temp!=0xf0)
      {
       temp=P3;
       temp=temp&0xf0;
      // k=0;
      }
     }
    }

   P3=0xfd;
   temp=P3;
   temp=temp&0xf0;
   while(temp!=0xf0)
    {
     delay(10);
     temp=P3;
     temp=temp&0xf0;
     while(temp!=0xf0)
     {
      temp=P3;
     switch(temp)
      {
       case 0xed:num=4;Mi=1;
        break;
       case 0xdd:num=5;Mi=1;
        break;
       case 0xbd:num=6;Mi=1;
        break;
       case 0x7d:num=7;Mi=1;
        break;
      }
     
     while(temp!=0xf0)
      {
       temp=P3;
       temp=temp&0xf0;
      
      }
     }
    }


   P3=0xfb;
   temp=P3;
   temp=temp&0xf0;
   while(temp!=0xf0)
    {
     delay(10);
     temp=P3;
     temp=temp&0xf0;
     while(temp!=0xf0)
     {
      temp=P3;
     switch(temp)
      {
       case 0xeb:num=8;Mi=1;
        break;
       case 0xdb:num=9;Mi1=1;Mi0=1;
        break;
       case 0xbb:num=10;Mi1=1;Mi2=1;
        break;
       case 0x7b:num=11;Mi1=1;Mi3=1;
        break;
      }
     // k=1;
     while(temp!=0xf0)
      {
       temp=P3;
       temp=temp&0xf0;
      
      }
     }
    }


   P3=0xf7;
   temp=P3;
   temp=temp&0xf0;
   while(temp!=0xf0)
    {
     delay(10);
     temp=P3;
     temp=temp&0xf0;
     while(temp!=0xf0)
     {
      temp=P3;
     switch(temp)
      {
       case 0xe7:num=12;Mi1=1;Mi4=1;
        break;
       case 0xd7:num=13;Mi1=1;Mi5=1;
        break;
       case 0xb7:num=14;Mi1=1;
        break;
       case 0x77:num=15;Mi1=1;
        break;
      }
     // k=1;
     while(temp!=0xf0)
      {
       temp=P3;
       temp=temp&0xf0;
      
      }
     }
    }
return num;

}
void write_com(uchar com)
{
   rs=0;
   rw=0;
   P0=com;
   delay(5);
   en=1;
   delay(5);
   en=0;
}
void write_data(uchar dat)
{
   rs=1;
   rw=0;
   P0=dat;
   delay(5);
   en=1;
   delay(5);
   en=0;
}
void write_Yunsuan(uchar add,ulint Jg)
{
   uchar xdata gw,sw,bw,qw,ww,ws,wb,wq;
   {
   gw=Jg%10;
   sw=Jg/10%10;
   bw=Jg/100%10;
   qw=Jg/1000%10;
   ww=Jg/10000%10;
   ws=Jg/100000%10;
   wb=Jg/1000000%10;
   wq=Jg/10000000%10;
   write_com(0x88+add);
   if(wq!=0)
   {
   write_data(0x30+wq);
   }
   if(wq!=0||wb!=0)
   {
   write_data(0x30+wb);
   }
   if(wq!=0||wb!=0||ws!=0)
   {
   write_data(0x30+ws);
   }
   if(wq!=0||wb!=0||ws!=0||ww!=0)
   {
   write_data(0x30+ww);
   }
   if(wq!=0||wb!=0||ws!=0||ww!=0||qw!=0)
   {
   write_data(0x30+qw);
   }
   if(wq!=0||wb!=0||ws!=0||ww!=0||qw!=0||bw!=0)
   {
   write_data(0x30+bw);
   }
   if(wq!=0||wb!=0||ws!=0||ww!=0||qw!=0||bw!=0||sw!=0)
   {
   write_data(0x30+sw);
   } 
   write_data(0x30+gw);
}
}
void Tishi_Huanying(uchar add,uchar i1,uchar i2)
{
    uchar i;
 write_com(add);
 for(i=i1;i					
					
					


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式