| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 2263 人关注过本帖
标题:用矩阵按键输入“0~9”、独立按键输入运算符,数码管显示输入数据及结果,做 ...
只看楼主 加入收藏
bug娃娃
Rank: 2
等 级:论坛游民
帖 子:101
专家分:27
注 册:2019-3-15
结帖率:95.24%
  已结贴   问题点数:20  回复次数:6   
用矩阵按键输入“0~9”、独立按键输入运算符,数码管显示输入数据及结果,做一个简易的10000以内加、减、乘运算。
我想问一下,我在实现用矩阵输入0-9的时候,该如何给值,书上的列子也没有看懂
请问路过的好心人给我解解疑惑吧
搜索更多相关主题的帖子: 矩阵 结果 数据 输入 按键 
2019-10-22 13:03
bug娃娃
Rank: 2
等 级:论坛游民
帖 子:101
专家分:27
注 册:2019-3-15
  得分:0 
附件: 您没有浏览附件的权限,请 登录注册
2019-10-22 13:06
bug娃娃
Rank: 2
等 级:论坛游民
帖 子:101
专家分:27
注 册:2019-3-15
  得分:0 
这是我看的书上的例子
2019-10-22 13:07
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2170
专家分:9835
注 册:2015-3-19
  得分:20 
如何给值?

剑栈风樯各苦辛,别时冰雪到时春
2019-10-23 14:10
bug娃娃
Rank: 2
等 级:论坛游民
帖 子:101
专家分:27
注 册:2019-3-15
  得分:0 
回复 4楼 林月儿
就是给P0的值是如何给的
2019-10-24 12:07
xianfajushi
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:7
帖 子:434
专家分:507
注 册:2007-9-8
  得分:0 
可参https://blog.
2020-01-09 15:50
小焦叔叔
Rank: 1
等 级:新手上路
帖 子:31
专家分:2
注 册:2020-2-15
  得分:0 
我给你一个我自己写的带中断矩阵按键的例子,这种按键是我自己改进的,软件用的是线翻转的读取方法,你仔细研究:



程序代码:
#include"STC12C5A60S2.H"

#define ON 0
#define OFF 1

sbit RS=P2^6;
sbit RW=P2^7;
sbit E=P4^4;

sbit Back_Light=P4^5;

sbit Buzz=P2^5;

unsigned char Key_Code[16]=
{
   0xe7,0xd7,0xb7,0x77,
    0xeb,0xdb,0xbb,0x7b,
    0xed,0xdd,0xbd,0x7d,
    0xee,0xde,0xbe,0x7e
};

unsigned char Num_TAB[10]="0123456789";

void Init_INT();

void Init_LCD();
void Set_xy(unsigned char x,unsigned char y);
void Wcom(unsigned char com);
void WDat(unsigned char Dat);
void Ready();

void Buzz_Start();
void Buzz_Stop();

void Delay();

void main()
{
   P4SW=0xFF;
   Back_Light=ON;

   P1=0xF0;        //这句不能漏,而且只能这样写,否则无法中断

   Init_LCD();
   Init_INT();

   while(1);
}

void Init_INT()
{
   TCON=0x00;
   EX0=1;
   EA=1;
}

void Init_LCD()
{
   Wcom(0x00);
   Wcom(0x06);
   Wcom(0x38);
   Wcom(0x0F);
   Set_xy(0,1);
}

void Read_Key() interrupt 0
{
   unsigned char Key,Key_H,Key_L;
   unsigned char i=0;

   Buzz_Start();

   P1=0x0F;       //用我这种带中断按键,反转是分先后的;别人的不用。
   if(P1!=0x0F)
   {
      Delay();
      if(P1!=0x0F)
      {
         Key_L=P1&0x0F;
      }
   }
   P1=0xF0;
   if(P1!=0xF0)
   {
      Delay();
      if(P1!=0xF0)
      {
         Key_H=P1&0xF0;
      }
   }          
   Key=Key_H|Key_L;

   for(i=0;i<10;i++)
   {
      if(Key==Key_Code[i])
      {
         WDat(Num_TAB[i]);
      }
   }

   while((P1&0xF0)!=0xF0);
   Buzz_Stop();
}

void Set_xy(unsigned char x,unsigned char y)
{
   if(y==1){Wcom(x|0x80);}
   if(y==2){Wcom(x|0xC0);}
}

void Wcom(unsigned char com)
{
   Ready();
   RS=0;
   RW=0;
   E=1;
   P0=com;
   E=0;
}

void WDat(unsigned char Dat)
{
   Ready();
   RS=1;
   RW=0;
   E=1;
   P0=Dat;
   E=0;
}

void Ready()
{
   unsigned char sta;

   P0=0xFF;
   RS=0;
   RW=1;
   do
   {
      E=1;
      sta=P0;
      E=0;
   }
   while(sta&0x80);
}

void Buzz_Start()
{
   Buzz=ON;
}

void Buzz_Stop()
{
   Buzz=OFF;
}

void Delay()
{
   unsigned char t=250;

   while(t--);
}


不懂回头问我
附件: 您没有浏览附件的权限,请 登录注册
2020-02-25 16:29
快速回复:用矩阵按键输入“0~9”、独立按键输入运算符,数码管显示输入数据及结 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.093233 second(s), 8 queries.
Copyright©2004-2020, BCCN.NET, All Rights Reserved