OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4350|回复: 6

求助基于CD4532的八线三线译码器的单片机C程序

[复制链接]

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-8-12
在线时间
0 小时
发表于 2014-8-12 11:10:57 | 显示全部楼层 |阅读模式
5金钱
我用CD4532给8个按键做编码用单片机检测控制LED灯,检测到有键按下打开一个LED灯,在按下相同的键让LED关闭。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-12 23:38:57 | 显示全部楼层
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-8-12
在线时间
0 小时
 楼主| 发表于 2014-8-13 18:11:47 | 显示全部楼层
我的程序写出来了,但是按键不灵,请帮忙看看吧。万分感谢
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-8-12
在线时间
0 小时
 楼主| 发表于 2014-8-13 18:12:39 | 显示全部楼层
static Uint8  key_scan()
{
Uint8 key1,key2,key3;     
    key1=K1;
key2=K2;
key3=K3; 
delay_ms(10);
key1=K1;
key2=K2;
key3=K3;
// delay_ms(15);
/* if(key1==key2==key3==0) // D0  000  Q0 Q1 Q2
  {
     
   key_value=Keystate0;
 

  } */
 if(key1==1&&key2==0&&key3==0) // D1  100  Q0 Q1 Q2 HORN
  {
  
   if(key1==1&&key2==0&&key3==0)
       {return Keyvalue1;}
   
 
    
  // key_value=Keystate0;
 //  nn++;
 //  delay_ms(10);
//    if(nn==1)
//    {
//  Key_LED=0;
// nn=0;
// key_value=Keystate1;
//    }
  
 
  }
 if(key1==1&&key2==1&&key3==0) //D2  110  Q0 Q1 Q2 Key_Lamp
  {
//    delay_ms(25);
     if(key1==1&&key2==1&&key3==0)
  {

//    key_value=Keystate;
//    Key_Lamp=1;
   return Keyvalue2;
 }
 
  }
 if(key1==0&&key2==1&&key3==0)    //D3  010  Q0 Q1 Q2 Key_LED    left
  {
//         delay_ms(25);
//          if(key1==0&&key2==1&&key3==0)
//    key_value=Keystate;
//    Key_Lamp=0;
//    {
// KEY_LED_ON;
    return Keyvalue3;
//    }
 
  }
 if(key1==0&&key2==0&&key3==1)    //D4  001  Q0 Q1 Q2 Key_LED1   right
  {
//    delay_ms(20);
//      if(key1==0&&key2==0&&key3==1)
// {
        
return Keyvalue4;

// }
// Key_initled();
//   Key_LED=1;
  }
   if(key1==1&&key2==0&&key3==1)    //D5  101  Q0 Q1 Q2  _PWM=0;  motor-
  {
    
       return Keyvalue5;
 
  }
if(key1==0&&key2==1&&key3==1)    //D6  011  Q0 Q1 Q2  _PWM=1; motor+
  {
   
        return Keyvalue6;
 
  }
if(key1==1&&key2==1&&key3==1)   //D7  111  Q0 Q1 Q2  Lamp1
  {
    
        return Keyvalue7;
 
  }


  //return Keynull;
}
这个是键值扫描部份
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-8-12
在线时间
0 小时
 楼主| 发表于 2014-8-13 18:13:19 | 显示全部楼层
void getkey()
{
static U8 Key_state=Keystate0;
static U8 Key_timercount=0;

static U8 LastKey=Keynull;
// static U8 SADD=0;

Key_Temp=key_scan();
// ++Key_state;
switch(Key_state)
{
case Keystate0: {//  delay_ms(15);
if(Key_Temp==0x01)
{
delay_ms(50);
if(Key_Temp==0x01)
{
Key_state=Keystate1;
//  ++SADD;
KEY_HORN_ON;

}


}

  if(Key_Temp==0x02)
{
// delay_ms(20);
// if(Key_Temp==0x02)
// {
Key_state=Keystate1;
//  ++SADD;

KEY_LAMP_ON;
// }
}

  if(0X03==Key_Temp)
{

// if(0x03==Key_Temp)
// {
Key_state=Keystate1;
//  ++SADD;
KEY_LED_ON;
   delay_ms(25);
// }
}

  if(0x04==Key_Temp)
{

// if(Key_Temp==0x04)
// {
Key_state=Keystate1;
//  ++SADD;
KEY_LED1_ON;
delay_ms(25);
// }
}

//   delay_ms(35);
}

break;
case Keystate1: { // delay_ms(15);
if(Key_Temp==0x01)
{
// delay_ms(20);
// if(Key_Temp==0x01)
// {
// LastKey=Key_Temp;
Key_state=Keystate2; 
Key_timercount=1;
// }
//  ++SADD;
// KEY_LED_OFF;
}
    if(Key_Temp==0x02)
{
// LastKey=Key_Temp;
Key_state=Keystate2; 
Key_timercount=2;

//  ++SADD;
// KEY_LED_OFF;
}
  if(0X03==Key_Temp)
{

//    if(0X03==Key_Temp)
//    {
// LastKey=Key_Temp;
Key_state=Keystate0; 
Key_timercount=3;

//  ++SADD;
KEY_LED_OFF; 
delay_ms(25);
// }
}
  if(0x04==Key_Temp)
{

// if(0x04==Key_Temp)
// {
// LastKey=Key_Temp;
Key_state=Keystate0; 
Key_timercount=4;  
KEY_LED1_OFF; 
delay_ms(25);
// }

//  ++SADD;

}
//  delay_ms(35);


break;  这个是按键片理部份
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-8-12
在线时间
0 小时
 楼主| 发表于 2014-8-13 18:14:23 | 显示全部楼层
我用定时器做的 单片机是STC15W408AS  无外接晶振 void timer0_init()
{
AUXR|=0X80;
TMOD=0X00;
TL0=0xe0;
TH0=0xb1;
TR0=1;
ET0=1;
EA=1;
}
/* */
void timer0_isr() interrupt 1 using 1
{
count++;
if(count>=90)
{
count=0;
// key_scan();
getkey();
// motor_speedctr();
// Key_TS=~Key_TS;
}
}
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-8-12
在线时间
0 小时
 楼主| 发表于 2014-8-13 18:14:59 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
请帮忙看看,万分感谢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 04:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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