标题:
单片机程序好多错误 求指导
[打印本页]
作者:
ylthpl
时间:
2023-2-7 22:20
标题:
单片机程序好多错误 求指导
#include <REGX52.H>
typedef unsigned char u8;
typedef unsigned int u16;
#define SMG PORT P0
#define KEY_MATRIX_PORT P1
u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71}
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
u8 key_matrix(void)
{
u8 key_is=0;
KEY_MATRIX_PORT =0xf7;
if(KEY_MATRIX_PORT!=0xf7)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT )
{
case 0x77:key_is 1;break;
case 0xb7:key_is 5;break;
case 0xd7:key_is 9;break;
case 0xe7:key_is 13;break;
}
while(KEY_MATRIX_PORT=0Xf7);
return key_is;
}
else if(KEY_MATRIX_PORT!=0xfb)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT)
{
case 0x7b:key is 2;break;
case 0xbb:key is 6;break;
case 0xdb:key is 10;break;
case 0xeb:key is 14;break;
}
while(KEY_MATRIX_PORT=0Xfb);
return key is;
}
else if(KEY_MATRIX_PORT!=0xfd)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT)
{
case 0x7d:key is 3;break;
case 0xbd:key is 7;break;
case 0xdd:key is 11;break;
case 0xed:key is 15;break;
}
while(KEY MATRIX POR=0Xfd);
return key is;
}
if(KEY_MATRIX_PORT !=0xfe)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT )
{
case 0x7e:key is 4;break;
case 0xbe:key is 8;break;
case 0xde:key is 12;break;
case 0xee:key is 16;break;
}
while(KEY_MATRIX_PORT =0Xfe);
return key is;
}
}
void main()
{ u8 key=0;
while(1)
{
key=key_matrix();
if(key!=0)
P0=gsmg[key-1];
}
}
作者:
zhongyini
时间:
2023-2-7 23:22
你把错误也贴出来啊 ,我们又不是编译器
作者:
Hephaestus
时间:
2023-2-7 23:53
只看到第一个错误
#define SMG PORT P0
这里SMG PORT中间加空格就是两个东西了,要写成SMG_PORT
作者:
glinfei
时间:
2023-2-8 00:01
key is 少_。
作者:
xuyaqi
时间:
2023-2-8 06:08
u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71}最后要有分号。
作者:
xuyaqi
时间:
2023-2-8 06:32
case 0x77:key_is 1;break;应该 key_is = 1;
作者:
xuyaqi
时间:
2023-2-8 06:38
while(KEY_MATRIX_PORT=0Xfb);应该while(KEY_MATRIX_PORT==0Xfb);
作者:
yxtao
时间:
2023-2-8 08:33
case 0x7e:key is 4;break; case 0xbe:key is 8;break; case 0xde:key is 12;break; case 0xee:key is 16;break,k
作者:
yxtao
时间:
2023-2-8 08:34
case 0x7e:key is 4;break; case 0xbe:key is 8;break; case 0xde:key is 12;break; case 0xee:key is 16;break //key is改成key_is =
作者:
YHB51H
时间:
2023-2-8 11:34
#include <REGX52.H> typedef unsigned char u8; typedef unsigned int u16; #define SMG_PORT P0 //P0口接数码管 #define KEY_MATRIX_PORT P1 //P1口接矩阵按键 u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0~9 a~f 全灭 共阴数码管 void delay_10us(u16 ten_us) { while(ten_us--); } u8 key_matrix(void) //按键函数 高四位接行线,低四位接列线 { u8 key_is=0; //键值变量 KEY_MATRIX_PORT =0xf7; //按键赋值 1111 0111 if(KEY_MATRIX_PORT!=0xf7) //有键按下 { delay_10us(100); //延时 switch(KEY_MATRIX_PORT ) //匹配键值 { case 0x77:key_is=1;break; //0111 0111 键值1 case 0xb7:key_is=5;break; //1011 0111 键值5 case 0xd7:key_is=9;break; //1101 0111 键值9 case 0xe7:key_is=13;break; //1110 0111 键值13 } while(KEY_MATRIX_PORT!=0xf7); //等待松手 return key_is; //返回键值 } KEY_MATRIX_PORT =0xfb; //按键赋值 1111 1011 if(KEY_MATRIX_PORT!=0xfb) //有键按下 不等于1111 1011 { delay_10us(100); //延时 switch(KEY_MATRIX_PORT) //匹配 { case 0x7b:key_is=2;break; //0111 1011 键值2 case 0xbb:key_is=6;break; //1011 1011 键值6 case 0xdb:key_is=10;break; //1101 1011 键值10 case 0xeb:key_is=14;break; //1110 1011 键值14 } while(KEY_MATRIX_PORT!=0xfb); //等待松手 return key_is; //返回键值 } KEY_MATRIX_PORT =0xfd; //按键赋值 1111 1101 if(KEY_MATRIX_PORT!=0xfd) //有键按下 { delay_10us(100); //延时 switch(KEY_MATRIX_PORT) //匹配 { case 0x7d:key_is=3;break; //0111 1101 键值3 case 0xbd:key_is=7;break; //1011 1101 键值7 case 0xdd:key_is=11;break; //1101 1101 键值11 case 0xed:key_is=15;break; //1110 1101 键值15 } while(KEY_MATRIX_PORT!=0xfd); //等待松手 return key_is; //返回键值 } KEY_MATRIX_PORT =0xfe; //按键赋值 1111 1110 if(KEY_MATRIX_PORT !=0xfe) //有键按下 不等于1111 1110 { delay_10us(100); //延时 switch(KEY_MATRIX_PORT ) //匹配 { case 0x7e:key_is=4;break; //0111 1110 键值4 case 0xbe:key_is=8;break; //1011 1110 键值8 case 0xde:key_is=12;break; //1101 1110 键值12 case 0xee:key_is=16;break; //1110 1110 键值16 } while(KEY_MATRIX_PORT!=0xfe); //等待松手 return key_is; //返回键值 } } void main() //主函数 { u8 key=0; //定义键值变量 SMG_PORT=gsmg_code[16]; //熄灭数码管 while(1) { key=key_matrix(); //读取按键值 SMG_PORT=gsmg_code[key-1]; //P0显示键值 } }
作者:
ylthpl
时间:
2023-2-8 12:22
谢谢大家建议很好我都采纳了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1