打印

关于stm32驱动7279的程序

[复制链接]
1548|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
z658290|  楼主 | 2011-7-9 19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <stm32f10x_lib.h>
#include "sys.h"
#include "delay.h"
#include "7279.h"
unsigned char Keynum;
/******************************************************************************
函数名:7279_WriteByte
输  入:dat:一个字节的数据
输  出:void
功  能:7279写入一个字节的数据
******************************************************************************/
static void HD7279_WriteByte(unsigned char dat)
{
unsigned char i;

HD7279_CS=0;   //7279片选开
HD7279_DAT_OUT;   //数据口设置为输出模式
delay_us(10);
for(i=0;i<8;i++)
{
  if(dat&0x80)
  {
   HD7279_DAT=1;
  }
  else
  {
   HD7279_DAT=0;
  }
  HD7279_CLK=1;
  dat = dat<<1;
  delay_us(10);
  HD7279_CLK=0;
  delay_us(10);
}
HD7279_DAT=0;
}
/******************************************************************************
函数名:7279_ReadByte
输  入:void
输  出:dat:读出的一个字节数据
功  能:从7279读出一个字节数据
******************************************************************************/
static unsigned char HD7279_ReadByte(void)
{
unsigned char dat=0,i;
HD7279_WriteByte(HD7279_CMD_READKEY);
HD7279_DAT=1;
HD7279_DAT_IN;   //数据口改为输入模式
HD7279_CLK=0;
delay_us(10);
for(i=0;i<8;i++)
{
  HD7279_CLK=1;
  delay_us(10);
  dat = dat << 1;
  if(HD7279_DAT_R)
  {
   dat = dat + 1;
  }
  HD7279_CLK=0;
  delay_us(10);
}
return dat;
}
/******************************************************************************
函数名:7279_Reset
输  入:void
输  出:void
功  能:复位7279
******************************************************************************/
void HD7279_Reset(void)
{
HD7279_WriteByte(HD7279_CMD_RESET);//复位指令
HD7279_CS=1;        
}
/******************************************************************************
函数名:7279_Init
输  入:void
输  出:void
功  能:7279初始化
******************************************************************************/
void HD7279_Init(void)
{
RCC->APB2ENR=1<<4;//使能时钟PORTC
GPIOC->CRH&=0XFF0000FF; //推挽输出PC10,11,12
GPIOC->CRH|=0X00433300; //PC13浮空输入
GPIOC->ODR=0X3C00;
Ex_NVIC_Config(GPIO_C,13,FTIR);//下降沿触发
MY_NVIC_Init(2,2,EXTI15_10_IRQChannel,2);//抢占2,子优先级2,组2
HD7279_CS=0;//使能HD7279
}
/******************************************************************************
函数名:7279_GetKeyVal
输  入:void
输  出:KeyValue:读出的键盘编号
功  能:从7279读出按键值
******************************************************************************/
unsigned char HD7279_GetKeyVal(void)
{
    unsigned char KeyValue;
    KeyValue = HD7279_ReadByte();
    HD7279_CS=1;
    return KeyValue;
}
void EXTI15_10_IRQHandler(void)
{
Keynum = HD7279_GetKeyVal();
EXTI->PR = 1<<13;  //清除LINE13上的中断标志位
}

7279的点H文件
#ifndef __7279_H
#define __7279_H
//7279 控制命令字
#define HD7279_CMD_READKEY 0x15  //读取键值
#define HD7279_CMD_RESET   0xa4  //复位
#define HD7279_DAT   PCout(10)
#define HD7279_CS    PCout(11)
#define HD7279_CLK  PCout(12)
//7279的IO口配置
#define HD7279_DAT_R     GPIOC->IDR&=1<<10
#define HD7279_DAT_OUT {GPIOC->CRH&=0XFFFFF0FF;GPIOC->CRH|=0X00000300;} //推挽输出
#define HD7279_DAT_IN    {GPIOC->CRH&=0XFFFFF0FF;GPIOC->CRH|=0X00000400;} //浮空输入
u8 HD7279_GetKeyVal(void);
void HD7279_Init(void);

#endif
程序编译没问题,只是读不出按键值。希望大家帮我解决这个问题,是配置的问题?还是其他的问题
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

1

粉丝