矩阵键盘——矩阵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);
              Ke
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值