找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1784|回复: 4
打印 上一主题 下一主题
收起左侧

摁第一个键,数码管第一位显示加数1. 摁第二个键,选择加法 摁第三个键,数码管第...

[复制链接]
跳转到指定楼层
楼主
ID:150397 发表于 2017-3-25 14:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>                                                                                                                                                                                                                                                                                                                  #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;

  6. uchar code table[]={
  7. 0x3f,0x06,0x5b,0x4f,
  8. 0x66,0x6d,0x7d,0x07,
  9. 0x7f,0x6f,0x77,0x7c,                  
  10. 0x39,0x5e,0x79,0x71};

  11. uchar jia,dengyu,qian,hou,gongneng,yunsuan,key;


  12. void delayms(uint xms)
  13. {
  14.         uint i,j;
  15.         for(i=xms;i>0;i--)
  16.         for(j=110;j>0;j--);
  17. }


  18. void display(int num)
  19. {
  20.         uchar ge,shi;
  21.         switch(num)
  22.         {
  23.                 case 1:dula=0;
  24.                            P0=table[key];
  25.                            dula=1;

  26.                            wela=0;
  27.                            P0=0xef;
  28.                            wela=1;
  29.                            delayms(5);
  30.                            break;

  31.                 case 2:dula=0;
  32.                            P0=table[key];
  33.                            dula=1;
  34.                            dula=0;

  35.                            wela=0;
  36.                            P0=0xdf;
  37.                        wela=1;
  38.                            delayms(5);
  39.                 case 3:dula=0;
  40.                            P0=table[key];
  41.                            dula=1;
  42.                            dula=0;

  43.                            wela=0;
  44.                            P0=0xbf;
  45.                        wela=1;
  46.                            delayms(5);
  47.                 case 4:ge=key/10;
  48.                            shi=key%10;
  49.                            dula=0;
  50.                            P0=table[ge];
  51.                            dula=1;
  52.                            dula=0;

  53.                            wela=0;
  54.                            P0=0xfe;
  55.                        wela=1;
  56.                            delayms(5);

  57.                            dula=0;
  58.                            P0=table[shi];
  59.                            dula=1;
  60.                            dula=0;

  61.                            wela=0;
  62.                            P0=0xfd;
  63.                        wela=1;
  64.                            delayms(5);
  65.                 }
  66.   
  67. }

  68.        
  69.        
  70. void matrixkeyscan()
  71. {
  72.         int temp;

  73.         P3=0xfe;
  74.         temp=P3;
  75.         temp=temp&0xf0;
  76.         if(temp!=0xf0)
  77.         {
  78.                 delayms(5);
  79.                 temp=P3;
  80.                 temp=temp&0xf0;
  81.                 if(temp!=0xf0)
  82.                 {
  83.                         temp=P3;
  84.                         switch(temp)
  85.                         {
  86.                                 case 0xee:key=1;break;
  87.                                 case 0xde:key=2;break;
  88.                                 case 0xbe:key=3;break;
  89.                                 case 0x7e:key=4;break;               
  90.                         }
  91.                         while(temp!=0xf0)        //等待按键释放
  92.                         {
  93.                                 temp=P3;
  94.                                 temp=temp&0xf0;
  95.                         }
  96.                        
  97.                 }
  98.         }

  99.         delayms(5);
  100.         P3=0xfd;
  101.         temp=P3;
  102.         temp=temp&0xf0;
  103.         if(temp!=0xf0)
  104.         {
  105.                 delayms(5);
  106.                 temp=P3;
  107.                 temp=temp&0xf0;
  108.                 if(temp!=0xf0)
  109.                 {
  110.                         temp=P3;
  111.                         switch(temp)
  112.                         {
  113.                                 case 0xed:key=5;break;
  114.                                 case 0xdd:key=6;break;
  115.                                 case 0xbd:key=7;break;
  116.                                 case 0x7d:key=8;break;       
  117.                        
  118.                         }
  119.                         while(temp!=0xf0)
  120.                         {
  121.                                 temp=P3;
  122.                                 temp=temp&0xf0;
  123.                         }
  124.                 }
  125.         }

  126.         delayms(5);
  127.         P3=0xfb;
  128.         temp=P3;
  129.         temp=temp&0xf0;
  130.         if(temp!=0xf0)
  131.         {
  132.                 delayms(5);
  133.                 temp=P3;
  134.                 temp=temp&0xf0;
  135.                 if(temp!=0xf0)
  136.                 {
  137.                         temp=P3;
  138.                         switch(temp)
  139.                         {
  140.                                 case 0xeb:key=9;break;
  141.                                 case 0xdb:key=0;break;
  142.                                 case 0x7b:key=dengyu;break;       
  143.                         }
  144.                         while(temp!=0xf0)
  145.                         {
  146.                                 temp=P3;
  147.                                 temp=temp&0xf0;
  148.                         }
  149.                 }
  150.         }

  151.         delayms(5);
  152.         P3=0xf7;
  153.         temp=P3;
  154.         temp=temp&0xf0;
  155.         if(temp!=0xf0)
  156.         {
  157.                 delayms(5);
  158.                 temp=P3;
  159.                 temp=temp&0xf0;
  160.                 if(temp!=0xf0)
  161.                 {
  162.                         temp=P3;
  163.                         switch(temp)
  164.                         {
  165.                                 case 0xe7:key=jia;break;
  166.                         }
  167.                         while(temp!=0xf0)
  168.                         {
  169.                                 temp=P3;
  170.                                 temp=temp&0xf0;
  171.                         }
  172.                 }               
  173.         }
  174. }


  175. void main()
  176. {
  177.         while(1)
  178.         {
  179.                 matrixkeyscan();//不停用键盘扫描程序
  180.                 gongneng=jia|dengyu;
  181.                 if(gongneng==0)
  182.                 {
  183.                         qian=key;
  184.                         display(1);
  185.                 }

  186.                 yunsuan=jia;
  187.                 if(yunsuan==1)
  188.                 {
  189.                         display(2);       
  190.                 }
  191.                 if(gongneng==0)
  192.                 {
  193.                         hou=key;
  194.                         display(3);
  195.                 }                       
  196.                 if(dengyu==1)
  197.                 {
  198.                         hou=qian+hou;
  199.                         display(hou);
  200.                 }
  201.         }
  202. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:150397 发表于 2017-3-25 14:04 | 只看该作者
我的显示根本就不对   是哪里错了请大神们指教
回复

使用道具 举报

板凳
ID:82765 发表于 2017-3-25 14:30 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

地板
ID:150397 发表于 2017-3-25 15:04 | 只看该作者
cjjcjj1 发表于 2017-3-25 14:30
你的具体功能要求是什么?

摁第一个键,数码管第一位显示加数1.
摁第二个键,选择加法
摁第三个键,数码管第三位显示加数2
紧接着数码管后两位显示和
回复

使用道具 举报

5#
ID:82765 发表于 2017-3-25 15:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表