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
}
keil无法单步c语言,在keil单步调试的时候,总调试进不了头文件(单步),直接嗖的一下就飞到了函数末尾...相关推荐
- 【C 语言】动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )
文章目录 一.在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二.拷贝 xxx.lib.xxx.dll.xxx.h 到源码路径 三.导入 xxx.h 头 ...
- keil集成环境c语言总结,Keil C51单片机集成开发环境编程与调试教程
同 VC 之类的通用 C 语言集成开发环境(IDE)一样,Keil 也采用"工程" (Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组 成的大型程序开发 ...
- mp4文件时长 c++源码_【C语言】如何使用头文件 .h 编译 C 源码!so easy!
在 C 语言中,头文件或包含文件通常是一个源代码文件,程序员使用编译器指令将头文件包含进其他源文件的开始(或头部),由编译器在处理另一个源文件时自动包含进来. 一个头文件一般包含类.子程序.变量和其他 ...
- c malloc 头文件_C/C++笔试题:主要考察C/C++语言基础概念算法及编程,附参考答案...
1.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数: 答:char *strcpy(char *strDest, const char *strSrc) { if ...
- C语言小项目——通讯录的存储系统(静态版,动态版,文件版)
目录 前言 一.总体设计框架 二.三种通讯录的功能阐述 三.静态通讯录 1.结构体设计 2.初始化通讯录 3.增加联系人的信息 4.删除联系人的信息 5.查找指定联系人并打印 6.修改联系人的信息 7 ...
- 详解C语言中头文件的作用
大家好,先做个自我介绍,我是天蓬,欢迎阅读本篇博文. 由于本人理解能力不是很好,阅读他人文章时,常常看得晕头晕脑,这让我很是头疼,我想,世界上一定还有和我一样的人(哈哈,不是说你么笨哦).所以,我将会 ...
- 【C语言】标准库(头文件、静态库、动态库),windows与Linux平台下的常用C语言标准库
一.Introduction 1.1 C语言标准库 1.2 历代C语言标准 1.3 主流C语言编译器 二.C语言标准库 2.1 常用标准头文件 2.2 常用标准静态库 三.windows平台 四.Li ...
- c语言中引用头使用什么指令,在源文件(.c)和头文件(.h)中声明和定义的区别——C语言...
最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 声明和定义:有分配空间的叫定义,没分配空间的叫声明 定义:表示 ...
- keil延时c语言程序设计,Keil C51程序设计中几种精确延时方法
引言 单片机因具有体积小.功能强.成本低以及便于实现分布式控制而有非常广泛的应用领域[1].单片机开发者在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖.数据传输等操作都要在程序中插入一 ...
最新文章
- CA certificate
- 智能卡检测控制系统检测m1这么操作_土壤检测实验室仪器设备配置方案
- java生成数据插入hbase_hbase实战之javaAPI插入数据
- 计算机二级c语言填空题答案唯一吗,计算机二级C语言上机填空题及答案.doc
- QT 编译通过但是运行出现程序异常结束或者crashed的问题 在QT creator中最佳解决办法
- K8S 核心组件 kubelet 与 kube-proxy 分析
- java 操作vss,java开发常用工具总结,java开发常用工具
- Memcache的使用和协议分析详解
- jqgrid点击搜索无法重置参数问题
- atiny_log | LiteOS 物联网操作系统中的日志打印组件使用分享
- 一个比较有含金量的架构认证
- Threejs工厂模型3Dmax模型obj+mtl格式,源文件下载
- Vue + element 实现课程表
- 为什么你应该学习编程?
- 9款好用的bi数据可视化工具
- HTML CSS之复合选择器中的交集选择器、并集选择器、后代选择器、子元素选择器、相邻兄弟选择器、属性选择器
- B站离线多机房架构实践
- sw中的转换实体引用工具的使用
- 模拟电话设置座机不能外呼,且呼入时呼叫转移到手机
- php跨域header处理
热门文章
- RuntimeError: expected scalar type Long but found Int
- conda更新安装github下载的本地压缩包(zip)
- linux没有root权限如何安装软件,我如何安装没有root权限的软件包?
- Android Activity onCreate()方法重复执行
- C++中动态分配多维数组
- 世界Web设计最新潮流
- 最全盘点苹果高管团队 谁有可能成为下一代继任者?
- java 技术提升路线
- 微信小程序开发之——动画-Animation(3)
- html转化excel为json对象,纯js前端json转exl的几种方法