2734|5

28

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

看看这个矩阵键盘扫描。有点难理解 [复制链接]

#include
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={0xee,0xed,0xeb,0xe7,
                                  0xde,0xdd,0xdb,0xd7,
                                  0xbe,0xbd,0xbb,0xb7,
                                  0x7e,0x7d,0x7b,0x77,};
uchar code tab1[]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,
                                   0X80,0X90,0xa0,0x83,0xc9,0x86,0xc1,0xe1};
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
uchar i,j;
void scan();
void display();
void main()
{
        SCON=0;
        while(1)
        {
                scan();
                display();
        }
}
void scan()
{
        uchar temp,temp1;
        P0=0xf0;
        if(P0!=0xf0)
        {
                delay(3);
                if(P0!=0xf0)
                {
                        temp1=P0;
                        P0=0x0f;
                        temp=temp1|P0;
                }
        }
        for(i=0;i<16;i++)
        {
                if(temp==tab) break;
        }
}
void display()
{
        for(j=0;j<6;j++)
        {
                SBUF=tab1;
                while(!TI);
                TI=0;
        }delay(100);
}

clip_image002.gif (71.23 KB, 下载次数: 3)

clip_image002.gif
此帖出自单片机论坛

最新回复

#include #define uchar unsigned char #define uint unsigned int sbit zy=P2^1; sbit yy=P2^2; uchar flag,zyflag,yyflag; uchar code tabp0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff}; uchar code tabp2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef}; void disp(); void delay(uint z) {         uint i,j;         for(i=z;i>0;i--)         for(j=110;j>0;j--); } void main() {         P0=0xfe;         while(1)         {                 disp();         } } void disp() {         if(zy==0)         {                 delay(20);                 if(zy==0)                 {                         while(!zy);                         zyflag=1;                         yyflag=0;                 }         }         if(yy==0)         {                 delay(20);                 if(yy==0)                 {                         while(!yy);                         yyflag=1;                         zyflag=0;                 }         }         if(zyflag==1)         {                 if(flag==11)                 flag=-1;                 flag++;         }         if(yyflag==1)         {                 if(flag==0)                 flag=12;                 flag--;         }                 P0=tabp0[flag];                 P2=tabp2[flag];                 delay(50); }  详情 回复 发表于 2009-7-9 08:11
点赞 关注
个人签名你们这帮人,勤奋约等于零,智慧等于零,加在一起恒等于零
 

回复
举报

2771

帖子

0

TA的资源

裸片初长成(中级)

沙发
 

哪一点不理解?

把问题说清楚.
此帖出自单片机论坛
 
 

回复

440

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 
找本单片机的键盘书看看,这种方法是采用的第二种
此帖出自单片机论坛
 
 
 

回复

28

帖子

0

TA的资源

纯净的硅(初级)

4
 
谢了  谢了阿
此帖出自单片机论坛
 
个人签名你们这帮人,勤奋约等于零,智慧等于零,加在一起恒等于零
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

5
 

时钟显示

#include

#define uchar unsigned char
#define uint unsigned int

uchar data dis_buf[6];
sbit keym2=P2^0;
sbit keym1=P2^3;
sbit keyh1=P2^1;//shijia
sbit keyh2=P2^2;

char sec,min,hour,kk;

uchar code tab[]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90};//0-9编码

void delay(uint N)
{
uint i,j;
for(i=0;i for(j=0;j<112;j++);
}

void zhuanhuan()
{
dis_buf[0] = hour / 10;  // 时十位
dis_buf[1] = hour % 10;  // 时个位
dis_buf[2] = min / 10;  // 分十位
dis_buf[3] = min % 10;  // 分个位
dis_buf[4] = sec / 10;  // 秒十位
dis_buf[5] = sec % 10;  // 秒个位
}

void jiajian()
{
  if(keym1==0)//min加
  {
   delay(10);
   if(keym1==0)
   {
    EA=0;
    min++;
    delay(500);
    if(min==60)
    {
      min=0;
    }
   }
  EA=1;
  }

  if(keym2==0)//min减
  {
   delay(10);
   if(keym2==0)
   {
    EA=0;
    min--;
    delay(500);
   
    if(min==-1)
    {
      min=59;
    }
   }
  EA=1;
  }

if(keyh1==0)//hor加
  {
   delay(10);
   if(keyh1==0)
   {
    EA=0;
    hour++;
    delay(500);
    if(hour==24)
    {
      hour=0;
    }
   }
   EA=1;
  }

  if(keyh2==0)//hor减
  {
   delay(10);
   if(keyh2==0)
   {
    EA=0;
    hour--;
    delay(500);
    if(hour==-1)
    {
      hour=23;
    }
   }
  EA=1;
  }
}

//timer init
void initTimer(void)
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
}

//timer0/counter0 interrupt
void timer0(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0;

kk++;
if(kk==20)
{
  kk=0;sec++;
  if(sec==60)
  {
   sec=0;min++;
   if(min==60)
   {
    min=0;hor++;
    if(hour==24)
    {
     hour=0;
    }
   }
  }
}
}

//the main fun
void main(void)
{
  uchar i;
  min=30;
  hour=12;
  initTimer();
  TR0 = 1;
  ET0 = 1;
  EA  = 1;
  SCON=0x00;
  while(1)
  {
   jiajian();
   zhuanhuan();
   for(i=0;i<6;i++)
        {
                SBUF=tab[dis_buf];
                while(!TI);
                TI=0;
        }
        delay(20);
  }
}

USBSYB原理图.doc

84 KB, 下载次数: 2

时钟显示

此帖出自单片机论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

6
 

控制流水灯

#include
#define uchar unsigned char
#define uint unsigned int
sbit zy=P2^1;
sbit yy=P2^2;
uchar flag,zyflag,yyflag;
uchar code tabp0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff};
uchar code tabp2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef};
void disp();
void delay(uint z)
{
        uint i,j;
        for(i=z;i>0;i--)
        for(j=110;j>0;j--);
}
void main()
{
        P0=0xfe;
        while(1)
        {
                disp();
        }
}
void disp()
{
        if(zy==0)
        {
                delay(20);
                if(zy==0)
                {
                        while(!zy);
                        zyflag=1;
                        yyflag=0;
                }
        }
        if(yy==0)
        {
                delay(20);
                if(yy==0)
                {
                        while(!yy);
                        yyflag=1;
                        zyflag=0;
                }
        }
        if(zyflag==1)
        {
                if(flag==11)
                flag=-1;
                flag++;
        }
        if(yyflag==1)
        {
                if(flag==0)
                flag=12;
                flag--;
        }
                P0=tabp0[flag];
                P2=tabp2[flag];
                delay(50);
}

USBSYB原理图.doc

84 KB, 下载次数: 0

liujianli

此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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