求助 51单片机程序问题
求助高手帮我看看这段4*4键盘扫描7段数码管显示的程序错在哪里#include<reg51.h>#definerowkey()(~P1)&0x0f#defineSEGP2...
求助高手帮我看看这段4*4键盘扫描 7段数码管显示的程序错在哪里
#include <reg51.h>
#define rowkey() (~P1)&0x0f
#define SEG P2
char TAB[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x84,0x8e,0xbf,0x7f};
void decouncer(void);
main()
{
unsigned char scan,row,col,kcode;
SEG=0x7f;
scan=0xef;
for(col=0;col<4;col++)
{
int keyin ;
P1=scan;
keyin=rowkey();
if(keyin!=0)
{
decouncer();
for(row=0;row<4;row++)
{
if(0x01<<row==keyin)
kcode=4*col+row;
SEG=TAB[kcode];
}
}
scan=(scan<<1)/0x01;
}
}
void decouncer(void)
{
int j;
for(j=0;j<2400;j++);
}
在keil c里 编译是对的 但是调试时就不行了 提示: *** error 65: access violation at C:0x0700 : no 'execute/read' permission 展开
#include <reg51.h>
#define rowkey() (~P1)&0x0f
#define SEG P2
char TAB[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x84,0x8e,0xbf,0x7f};
void decouncer(void);
main()
{
unsigned char scan,row,col,kcode;
SEG=0x7f;
scan=0xef;
for(col=0;col<4;col++)
{
int keyin ;
P1=scan;
keyin=rowkey();
if(keyin!=0)
{
decouncer();
for(row=0;row<4;row++)
{
if(0x01<<row==keyin)
kcode=4*col+row;
SEG=TAB[kcode];
}
}
scan=(scan<<1)/0x01;
}
}
void decouncer(void)
{
int j;
for(j=0;j<2400;j++);
}
在keil c里 编译是对的 但是调试时就不行了 提示: *** error 65: access violation at C:0x0700 : no 'execute/read' permission 展开
展开全部
你的程序编译时不报错,但是,你的main()函数写的不对,你的main()函数中执行到scan=(scan<<1)/0x01就结束了,编译后,单片机的pc值指向C:0x0700,而后面已经没有代码可以执行了,因此,此时单片机已经执行完了你的所有程序,没有指令可以继续执行了,所以就报错了!
你只要在scan=(scan<<1)/0x01这句之后加上一句(我是在中文输入法下写下面这个程序的,直接复制会有错误提示)while(1){;};或者是将while(1)
{
for(col=0;col<4;col++)
{
int keyin ;
P1=scan;
keyin=rowkey();
if(keyin!=0)
{
decouncer();
for(row=0;row<4;row++)
{
if(0x01<<row==keyin)
kcode=4*col+row;
SEG=TAB[kcode];
}
}
scan=(scan<<1)/0x01;
}
}
你只要在scan=(scan<<1)/0x01这句之后加上一句(我是在中文输入法下写下面这个程序的,直接复制会有错误提示)while(1){;};或者是将while(1)
{
for(col=0;col<4;col++)
{
int keyin ;
P1=scan;
keyin=rowkey();
if(keyin!=0)
{
decouncer();
for(row=0;row<4;row++)
{
if(0x01<<row==keyin)
kcode=4*col+row;
SEG=TAB[kcode];
}
}
scan=(scan<<1)/0x01;
}
}
展开全部
软件仿真调试,没有报错。
可能是你的硬件仿真器有问题。
可能是你的硬件仿真器有问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
软件里怎么报错的?那段报错的信息请贴上来下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你就是想让他1—16显示吧!我这有一个,不过不知道你是用什么控制的因为它需要动态吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询