OpenEdv-开源电子网

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

关于stm32驱动7279的问题

[复制链接]

4

主题

8

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2011-6-1
在线时间
0 小时
发表于 2011-7-9 17:42:18 | 显示全部楼层 |阅读模式

#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->R = 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
程序编译没问题,只是读不出按键值。希望大家帮我解决这个问题,是配置的问题?还是其他的问题

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-7-9 23:42:03 | 显示全部楼层
回复【楼主位】z658290:
---------------------------------
配置貌似没问题.
你单独测试一下试试.
就是初始化7279之后,测试一下DATA_IN是否正常.其他啥都不干.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2011-6-1
在线时间
0 小时
 楼主| 发表于 2011-7-10 08:37:55 | 显示全部楼层
怎么测试DATA_IN啊。我的程序只有进入7279的初始化之后,液晶就什么都不显示了、、、
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-7-10 09:11:14 | 显示全部楼层
回复【3楼】z658290:
---------------------------------
用杜邦线连接DATA_IN到地后者VCC,看是否可以读到.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2011-6-1
在线时间
0 小时
 楼主| 发表于 2011-7-10 11:05:29 | 显示全部楼层
还是读不到啊。。什么都没显示出来。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-7-10 11:08:33 | 显示全部楼层
回复【5楼】z658290:
---------------------------------
不是让你显示...

比如:
while(1)
{
     if(DATA_IN)LED0=0;
     else LED0=1; 
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2011-6-1
在线时间
0 小时
 楼主| 发表于 2011-7-10 14:48:21 | 显示全部楼层
DATA_IN是中断线还是数据线PC10啊、、、、、竞赛用的平台没有LED灯,有什么其他的办法检测吗
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-7-10 14:55:18 | 显示全部楼层
回复【7楼】z658290:
---------------------------------
你的DATA_IN接在那个脚,就检测哪个脚.
没了LED,可以用串口.
不过串口得加个延时,大概500ms吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2011-1-20
在线时间
7 小时
发表于 2011-7-10 16:30:01 | 显示全部楼层
请在各命令之间增加短延时,原有的延时再长一些试试,有可能stm32的“动作太快”而7279a没反应过来。
回复 支持 反对

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2011-6-1
在线时间
0 小时
 楼主| 发表于 2011-7-10 17:33:20 | 显示全部楼层
试了,不是延时的问题。。。。估计可能是7279的配置的问题。界面总是白屏、、、
回复 支持 反对

使用道具 举报

9

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2011-1-20
在线时间
7 小时
发表于 2011-7-24 09:30:54 | 显示全部楼层
搞定了吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 18:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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