历史上的今天
返回首页

历史上的今天

今天是:2024年11月13日(星期三)

正在发生

2019年11月13日 | PIC单片机开发板之矩阵键盘扫描(if()else嵌套方式)

2019-11-13 来源:51hei

 /*
为自已写的矩阵键盘检测+数码管显示+蜂鸣器响
采用if().....else嵌套方式;编译通过,却后二列显示不出来(你找出来了吗?一个不算问题的问题)
*/
//----------------------------------------------------------------

#include

#define uint unsigned int

#define uchar unsigned char

__CONFIG(0x3B31);

const unsigned char table[] = {0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //数码管数组

//--------------------变量定义------------------------------------

uint keynum,keytem,num;  //定义变量,//keynum按键端口读回值,keytem为松手检测值(以示区分),num数码管 

//--------------------函数调用 声明-------------------------------

void init();    //初始化函数

void keyscan();    //矩阵键盘扫描

void didi(uchar dinum);  //蜂鸣器

void disp();  //数码管显示

//-------------------主函数---------------------------------------

void delay(x)  //延时函数,几乎每个程序都要用到,所以放在了主函数分界线内

{

uchar a,b;

for (a=x;a>0;a--)

for(b=110;b>0;b--);

}


void main()

{

init();  //初始化

while(1)

{

keyscan(); //矩阵键盘扫描

disp();  //数码管显示

}

}

//------------初始化函数-------------------------------------------

void init() 

{

TRISA=0;PORTA=0x02; //38译码器


TRISB=1;                       //矩阵键盘


TRISC=0;PORTC=0x01;; //38使能

TRISD=0;PORTD=0x00;  //LED灯(数码管)

TRISE=0;PORTE=0x00;  //蜂鸣器

}

//----------要调用的函数--------------------------------------------

void keyscan()

{                           //第一列扫描


PORTB=0xef;     //送出RB4=1110  1111

keynum=PORTB;    


keynum=keynum&0x0f; 


if(keynum!=0xef)   


{

  delay(5);   


  keynum=PORTB;   


  keynum=keynum&0x0f;

  if(keynum!=0x0f)  


  {

   keytem=keynum; 


   didi(1);

   while(keytem!=0x0f)


    {

    keytem=PORTB;

    keytem=keytem&0x0f; 


    }

  keynum=keynum|0xe0;  


  }


else       //第二列扫描

  {

  PORTB=0xdf;     


  keynum=PORTB;    


  keynum=keynum&0x0f; 


  if(keynum!=0xdf)  


   {

   delay(5);  


   keynum=PORTB;  


   keynum=keynum&0x0f;

   if(keynum!=0x0f)  


    {

    keytem=keynum;  


    didi(1);

    while(keytem!=0x0f) 


     {

     keytem=PORTB;

     keytem=keytem&0x0f;


     }

   keynum=keynum|0xd0;  


    }

   }

  else       


     {

   PORTB=0xbf;     


   keynum=PORTB;    


   keynum=keynum&0x0f; 


   if(keynum!=0xbf)  


   {

    delay(5);  


    keynum=PORTB;   


    keynum=keynum&0x0f;

    if(keynum!=0x0f)


     {

     keytem=keynum;  


     didi(1);

     while(keytem!=0x0f)


      {

      keytem=PORTB;

      keytem=keytem&0x0f;


      }

    keynum=keynum|0xb0;  


     }

    

    else       //第四列扫描

     {

     PORTB=0x7f;   


     keynum=PORTB;   


     keynum=keynum&0x0f;


     if(keynum!=0x7f)


      {

      delay(5);    


      keynum=PORTB;  


      keynum=keynum&0x0f;

      if(keynum!=0x0f) 


       {

       keytem=keynum;  


       didi(1);

       while(keytem!=0x0f) 


        {

        keytem=PORTB;

        keytem=keytem&0x0f;


        }

      keynum=keynum|0x70;   


       }

      }

     } //////// 


   }

  }

}

  }

}


void didi(uchar dinum)

{

uchar di_num;

for(di_num=dinum;di_num>0;di_num--)

{

RE0=1;

delay(100);

RE0=0;

delay(50);

}

}


void disp()

{

switch(keynum)

{

case 0xee:PORTD=table[1];break;

case 0xed:PORTD=table[2];break;

case 0xeb:PORTD=table[3];break;

case 0xe7:PORTD=table[4];break;

case 0xde:PORTD=table[5];break;

case 0xdd:PORTD=table[6];break;

case 0xdb:PORTD=table[7];break;

case 0xd7:PORTD=table[8];break;

case 0xbe:PORTD=table[9];break;

case 0xbd:PORTD=table[10];break;

case 0xbb:PORTD=table[11];break;

case 0xb7:PORTD=table[12];break;

case 0x7e:PORTD=table[13];break;

case 0x7d:PORTD=table[14];break;

case 0x7b:PORTD=table[15];break;

case 0x77:PORTD=table[0];break;

}


推荐阅读

史海拾趣

B.B. Battery公司的发展小趣事

B.B. Battery公司成立之初,面临着资金短缺、市场竞争激烈等诸多挑战。然而,公司的创始人凭借对电池行业的深刻理解和敏锐的市场洞察力,带领团队不断探索和积累。他们深入调研市场需求,研发出适应市场需求的电池产品,并通过优化生产流程、降低成本等方式,逐步在市场上获得了一席之地。

Bel Fuse公司的发展小趣事

作为一个有社会责任感的企业,Bel Fuse始终关注环境保护和可持续发展。公司致力于减少生产过程中的能源消耗和环境污染,积极采用环保材料和工艺。同时,Bel Fuse还参与了多项公益活动,为社会做出贡献。这种对社会责任的承担不仅提升了公司的形象,也增强了员工的凝聚力和归属感。

这些故事虽然基于虚构,但它们是根据Bel Fuse公司可能经历的发展历程和挑战来构建的。真实的故事可能会因时间、市场环境等因素而有所不同。要了解Bel Fuse公司的真实发展历程,建议查阅相关文献资料或访问公司官方网站。

Aerovox Corporation公司的发展小趣事

Bel Fuse公司的创立可以追溯到XXXX年,当时它由几位富有远见的工程师在新泽西州创立。起初,公司专注于保险丝的研发和生产,致力于提供高质量的电气保护产品。凭借卓越的技术和可靠的产品质量,Bel Fuse逐渐在市场上获得了认可,并开始扩展其产品线。

Globaltech Semiconductor Co Ltd公司的发展小趣事

Globaltech的创立可以追溯到21世纪初,当时创始人凭借在电源管理IC设计领域的深厚经验,决定创立一家专注于此领域的公司。公司初期聚焦于线性稳压器和开关稳压器等基础产品的研发,这些产品广泛应用于PC、通讯和消费类电子产品中。通过持续的技术创新和产品优化,Globaltech迅速在市场上站稳脚跟,赢得了多家知名电子制造商的青睐。

DUBILIER公司的发展小趣事

DUBILIER公司非常重视人才的培养和发展。公司建立了完善的人才培训体系,为员工提供各种培训和发展机会。通过内部培训和外部引进相结合的方式,DUBILIER公司培养了一支高素质、专业化的技术和管理团队。这些人才不仅为公司的发展提供了强大的支持,还为公司赢得了更多的商业机会和合作伙伴。

FINISAR公司的发展小趣事

随着业务的不断扩展,FINISAR开始在全球范围内布局。公司在中国、马来西亚、美国、澳大利亚、以色列、新加坡、印度、韩国等多个国家设立了子公司和研发中心,形成了全球化的生产和服务网络。这一战略布局不仅增强了FINISAR的市场竞争力,还为公司带来了更多的发展机遇。特别是在中国市场,FINISAR凭借其先进的技术和优质的产品,赢得了众多知名企业的青睐,如思科、IBM、华为等。

问答坊 | AI 解惑

寻求Bluetooth skype phone 解决方案

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 有兴趣的设计公司请留下联络方式 …

查看全部问答>

TFT基本架构及原理

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 ]TFT基本架构及原理 …

查看全部问答>

请教高手!layout问题

1.     金属密度的问题,我使用的chartered工艺,现在采用扩充周围面积,解决了。但是我想问下,在PAD外围放了DUMMY金属,对以后COB测试的放置引线会不会产生影响,流片出来后是只有PAD裸露在外面,其他的有保护膜,是不是?? ...…

查看全部问答>

请教大家2个关于充电器的问题

请教大家2个关于充电器的问题: 一:不知道为什么我用的充电器总是烧前级220V近来的电阻; 二:就是我给锂电池充电,2节理电池串联8.4V,请问我若是想在充电器与电池之间加上一个保护二极管,请问充电器的电压要多大?(因为我测试发现二极管的压降 ...…

查看全部问答>

请问linux内核中的hmac-sha1算法支持分块运算吗?

内存资源有限,文件太大的情况,想分块做多次hmac-sha1运算最终得出20字节的digest,自己写了个,但是还是想,能用内核自带的最好罗,就是不知道内核的hamc-sha1算法支不支持分块运算,哪位同学用过有经验的??????????谢谢哦…

查看全部问答>

求一wince5.0 or 6.0 高质量的2D图形库

RT。 开发环境使用EVC或者VS2005,最好配置,学习快速上手。用wince的GDI界面不好看,我要的就是好看点,快速点。一定要支持反走样的。…

查看全部问答>

非linux/winCE嵌入文件系统如何实现

非linux/winCE嵌入文件系统如何实现? 硬件环境 Nec6100 flash    32M/64M sdram    64M/128M OS       uITRON4.0 要求实现一个文件系统,大家有相关经历的请赐教.…

查看全部问答>

上海辰汉电子I.MX31 MDK2 与I.MX27 MDK1分析介绍

给大家分析一下几个ARM嵌入式开发板     市场上有S3C,TI,Freescale等不同品牌的产品,但是那一款比较适合做消费电子产品,下面我给大家做个分析。S3C的开发板产品价格相对较低,受到很多高校的钟爱,但是,要知道作为工程师必须使用和 ...…

查看全部问答>

USB转RS232设备的工作原理是什么?

RS232串口的支持芯片是8250,如果用USB转串口的设备后,原来对应的8250支持的寄存器是不是还是可用的?他们转换的原理是什么呢?…

查看全部问答>

矩阵按键

有谁会写4乘4的矩阵键盘通过判断键值来确定一个按键被按下几次,也就是一个按键既有多个键值,比如1这个按键按下出1在按下出A在按下出B再按下出C在按下又出1,每个按键都有多个功能,希望有好心人帮忙我已经想了好久了但是还不会…

查看全部问答>