矩阵键盘——矩阵LED

C语言还是不怎么熟练

#include <ioCC2530.h>

#define uint unsigned int
#define uchar unsigned char

//定义控制LED灯的端口
#define LED1 P1_0   //LED1为P1.0口控制
#define KEY1 P0_0      //KEY1为P0.0口控制

//函数声明
void Delay_ms(uint);
void initUART(void);
void UartSend_String(char *Data,int len);

void Delayms(uint);     //延时函数
void InitLed(void);     //初始化LED1
void KeyInit();                 //按键初始化
void KeyScan();
void UseKey();
int L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12;
/****************************
延时函数
*****************************/
void Delayms(uint xms)   //i=xms 即延时i毫秒
{
 uint i,j;
 for(i=xms;i>0;i--)
   for(j=587;j>0;j--);
}

void Delay_ms(uint n)
{
     uint i,j;
     for(i=0;i<n;i++)
     {
     for(j=0;j<1774;j++);
     }
}


/****************************
      LED初始化函数
*****************************/
void InitLed(void)
{
  P1DIR |= 0x01;    //P1_0定义为输出
  P1INP |= 0X01;    //打开下拉 
  P0DIR |= 0xf3;    //P0-0 0-1 0-4 0-5 0-6 0-7定义为输出
  P0INP |= 0Xf3;    //打开下拉  
  P0_0 = 1;P0_1 = 1;P0_4 = 1;P0_5 = 1;P0_6 = 1;P0_7 = 1;P1_0 = 1;//LED初始化
}

/****************************************************************
   串口初始化函数              
****************************************************************/
void InitUART(void)
{ 
    PERCFG = 0x00;            //位置1 P0口
    P0SEL |= 0x0c;            //P0_2,P0_3用作串口(外部设备功能)
    P2DIR &= ~0XC0;                   //P0优先作为UART0

    U0CSR |= 0x80;            //设置为UART方式
    U0GCR |= 8;                    
    U0BAUD |= 59;             //波特率设为9600
    UTX0IF = 0;                       //UART0 TX中断标志初始置位0
}
/****************************************************************
串口发送字符串函数           
****************************************************************/
void UartSend_String(char *Data,int len)
{
  int j;
  for(j=0;j<len;j++)
  {
    U0DBUF = *Data++;
    while(UTX0IF == 0);
    UTX0IF = 0;
  }
}

/****************************
     按键初始化函数
*****************************/
void InitKey()
{
  P1DIR |= 0x3c;    //P1_2 1-3 1-4 1-5定义为输出
  P1INP |= 0X3c;    //打开下拉 
  P1_2 = 0;P1_3 = 0;P1_4 = 0;P1_5 = 0;

  P1SEL &= ~0Xc0;    //设置P1-6 1-7 为普通IO口  
  P1DIR &= ~0Xc0;    //设置为输入模式 
  P1INP &= ~0xc0;    //打开P1-6 1-7上拉电阻

  P2SEL &= ~0X01;    //设置P2-0为普通IO口  
  P2DIR &= ~0X01;    //设置为输入模式 
  P2INP &= ~0x01;    //打开P2-0上拉电阻
}

void KeyScan()
{
  P1DIR &= ~0x3c;    //P1_2 1-3 1-4 1-5定义为输入
  P1INP &= ~0X3c;    //打开上拉 

  P1DIR |= 0Xc0;    //设置为输出模式 
  P1INP |= 0xc0;    //打开P1-6 1-7上拉电阻

  P2DIR |= 0X01;    //设置为输出模式 
  P2INP |= 0x01;    //打开P2-0上拉电阻
  P1_6 = 0;P1_7 = 0;P2_0 = 0;
}

/****************************
     按键检测函数
*****************************/
void UseKey()
{
  if(P1_6 ==0||P1_7 ==0||P2_0 ==0)
     { 
        Delayms(30);
        if(P1_6 ==0||P1_7 ==0||P2_0 ==0)
        {
           if(P1_6 ==0)//第一列
           {
              Delayms(30);
              KeyScan();
              Delayms(30);
              if(P1_2 ==0)
              { 
                 while(!P1_2);
                 P0_6 = 0, P0_7 = 1, P1_0 = 1; 
                 P0_1 = 1, P0_4 = 1, P0_5 = 1;
                 if(L1 == 0)
                 {
                    UartSend_String("^010101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_0 = 0;
                    L1 = 1;
                    L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
                 else
                 {
                     UartSend_String("^010102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_0 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              if(P1_3 ==0)
              { 
                 while(!P1_3);
                 P0_6 = 0, P0_7 = 1, P1_0 = 1; 
                 P0_0 = 1, P0_4 = 1, P0_5 = 1;
                 if(L2 == 0)
                 {
                    UartSend_String("^040101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_1 = 0;
                    L2 = 1;
                    L1 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
                 else
                 {
                     UartSend_String("^040102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_1 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              if(P1_4 ==0)
              {  
                 while(!P1_4);
                 P0_6 = 0, P0_7 = 1, P1_0 = 1; 
                 P0_0 = 1, P0_1 = 1, P0_5 = 1;
                 if(L3 == 0)
                 {
                    UartSend_String("^070101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_4 = 0;
                    L3 = 1;
                    L1 = L2 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
                 else
                 {
                     UartSend_String("^070102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_4 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              if(P1_5 ==0)
              { 
                 while(!P1_5);
                 P0_6 = 0, P0_7 = 1, P1_0 = 1; 
                 P0_0 = 1, P0_1 = 1, P0_4 = 1;
                 if(L4 == 0)
                 {
                    UartSend_String("^100101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_5 = 0;
                    L4 = 1;
                    L1 = L2 = L3 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
                 else
                 {
                     UartSend_String("^100102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_5 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              InitKey();
           }
           if(P1_7 ==0)//第二列
           {
             Delayms(30);
               KeyScan();
               Delayms(30);
              if(P1_2 ==0)
              { 
                 while(!P1_2);
                 P0_6 = 1, P0_7 = 0, P1_0 = 1; 
                 P0_1 = 1, P0_4 = 1,P0_5 = 1;
                  if(L5 == 0)
                 {
                    UartSend_String("^020101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(500);                   //延时
                    P0_0 = 0;
                    L5 = 1;
                    L1 = L2 = L3 = L4 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
                 else
                 {
                     UartSend_String("^020102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_0 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              if(P1_3 ==0)
              { 
                 while(!P1_3);
                 P0_6 = 1, P0_7 = 0, P1_0 = 1; 
                 P0_0 = 1, P0_4 = 1,P0_5 = 1;
                  if(L6 == 0)
                 {
                    UartSend_String("^050101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_1 = 0;
                    L6 = 1;
                    L1 = L2 = L3 = L4 = L5 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
                 else
                 {
                     UartSend_String("^050102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_1 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              if(P1_4 ==0)
              {  
                 while(!P1_4);
                 P0_6 = 1, P0_7 = 0, P1_0 = 1; 
                 P0_0 = 1, P0_1 = 1, P0_5 = 1;
                  if(L7 == 0)
                 {
                    UartSend_String("^080101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_4 = 0;
                    L7 = 1;
                    L1 = L2 = L3 = L4 = L5 = L6 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
                 else
                 {
                     UartSend_String("^080102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_4 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              if(P1_5 ==0)
              { 
                 while(!P1_5);
                 P0_6 = 1, P0_7 = 0, P1_0 = 1; 
                 P0_0 = 1, P0_1 = 1, P0_4 = 1;
                  if(L8 == 0)
                 {
                    UartSend_String("^110101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_5 = 0;
                    L8 = 1;
                    L1 = L2 = L3 = L4 = L5 = L6 = L7 = L9 = L10 = L11 = L12 = 0;
                 }
                 else
                 {
                     UartSend_String("^110102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_5 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              InitKey();
           }
           if(P2_0 ==0)//第三列
           {
              Delayms(30);
              KeyScan();
              Delayms(30);
              if(P1_2 ==0)
              { 
                 while(!P1_2);
                 P0_6 = 1, P0_7 = 1, P1_0 = 0; 
                 P0_1 = 1, P0_4 = 1,P0_5 = 1;
                  if(L9 == 0)
                 {
                    UartSend_String("^030101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_0 = 0;
                    L9 = 1;
                    L1 = L2 = L3 = L4 = L6 = L7 = L8 = L5 = L10 = L11 = L12 = 0;
                 }
                 else
                 {  
                     UartSend_String("^030102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_0 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              if(P1_3 ==0)
              { 
                 while(!P1_3);
                 P0_6 = 1, P0_7 = 1, P1_0 = 0; 
                 P0_0 = 1, P0_4 = 1,P0_5 = 1;
                  if(L10 == 0)
                 {
                    UartSend_String("^060101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_1 = 0;
                    L10 = 1;
                    L1 = L2 = L3 = L4 = L5 = L7 = L8 = L9 = L6 = L11 = L12 = 0;
                 }
                 else
                 {
                     UartSend_String("^060102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_1 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              if(P1_4 ==0)
              {  
                 while(!P1_4);
                 P0_6 = 1, P0_7 = 1, P1_0 = 0; 
                 P0_0 = 1, P0_1 = 1, P0_5 = 1;
                  if(L11 == 0)
                 {
                    UartSend_String("^090101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_4 = 0;
                    L11 = 1;
                    L1 = L2 = L3 = L4 = L5 = L6 = L8 = L9 = L10 = L7 = L12 = 0;
                 }
                 else
                 {
                     UartSend_String("^090102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_4 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              if(P1_5 ==0)
              { 
                 while(!P1_5);
                 P0_6 = 1, P0_7 = 1, P1_0 = 0; 
                 P0_0 = 1, P0_1 = 1, P0_4 = 1;
                  if(L12 == 0)
                 {
                    UartSend_String("^120101$",8); //串口发送数据 //串口发送数据
                    Delay_ms(50);                   //延时
                    P0_5 = 0;
                    L12 = 1;
                    L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = 0;
                 }
                 else
                 {
                     UartSend_String("^120102$",8); //串口发送数据 //串口发送数据
                     Delay_ms(50);                   //延时
                     P0_5 = 1;
                     L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
                 }
              }
              InitKey();
           }
        }
     } 
}

/***************************
      主函数
***************************/
void main(void)
{
  CLKCONCMD &= ~0x40;               //设置系统时钟源为32MHZ晶振
  while(CLKCONSTA & 0x40);          //等待晶振稳定为32M
  CLKCONCMD &= ~0x47;               //设置系统主时钟频率为32MHZ  
  InitUART();
  InitLed();        //调用初始化函数
  InitKey();
  L1 = L2 = L3 = L4 = L5 = L6 = L7 = L8 = L9 = L10 = L11 = L12 = 0;
  while(1)
  { 
      UseKey();//按键检测
  }
}

猜你喜欢

转载自blog.csdn.net/qq_34446162/article/details/82464722
今日推荐