求助数组问题
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口有输出。