求助 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
展开
 我来答
mscyhll
2009-09-01 · TA获得超过643个赞
知道小有建树答主
回答量:494
采纳率:0%
帮助的人:499万
展开全部
你的程序编译时不报错,但是,你的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;
}
}
做而论道
高能答主

2009-09-01 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
软件仿真调试,没有报错。
可能是你的硬件仿真器有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
KID的hotaru
2009-09-01 · TA获得超过1293个赞
知道小有建树答主
回答量:331
采纳率:0%
帮助的人:311万
展开全部
软件里怎么报错的?那段报错的信息请贴上来下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星光电子社
2009-09-01
知道答主
回答量:38
采纳率:0%
帮助的人:0
展开全部
你就是想让他1—16显示吧!我这有一个,不过不知道你是用什么控制的因为它需要动态吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yiyuyan521
2009-09-01 · TA获得超过153个赞
知道答主
回答量:234
采纳率:0%
帮助的人:0
展开全部
不懂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式