搜索
bottom↓
回复: 0

怎么修改使按键按下去第一个灯亮,而不是前面四个灯亮。

[复制链接]

出0入0汤圆

发表于 2013-4-14 14:20:55 | 显示全部楼层 |阅读模式
看我的程序哪出现问题,怎么改啊
IO口如图片所示
#include "iom16v.h"
#include "macros.h"
#include <AVR_PQ1A.h>                //包含自定义常量头文件
#define uchar unsigned char
#define uint unsigned int
unsigned char  F_Rotation[4]={0xF1,0xF2,0xF4,0xF8}; //正转表格,换算成二进制 0000 0001,0000 0010,0000 0100,0000 1000
unsigned char  B_Rotation[4]={0xF8,0xF4,0xF2,0xF1}; //反转表格

void delay(uint ms)
{
        uint i,j;
        for(i=0;i<ms;i++)
           {
           for(j=0;j<1141;j++);
       }
           }
//顺时针转动          
void MotorCW()
{

unsigned char i;
     {
    DDRB = 0xFF;
        for(i=0;i<4;i++)      //4相
          {
          PORTB=F_Rotation[i];  //输出对应的相 可以自行换成反转表格
          delay(1);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
                 }
       }
}
//逆时针转动       
void MotorCCW()
{

unsigned char i;
     {
    DDRB = 0xFF;
        for(i=0;i<4;i++)      //4相
          {
          PORTB=B_Rotation[i];  //输出对应的相 可以自行换成反转表格
          delay(1);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
                 }
       }
}
void MotorStop()
{   
    DDRB = 0xFF;
}
unsigned char KeyResult;
//键盘按下判断函数
uchar key_press()     //按键子函数 ,带返回值的子函数
{
    uchar j;      //定义变量J
   
        DDRD|=0X0F;  //按键低4位输出,其它不变

        PORTD|=0X0F;  //按键低4位输出高电平,其它不变
        
        DDRD&=0XF0;  //按键低4位输入,其它不变
        
        j=PIND;        //对变量J赋值
        
        j=j&0X0F;//00001111  进行与运算,判断按键是否有按下
        
        if(j==0X0F)  //如果按键没有按下返回0,如按下返回1给  key_press
        {
          return 0;
        }
        else
        {
         return 1;
        }
        
}
//***********************************************************************
uchar key_scan()   //扫描子函数
{
    uchar key;   //定义变量KEY  
    delay(10);   //延时10MS再次确定按键是否有被按下
        if(key_press())  //判断按键 是否有被按下,则key_press为1,如按下则执行如下语句
        {
        key=PIND;    //对变量KEY进行赋值
        
        key&=0X0F;   //进行运算判断一下是否真的有按下,如真的有按下,则有如下情况
        

        switch(key)    //条件语句
        {
           case 0X0E:     //a0按下所对应的数据 ,并执行KEY为1
               key=0X0E;
                   break;
           case 0X0D:     //a1按下
               key=0X0D;
                   break;
            case 0X0B:    //a2按下
               key=0X0B;
                   break;
           case 0X07:    //a3按下
               key=0X07;
                  break;
           default:             //什么也没有按下
              key=0;               
                break;
        }
          while(key_press());  //判断一下是否有松开
        }
        
        
        else    //如果没有按下则执行如下语句
        {
          key=0;    //变量赋值16
        }
        return key;   //返回KEY给key_scan扫描函数
}
void light()  //C语言主函数
{
         DDRA=0xff;                 //用于打开LED锁存
         PORTA=0xfb;                //打开LED灯总线 PA2脚输出底电平,打开LED锁存
         DDRB=0xff;                                    //PB0~7为输出状态
         PORTB=0xfe;                                //PB0为输出低电平,而其余为高电平,亦即打亮LED0               
        //PORTB&=~BIT(0)                //输出一个低电平,点亮发光管。 高电平为5V 低电平为0。
         
         while(1);                                //程式停止。
}

void main(void)
{
   uint i,q;
   delay(1);
   
   
  while(1)   
   {
      q=key_scan();
      
        if (q==0x0E)
                {
                 light();
                  for (i=0;i<500;i++)
            { MotorCW();//顺时针转动
                 }
                 delay(10);
                 MotorStop();  //停止转动
                 delay(10);
     for (i=0;i<500;i++)
            { MotorCCW();//逆时针转动
                 }
                 delay(10);
                 MotorStop();//停止转动
                 delay(10);
   } }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 02:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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