51单片机 矩阵键盘计算器

  • y6_299363
    了解作者
  • C/C++
    开发工具
  • 553KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-02-24 16:17
    上传日期
非常适合新手学习51单片机,利用1602显示,里面有原理图,根据硬件看代码,非常容易理解
计算器.zip
  • 计算器
  • 原理图
  • Sheet1.SchDoc
    181KB
  • PCB1.PcbDoc
    682.5KB
  • PCB_Project1.PrjPCB
    29.8KB
  • 源代码
  • 1602.c
    452B
  • keyboard.h
    356B
  • keyboard.c
    5.8KB
  • calc.hex
    10.9KB
  • calc.uvproj
    13.8KB
  • main.h
    66B
  • keilkill.bat
    399B
  • 1602.h
    291B
  • main.c
    519B
内容介绍
#include "keyboard.h" #include "1602.h" uchar temp=0,wei=0,key=0; uchar jia=0,jian=0,cheng=0,chu=0,dengyu=0,qingling=0; uchar jia0=0,jian0=0,cheng0=0,chu0=0; uchar s0=0,s1=0,s2=0,s3=0,s4=0,s5=0,s6=0; //参加运算的各个位 uchar a0=16,b0=16,c0=16,d0=16,e0=16,f0=16,g0=16; unsigned long qian,hou;//定义参于运算的第一个数和第二个数。 uchar table[16]; void keyscan() { P2=0x7f; temp=P2; temp=temp&0x0f; if(temp!=0x0f) { key_delay(5); if(temp!=0x0f) { temp=P2; switch(temp) { case 0x7e: key=1; write_data(0x30+key); wei++; break; case 0x7d: key=2; write_data(0x30+key); wei++; break; case 0x7b: key=3; write_data(0x30+key); wei++; break; case 0x77: jia=1; write_data('+'); break; } while(temp!=0x0f) { temp=P2; temp=temp&0x0f; } } } P2=0xbf; temp=P2; temp=temp&0x0f; if(temp!=0x0f) { key_delay(5); if(temp!=0x0f) { temp=P2; switch(temp) { case 0xbe: key=4; write_data(0x30+key); wei++; break; case 0xbd: key=5; write_data(0x30+key); wei++; break; case 0xbb: key=6; write_data(0x30+key); wei++; break; case 0xb7: write_data('-'); jian=1; break; } while(temp!=0x0f) { temp=P2; temp=temp&0x0f; } } } P2=0xdf; temp=P2; temp=temp&0x0f; if(temp!=0x0f) { key_delay(5); if(temp!=0x0f) { temp=P2; switch(temp) { case 0xde: key=7; write_data(0x30+key); wei++; break; case 0xdd: key=8; write_data(0x30+key); wei++; break; case 0xdb: key=9; write_data(0x30+key); wei++; break; case 0xd7: cheng=1; write_data('*'); break; } while(temp!=0x0f) { temp=P2; temp=temp&0x0f; } } } P2=0xef; temp=P2; temp=temp&0x0f; if(temp!=0x0f) { key_delay(5); if(temp!=0x0f) { temp=P2; switch(temp) { case 0xee: qingling=1; write_com(0x01); break; case 0xed: key=0; write_data(0x30+key); wei++; break; case 0xeb: dengyu=1; write_data('='); break; case 0xe7: chu=1; write_data('/'); break; } while(temp!=0x0f) { temp=P2; temp=temp&0x0f; } } } } void calc() { uchar gongneng,yunsuan,i; gongneng=jia|jian|cheng|chu|dengyu|qingling; if(gongneng==0) { if(key!=20) { switch(wei) { case 1: a0=key; b0=10; c0=10; d0=10; e0=10; f0=10; g0=10; break; case 2: b0=key; c0=10; d0=10; e0=10; f0=10; g0=10; break; case 3: c0=key; d0=10; e0=10; f0=10; g0=10; break; case 4: d0=key; e0=10; f0=10; g0=10; break; case 5: e0=key; f0=10; g0=10; break; case 6: f0=key; g0=10; break; case 7: g0=key; break; } key=20; } if(a0!=10) s6=a0; if(b0!=10) s5=b0; if(c0!=10) s4=c0; if(d0!=10) s3=d0; if(e0!=10) s2=e0; if(f0!=10) s1=f0; if(g0!=10) s0=g0; } else { yunsuan=jia|jian|cheng|chu; if(yunsuan) { if(jia) {jia=0; jia0=1;jian0=0;cheng0=0;chu0=0;} if(jian) {jian=0;jia0=0;jian0=1;cheng0=0;chu0=0;} if(cheng) {cheng=0;jia0=0;jian0=0;cheng0=1;chu0=0;} if(chu) {chu=0; jia0=0;jian0=0;cheng0=0;chu0=1;} switch(wei) { case 7: qian=s6*1000000+s5*100000+s4*10000+s3*1000+s2*100+s1*10+s0;break; case 6: qian=s6*100000+s5*10000+s4*1000+s3*100+s2*10+s1;break; case 5: qian=s6*10000+s5*1000+s4*100+s3*10+s2;break; case 4: qian=s6*1000+s5*100+s4*10+s3;break; case 3: qian=s6*100+s5*10+s4;break; case 2: qian=s6*10+s5;break; case 1: qian=s6;break; } wei=0; s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;s6=0; } if(dengyu) { dengyu=0; switch(wei) { case 7: hou=s6*1000000+s5*100000+s4*10000+s3*1000+s2*100+s1*10+s0;break; case 6: hou=s6*100000+s5*10000+s4*1000+s3*100+s2*10+s1;break; case 5: hou=s6*10000+s5*1000+s4*100+s3*10+s2;break; case 4: hou=s6*1000+s5*100+s4*10+s3;break; case 3: hou=s6*100+s5*10+s4;break; case 2: hou=s6*10+s5;break; case 1: hou=s6;break; } wei=0; s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;s6=0; if(jia0) {jia0=0; hou=qian+hou;} if(jian0) {jian0=0; hou=qian-hou;} if(cheng0) {cheng0=0; hou=qian*hou;} if(chu0) {chu0=0; hou=qian/hou;} sprintf(table,"%ld",hou); write_com(0x80+0x40); for(i=0;table[i]!=0;i++) { write_data(table[i]); } // while(table[i]!=0) // { // write_data(table[i]); // i++; // } // for(i=0;i<=16;i++) // { // write_data(table[i]); // } } if(qingling) { s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;s6=0; a0=0;b0=0;c0=0;d0=0;e0=0;f0=0;g0=0; jia=0;jian=0;cheng=0;chu=0; jia0=0;jian0=0;cheng0=0;chu0=0; qingling=0;dengyu=0; qian=0;hou=0; memset(table,0,16);//清空数组 } } } void key_delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
评论
    相关推荐
    • 单片机课件
      能够帮助同学们快速的了解单片机并对于单片机的一些设计程序有一定的认知
    • 单片机课件
      单片机的课件及例题, 单片机的课件及例题, 单片机的课件及例题, 单片机的课 件及例题,
    • 爱上单片机
      一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章。本书通过生动的语言...
    • 单片机资料
      内含30个单片机应用开发的资料,包括配套单片机入门PPT。
    • 单片机课件
      单片机课的课件,对单片机的基础进行了全面的概述,也有非常精细的指导。
    • 单片机工具
      单片机工具 供单片机学习使用 免费资源 日后还会有更多资源 请联系我
    • 单片机课件
      单片机课件 ppt文件格式 介绍了单片机的结构、程序设计、定时器、中断等
    • 单片机教程
      这是一个单片机的教程,可以用于初次学习单片机的人学习。
    • 单片机入门
      很好的单片机学习资源,入门比较好适合对单片机的学习有兴趣的人,而且是名校的精彩讲解,
    • 爱上单片机
      《爱上单片机》本书是一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章...