微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > PCB设计问答 > PCB设计学习讨论 > 求助数组问题

求助数组问题

时间:10-02 整理:3721RD 点击:

                switch(CS){
                        case 0:        P2=0x00; CS++;P3=A[1];break;
                        case 1:        P2=0x04; CS=0;P3=A[2];break;
                        default: break;
                }
数组为什么不能用呢

数组定义和初始化确定没问题?error贴上来


没有错误。
就是P3没有什么变化
unsigned int  A[]={0x3f,0x06,0x5B,0x4F,
                                  0x66,0x6D,0x7D,0x07,
                                  0x7F,0x6f,0x77,0x7c,
                                  0x39,0x5e,0x79,0x71};
然后给数组加上code 可以正常使用了。
unsigned int  code A[]={0x3f,0x06,0x5B,0x4F,
                                  0x66,0x6D,0x7D,0x07,
                                  0x7F,0x6f,0x77,0x7c,
                                  0x39,0x5e,0x79,0x71};
随后将数组下标改成变量又不正常。                th=temp>>4;
                tl=temp&0x0f;
                P3=0x00;
                switch(CS){
                        case 0:        P2=0x00; CS++;P3=A[th];break;
                        case 1:        P2=0x04; CS=0;P3=A[tl];break;
                        default: break;
                }
th 和tl 为 char型。

//以下为完成程序
//矩阵按键键值显示到数码管上
#include<reg52.h>
#include <intrins.h>
#define  uint8    unsigned char
#define  uint16  unsigned int
uint8 temp;
uint8 code SEG[]={0x3f,0x06,0x5B,0x4F,
                                  0x66,0x6D,0x7D,0x07,
                                  0x7F,0x6f,0x77,0x7c,
                                  0x39,0x5e,0x79,0x71};          
uint8 key_seach(){
        uint8 temp1;
        P0=0x0f;
        temp1=P0;
        P0=temp1|0xf0;
        temp1=P0;
        return temp1;
}
main(){
        uint8 th,tl,CS=0;
        while(1){
                temp=key_seach(); //将键盘扫描的键值返回到temp
                th=temp>>4;
                tl=temp&0x0f;
                P3=0x00;
                switch(CS){
                        case 0:        P2=0x00; CS++;P3=SEG[th];break;
                        case 1:        P2=0x04; CS=0;P3=SEG[tl];break;
                        default: break;
                }
        }
}
有不足之处请之处

temp初始值是多少

没有设置初始值

你先用软件的仿真观察temp,temp,th,tl,这几个变量运行时间数据值到底有没有发生变化,一步一步的仿真,不要跳过去,确定一下是不是这几个变量没有就没有被赋值,还有注意左移右移时间数据高低位的补齐

恩  解决了。

查表法的简单按键扫描,你参考一下
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
/**************************************************************
* 名称:Key_Tab()
* 功能:P1外接4×4按键, 按照查表法读出键值
* 返回:按键值0~15/如无键按下, 返回16
***************************************************************/
uchar Key_Tab(void)
{
    uchar code K_Tab[4][4] = {
          0xee, 0xde, 0xbe, 0x7e, 0xed, 0xdd, 0xbd, 0x7d,
          0xeb, 0xdb, 0xbb, 0x7b, 0xe7, 0xd7, 0xb7, 0x77};
    uchar temp1 = 0xfe, temp2, i, j;
    for(i = 0; i < 4; i++) {    //扫描低四位
      P1 = temp1;               //输出一行0
      temp2 = P1;               //马上就读入
      if((temp2 & 0xf0) != 0xf0) { //如果有键按下
        for(j = 0; j < 4; j++) //就扫描高四位
          if(temp2 == K_Tab[i][j]) //查表
            return i * 4 + j;   //查到了就返回按键的数值
      }
      else temp1 = _crol_(temp1, 1);
    }
    return 16;                  //没有查到,返回按键松开的代码
}

是不是返回的变量没有被赋值


我看到有些产品中 按键长按,短按,
长时间没有按键动作时退出设置的这种情况,是怎么做到了。

以最初的错误的程序调试时,P3口确实没有任何变化。
给数组加上code 调试时,P3口有输出。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top