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

发布者:数字航海家最新更新时间:2012-08-15 来源: 51hei关键字:单片机控制  矩阵键盘  计算器 手机看文章 扫描二维码
随时随地手机看文章
/*-----------------------------------------------------
程序设计:胥学辰-----绝对原创!
设计时间: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				   
关键字:单片机控制  矩阵键盘  计算器 引用地址:基于单片机控制12864显示矩阵键盘输入的计算器

上一篇:一个简单的51单片机操作系统的实现
下一篇:CH451驱动的数码管+按键+电子表+温度程序

推荐阅读最新更新时间:2024-03-16 13:05

12864并口方式显示程序
12864并口方式显示程序 #include reg52.h unsigned char code IC _DAT ; sbit RS=P3^6; //RS= H ,表示DB7--DB0为显示数据, //RS= L ,表示DB7--DB0为显示指令数据 sbit WRD = P2^5; //R/W= H ,E= H ,数据被读到DB7--DB0 //R/W= L ,E= H→L , DB7--DB0的数据被写到IR或DR sbit E = P2^6; //使能信号 sbit PSB = P2^3; //H:并口方式 L:串口方式 void Tran
[单片机]
单片机实验板2011_V1.1-LCD12864液晶显示
/***********************************************************/ /*模块名 :LCD12864控制显示 */ /*创建人 :ClimberWin 日期:2011-03-12 */ /***********************************************************/ #include reg51.h #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit LCD
[单片机]
单片机实验板2011_V1.1-LCD<font color='red'>12864</font>液晶显示
单片机控制GSM手机的技术及应用
随着科技的飞速发展和人民生活水平的不断提高,手机的普及率越来越高,更新也越来越快,价格也越来越便宜。因为手机工作的无线网络覆盖范围广,在信息传递方面性能稳定、可靠,所以把手机作为信息传递的载体,与单片机结合起来构成应用系统有着强大的生命力和广阔的应用空间,特别是在远程数据传输、远程监控等领域更是受到电子设计应用工程师的关注。一些专业刊物也介绍了一些有关这方面的文章,然而由于手机的控制指令复杂,数据格式繁琐,工程技术人员在进行单片机与手机的硬软件接口设计时经常会遇到很多困难,有时还无资料可查。笔者在完成一个项目的开发过程中,针对几种手机进行了大量的测试和实验,在此基础上归纳出一些带规律性的结论,对此结论,工程设计人员可拿来即用,大大缩
[单片机]
51单片机控制HD61202液晶显示C语言程序
//写汉字液晶程序 液晶屏分为4行/8列汉字,全部使用模拟接口方式。 /////////////////////////////////////////////////////////////////////////////////////////////////// 连线图: / /LCM---89C52/ /LCM---89C52/ /LCM-------89C52/ /LCM----------89C52/ / /DB0---P1.0/ /DB4---P1.4
[单片机]
矩阵键盘扫描原理详解——单片机
根据原理图 键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平
[单片机]
<font color='red'>矩阵键盘</font>扫描原理详解——单片机
12864(带字库)显示图形和汉字-51程序
// HS12864-15B程序 图形显示和汉字显示 // st7920控制器 #include stdio.h #include reg52.h #include absacc.h #define lcd_bus P0 // 数据总线 sbit rs =P2^4; // 数据&指令选择,H:写数据,L:写指令 sbit rw =P2^3; // 读&写选择,H:read,L:write sbit e =P2^2; // 读写使能 sbit psb=P2^1; // psb=H,并口模式, psb=L,串口模式 sbit rst=P2^5;
[单片机]
单片机控制的网络交换机设计与实现
随着计算机性能的提高及通信量的聚增,传统局域网已经越来越超出了自身负荷,交换式以太网技术应运而生,大大提高了局域网的性能。网络交换机能显著的增加带宽,可以建立地理位置相对分散的网络。局域网交换机的每个端口可并行、安全、实时传输信息,而且性能稳定、结构灵活、易于安装、便于管理,能很好地满足企业网和电信运营商宽带接入的需求。 1 网络交换机的硬件设计 随着人们对网络应用中的安全性和高带宽的需求,网络交换机的用途越来越广。本交换机采用了AL101芯片的ROX总线,将3个8口交换芯片连接起来,组成了1个24端口交换机,满足了用户对多交换端口的需求。 1.1 电路性能要求 交换机的高速PCB电路板,在EMC和ESD上都有比
[单片机]
STC12C2052AD单片机控制的改进型调压电路
0 引言 在ZXC10通信 电源 系统中,上位机输出的PWM调制信号的频率为1 kHz,而且系统要求 电源 能根据PWM信号的占空比进行调压。即对电源输出电压在40 Vdc~60 Vdc范围内通过此PWM信号进行线性调节。PWM信号5%占空比对应40±0.5 Vdc,95%的占空比对应60±0.5 Vdc。以前此功能是用带有D/A的单片机来实现.即把PWM调制信号输入单片机,通过单片机来计算PWM信号的占空比,再根据PWM信号的占空比与输出电压的关系,并通过D/A转换来产生用于调节输出电压的偏移量,最后通过此偏移量和电源输出反馈量的共同作用来实现调压。 1 单片机调压系统 通过带有D/A的单片机来实现调压系统的方框图如图1
[模拟电子]
STC12C2052AD<font color='red'>单片机控制</font>的改进型调压电路
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved