加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ch452的驱动程序

(2012-08-19 19:17:30)
标签:

ch452

msp430g2553

键盘与数码管

杂谈

分类: 单片机

#include "key_ch452.h"
#include <msp430g2553.h>
#include "typedef.h"
#include "uart.h"

//ch452与单片机msp430的接口
/////////////////////////////////////////////


rece_data key_data;

//初始化键盘接收缓冲区
void init_Key_buf(void)
{
    key_data.head = 0;
    key_data.tail = 0;
}

//保存键盘获取的数据
void save_key_data(u8 key)
{
    key_data.buf[key_data.tail] = key;
    key_data.tail = (key_data.tail + 1)%BUF_SIZE;  
}

//获取键盘消息
u8 get_key_data(u8 *key)
{
    if(key_data.head == key_data.tail){
      return 0xff;
    }
    *key = key_data.buf[key_data.head];
    key_data.head = (key_data.head + 1)%BUF_SIZE;
    return *key;
}


void Ch452_Din(u8 fHigh)
{
   if(fHigh){
       P2OUT |= BIT1 ;
   }
   else{
       P2OUT &= ~BIT1;
   }
}


void CH452_Dclk(u8 fHigh)
{
    if(fHigh){
       P2OUT |= BIT0 ;
   }
   else{
       P2OUT &= ~BIT0;
   }
}


void CH452_DLoad(u8 fHigh)
{
   if(fHigh){
       P2OUT |= BIT2;
   }
   else{
       P2OUT &= ~BIT2;
   }
}


u8 Ch452_Out(void)
{
    return (P2IN&BIT3);
}


void Ch452_Write(u16 cmd)
{
    u8 i;
    //关闭所有中断
    CH452_DLoad(0);                                        //命令开始      
    for(i=0;i<12;i++)
                                                           //右移,送入12位数据,低位在前
        Ch452_Din(cmd&0x01);
        CH452_Dclk(0);
        cmd >>= 1;
        CH452_Dclk(1);       
    }
    CH452_DLoad(1);                                    //加载数据
    //开启之前中断   
}


u8 Ch452_Read(void)
{
    u8 Data,Keycode,i;                                //定义命令字,和数据存储器
    Data=0x07;                                                 //输入读452命令字       
    CH452_DLoad(0);
    for(i=0;i<4;i++)                                   
    {
        Ch452_Din(Data&0x01);
       
        CH452_Dclk(0);                        
        Data=Data>>1;           //往右移一位
        CH452_Dclk(1);          //产生时钟上升沿锁通知CH452输入位数据
    }
    CH452_DLoad(1);            //产生加载上升沿通知CH452处理命令数据

    Keycode=0;
    CH452_Dclk(1);
    //清除keycode
    for(i=0;i<7;i++)
    {
       Keycode <<= 1;                     //数据移入keycode,高位在前,低位在后
       if (Ch452_Out()){
            Keycode++;                 //从高到低读入CH452的数据
       }
                          //产生时钟下升沿通知CH452输出下一位
       CH452_Dclk(0);
       CH452_Dclk(1);
                
    return(Keycode & 0x3f);                                             //反回键值 
}

//初始化ch452
void init_Ch452(void)
{
    P2DIR &= ~BIT3;             //Dout
    P2DIR |= BIT2;              //Load
    P2DIR |= BIT0;              //Dclk
    P2DIR |= BIT1;           //Din
    Ch452_Write(0x201);          //reset
    Ch452_Write(0x402);         //只开启键盘  
    init_Key_buf();             //初始化键盘缓冲区
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有