智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1767|回复: 7
打印 上一主题 下一主题

独立键盘和矩阵键盘的问题

[复制链接]

30

主题

264

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4664
QQ
威望
2397
贡献
1297
兑换币
1553
注册时间
2013-7-26
在线时间
485 小时
跳转到指定楼层
1#
发表于 2013-7-27 20:47:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
是否可以用键盘的一个键,实现控制电机的运动与关闭?
我的程序如下:
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
void PWM_Init(void)

{
   PWMPOL=0X20;      //***选择通道的极性****
   
   PWMCAE=0X20;      //***选择对齐方式*****
   
   PWMCLK=0X20;
   PWMPRCLK=0X00;    //*****  确定通道5的时钟   *****  
   PWMSCLA=0X80;                                                                  //   ****************************************
                                                                                  //**********     用PWM5控制使电机工作  ******
   PWMCTL=0X00;      //*****   不级联   ******                                    //   ****************************************
   
   PWMPER5=128;      //*****   确定通道5的通道周期为128  *******
   
   PWMDTY5=0;      //*****   确定通道5的占空比为0  *****
   
   PWME=0X20;        //*****   通道5使能   ****
   
}
void delay(){
  int i=1000;
  while(i--);
}

void main(void)
{
  /* put your own code here */
   
  for(;;)
{
     
     if(PTT_PTT4==0)
     {
       delay();
      if(PTT_PTT4==0)
       {
          PWMDTY5=40;
           PWM_Init();
        }
      
      
      if(PTT_PTT4==0)
       {
        delay();
         if(PTT_PTT4==0)
        {
           PWMDTY5=0;
           PWM_Init();
        }
      }
}
   
这里用的是独立键盘的KEY3,谢谢大家了,求解啊!
     

23

主题

315

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
12109

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

威望
6110
贡献
2589
兑换币
1855
注册时间
2012-2-2
在线时间
1705 小时
2#
发表于 2013-7-27 22:09:03 | 只看该作者
你的第一次按下按键后,付给了一次占空比50,然后初始化PWM,但是在初始化里占空比被付为0,所以执行完占空比仍然为0,没有用了,是不是这样不能用的
回复 支持 反对

使用道具 举报

30

主题

264

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4664
QQ
威望
2397
贡献
1297
兑换币
1553
注册时间
2013-7-26
在线时间
485 小时
3#
 楼主| 发表于 2013-7-28 09:11:19 | 只看该作者
if(PTT_PTT4==0)
       {
          PWMDTY5=40;
           PWM_Init();
        }
第一个if改成这样可以独立运行,但是还是不能做到一个按键控制电机的两种状态
回复 支持 反对

使用道具 举报

8

主题

324

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1209

活跃会员奖章优秀会员奖章

威望
528
贡献
373
兑换币
291
注册时间
2013-7-24
在线时间
154 小时
4#
发表于 2013-7-28 17:30:03 | 只看该作者
第一:你的程序中没有松手检测的程序
第二:传值的时候应该用形参的方式给PWMDTY,否则你的函数调用中,PEMDTY依然是初始化函数里的值。。。。。
回复 支持 反对

使用道具 举报

30

主题

264

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4664
QQ
威望
2397
贡献
1297
兑换币
1553
注册时间
2013-7-26
在线时间
485 小时
5#
 楼主| 发表于 2013-7-30 10:30:20 | 只看该作者
℡单身旅行 发表于 2013-7-28 17:30
第一:你的程序中没有松手检测的程序
第二:传值的时候应该用形参的方式给PWMDTY,否则你的函数调用中,PE ...

   松手检测?我刚开始学几天,这个不懂,能否给我个参考?谢谢了!
回复 支持 反对

使用道具 举报

8

主题

324

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1209

活跃会员奖章优秀会员奖章

威望
528
贡献
373
兑换币
291
注册时间
2013-7-24
在线时间
154 小时
6#
发表于 2013-7-30 11:03:08 | 只看该作者
伤痕我心 发表于 2013-7-30 10:30
松手检测?我刚开始学几天,这个不懂,能否给我个参考?谢谢了!

比如你的这个程序   for(;;)
{
     
     if(PTT_PTT4==0)
     {
       delay();
      if(PTT_PTT4==0)
       {
          PWMDTY5=40;
           PWM_Init();
        }
要在 PWM_Init();   后面加上while(PTT_PTT4==0 );就是for(;;)
{
     
     if(PTT_PTT4==0)
     {
       delay();
      if(PTT_PTT4==0)
       {
          PWMDTY5=40;
           PWM_Init();          while( !PTT_PTT4); //当按下按键,PTT4=0;while语句永远真,程序就卡在这里,当松开按键,语句位假,就跳出了
        }

松手检测就是这个意思   矩阵键盘原理类似。。。。。我以为是新手,有什么错误请指出
回复 支持 反对

使用道具 举报

30

主题

264

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4664
QQ
威望
2397
贡献
1297
兑换币
1553
注册时间
2013-7-26
在线时间
485 小时
7#
 楼主| 发表于 2013-7-31 16:05:13 | 只看该作者
℡单身旅行 发表于 2013-7-30 11:03
比如你的这个程序   for(;;)
{
     

谢谢啊,这个程序的思想,在其他的程序中也用到过,Thank you very much !
回复 支持 反对

使用道具 举报

8

主题

324

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1209

活跃会员奖章优秀会员奖章

威望
528
贡献
373
兑换币
291
注册时间
2013-7-24
在线时间
154 小时
8#
发表于 2013-7-31 16:06:33 | 只看该作者
伤痕我心 发表于 2013-7-31 16:05
谢谢啊,这个程序的思想,在其他的程序中也用到过,Thank you very much !

不客气,互相学习嘛、、、、
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 13:29 , Processed in 0.096849 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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