keil无法单步c语言,在keil单步调试的时候,总调试进不了头文件(单步),直接嗖的一下就飞到了函数末尾...

最近有个项目,在keil单步调试的时候,总调试进不了头文件(单步),直接嗖的一下就飞到了函数末尾,于是找了个别人写的,在实物上验证过的程序,发现也一样进不了头文件,源文件如下,

按十六个健   依次显示0——9 a b c d e f

**********************/

#include

#include

#include                                                                                                                        //a   b     c        d         e         f

uchar code yejingtable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x61,0x62,0x63,0x64,0x65,0x66};//0--9

uchar shuzi1=0;

uchar v=0;

void main()

{

EA = 0;

lcdset();

delay(1000);

display(1,1,"键盘测试显示键值");

writecommand(0x90);

while(1)

{

v=keyscan();

if(v==0x11||v==0x21||v==0x41||v==0x81||v==0x12||v==0x22||v==0x42||v==0x82||v==0x14||v==0x24||v==0x44||v==0x84||v==0x18||v==0x28||v==0x48||v==0x88)

{

switch(v)

{

case 0x11: shuzi1=0;          // 0

break;

case 0x21: shuzi1=1;           //1

break;

case 0x41:         shuzi1=2;          //2

break;

case 0x81: shuzi1=3;            //3

break;

case 0x12:         shuzi1=4;          //4

break;

case 0x22:   shuzi1=5;          //5

break;

case 0x42:         shuzi1=6;            //6

break;

case 0x82:          shuzi1=7;    //7

break;

case 0x14:  shuzi1=8;             //8

break;

case 0x24:           shuzi1=9;         //9

break;

case 0x44:   shuzi1=10;     //a

break;

case 0x84:        shuzi1=11;

break;           //b

case 0x18:  shuzi1=12;

break;            //c

case 0x28:  shuzi1=13;                //d

break;

case 0x48:        shuzi1=14;            //e

break;

case 0x88:         shuzi1=15;            //f

break;

default:break;

}

writedata(yejingtable[shuzi1]);

delay(50000);

}

}

}单步调试时,从lcdset();一步就飞到了case 0x24: 来了,,,难道头文件是不难单步调试的吗????

头文件如下:

#include

#define uchar unsigned char

#define uint unsigned int

sbit rs = P3^0;

sbit rw = P3^1;

sbit en = P3^5;

void checkbusy();

void writecommand(uchar command);

void writedata(uchar date);

void lcdset(void);

void display(uchar y, uchar x, uchar *p);

void displayNumber(uchar y,uchar x,uchar number);

void cursor(uchar y,uchar x);

void convert(uchar yy);

/*==============================================================*/

/*                           液晶                             */

//=========================判忙=================================

void checkbusy()

{

rs=0;

rw=1;

P0=0xff;

while(1)

{

en = 1;

if(P0 < 0x80)break;//P0的最高位为忙标志为,H:忙,L:空闲

en = 0;

}

en=0;

}

//===========液晶写指令=========================================

void writecommand(uchar command)

{

checkbusy();

rs=0;

rw=0;

en=1;

P0=command;  //液晶数据线P0

en=0;

}

//============液晶写数据=========================================

void writedata(uchar date)

{

checkbusy();

rs=1;

rw=0;

en=1;

P0=date;

en=0;

}

//==============液晶设置=========================================

void lcdset(void)

{

writecommand(0x30); //基本指令集

writecommand(0x01); //清屏,DDRAM的地址归零

writecommand(0x02); //地址归位

writecommand(0x0c); //显示开,光标关,反白关

writecommand(0x06); //DDRAM地址加1

}

//===========字符显示============================================

void display(uchar y, uchar x, uchar *p)

{

switch (y)

{

case 1:writecommand(0x7f+x); break; //液晶第一行

case 2:writecommand(0x8f+x); break; //0x90+(x-1)

case 3:writecommand(0x87+x);break;

case 4:writecommand(0x97+x);break;

default:break;

}

while(*p)

writedata(*p++);

}

文件2: #include

uchar keyscan(void);

void delay(uint m);

void delay(uint m)

{

while(--m);

}

//键扫子程序

uchar keyscan(void)

{

uchar scan,tmp;

P1=0xf0;               //发全行0扫描码

if((P1&0xf0)!=0xf0)     //若有键按下

{delay(1000);          // 延时去抖

if((P1&0xf0)!=0xf0)        //延时再判键是否还按下

{scan=0xfe;

while((scan&0x10)!=0)     //逐行扫描

{

P1=scan;                   //输出行扫描码

if((P1&0xf0)!=0xf0)          //本行有键按下

{tmp=(P1&0xf0)|0x0f;

return ((~scan)|(~tmp));}      //还回键值

else scan=(scan<<1)|0x01;                  //行扫描码左移一位

}

}

}

return (0);                                //无键按下,还回0

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值