2262|2

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助4X4C程序及显示程序 [复制链接]

哪位提供以下,新手不知道怎么写

最新回复

这是我以前写的矩阵键盘数码管显示程序,很容易看懂的。 #include #include #define uchar unsigned char #define uint unsigned int uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,                     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};//共阴代码 uchar code bite[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //数码管位选代码 uchar key=16; void show(uchar date,uchar num) {         P0=tab[date];     P1=bite[num]; } uchar Tkey() {           uchar readkey;           uchar x_temp,y_temp;                           P2=0x0f;           x_temp=P2&0x0f;           if(x_temp==0x0f) goto keyout;           P2=0xf0;           y_temp=P2&0xf0;           readkey=x_temp|y_temp;           readkey=~readkey;         switch(readkey)            {          case 0x11:key=0; break;          case 0x21:key=1; break;              case 0x41:key=2; break;              case 0x81:key=3; break;              case 0x12:key=4; break;              case 0x22:key=5; break;              case 0x42:key=6; break;              case 0x82:key=7; break;              case 0x14:key=8; break;              case 0x24:key=9; break;              case 0x44:key=10;break;              case 0x84:key=11;break;              case 0x18:key=12;break;              case 0x28:key=13;break;              case 0x48:key=14;break;              case 0x88:key=15;break;              default:  key=16;break;        }     keyout:_nop_();     return key; } void main() {     while(1)      {         key=Tkey();         show(key,0);      } }   详情 回复 发表于 2009-11-15 10:54
点赞 关注

回复
举报

4

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
还有一个是ATmega16写的,注释是少了点,毕竟是刚开始学的时候没那个习惯,将就看吧,还是比较容易看懂的。

/*--------------------------------------------------------------------
作者:    MCU_虫子
程序名称:4*4按键扫描程序
程序功能:键盘扫描,数码管显示并保持按键值
注意事项:PC输入口初始设置为输入状态,同时使能为内部上拉电阻(因为这两个口
          在按键没有按下时处于悬空状态,易受外界干扰,所以最好将其内部
                  上拉电阻使能,使其平时处于高电平状态),检测按键是否按下。
提示说明:
输    入:键盘输入
返    回:按键值
--------------------------------------------------------------------*/
/*
    K4-----K5-----K6-----K7
     |      |      |      |
    03H----02H----01H----00H -K0
    07H----06H----05H----04H -K1
    0BH----0AH----09H----08H -K2
    0FH----0EH----0DH----0CH -K3
*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define DUAN_DDR     DDRA
#define DUAN_PORT    PORTA
#define WEI_DDR      DDRB
#define WEI_PORT     PORTB
#define KEY_DDR      DDRC
#define KEY_PORT     PORTC
#define KEY_PIN      PINC
uchar key;
const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};//共阴
const bite[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选码
const uchar setSta_[4]={0xfe,0xfd,0xfb,0xf7};      
const uchar getSta_[4]={0x70,0xb0,0xd0,0xe0};
void delay(uchar z)
{
         uchar x,y;
         for(x=z;x>0;x--)
          for(y=120;y>0;y--);
}
void show(uchar i,uchar j)
{
    DDRA=0XFF;
        PORTA=table;
        DDRB=0XFF;
        PORTB=bite[j];
}  
uchar GetKeyVal()
{
    uchar i,j,getSta,keyVal;
   
    for(i=0;i<4;i++)              
    {                  
        KEY_PORT = setSta_;
        delay(10);      
        if(KEY_PIN!=setSta_)
        {
            getSta=KEY_PIN&0xf0;
            for(j=0;j<4;j++)   
                if(getSta==getSta_[j])                                 
             {
                    keyVal=j+i*4;
                                        key=keyVal;
                    return keyVal;
             }
        }
    }
    return 16;
}
void main()
{
    uchar keyVal;
    WEI_DDR = 0XFF;
    KEY_DDR = 0X0F;
        KEY_PORT|= 0XF0;//输入口最好使能上拉电阻,否则会有干扰  
    while(1)
    {
        keyVal = GetKeyVal();
                if(keyVal!=16)
                {
         show(keyVal,0);
                }
                else
                 show(key,0);
    }
}


 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这是我以前写的矩阵键盘数码管显示程序,很容易看懂的。
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};//共阴代码
uchar code bite[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //数码管位选代码
uchar key=16;
void show(uchar date,uchar num)
{
        P0=tab[date];
    P1=bite[num];

}

uchar Tkey()
{
          uchar readkey;
          uchar x_temp,y_temp;
       
       
          P2=0x0f;
          x_temp=P2&0x0f;
          if(x_temp==0x0f) goto keyout;
          P2=0xf0;
          y_temp=P2&0xf0;
          readkey=x_temp|y_temp;
          readkey=~readkey;


        switch(readkey)
           {
         case 0x11:key=0; break;
         case 0x21:key=1; break;
             case 0x41:key=2; break;
             case 0x81:key=3; break;
             case 0x12:key=4; break;
             case 0x22:key=5; break;
             case 0x42:key=6; break;
             case 0x82:key=7; break;
             case 0x14:key=8; break;
             case 0x24:key=9; break;
             case 0x44:key=10;break;
             case 0x84:key=11;break;
             case 0x18:key=12;break;
             case 0x28:key=13;break;
             case 0x48:key=14;break;
             case 0x88:key=15;break;
             default:  key=16;break;
       }

    keyout:_nop_();
    return key;
}

void main()
{
    while(1)
     {
        key=Tkey();
        show(key,0);
     }
}
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表