单片机小白求助一个问题!!独立按键实现十进制加减问题!

汉诺塔www 2019-01-31 07:15:18
书本上的一个案例不能运行,ISIS软件没有反应:
这是一个“独立按键实现十进制数的加减计数实例”:通过控制K1,K2按键,实现0~9十进制数的加1和减1计数,并通过P2端口外接的共阴极LED数码管显示:



上面是代码和仿真截图,数码管只能显示1,按K1,K2键没有反应,代码和仿真图都是书上拷下来的案例,我修改了第四第五行,原本是P3_2,P3_3,但是编译报错,改成了P3^2,P3^3,才能编译,但是仿真没有反应,求助大神们,不知道什么原因,单片机刚开始学习。
代码是用C语言写的

附上完整代码:
//#include <REGX51.H>
#include"reg52.h"
//#include "stc15f2k60s2.h"
#define K1 P3^2 //--- 宏定义K1代替P3.2 ---
#define K2 P3^3 //--- 宏定义K2代替P3.3 ---

sfr P2M1 = 0X95; //--- 新增的功能寄存器地址声明 ---
sfr P2M0 = 0X96;

void Delay10mS(void) //--- @12MHz,延时子程序 ---
{
unsigned char i,j;

for(i=117;i>0;i--)
for(j=184;j>0;j--);
}

unsigned char code LEDSEG[] = //--- 数码管显示0~9,A~F笔段代码表 ---
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
};

void main(void)
{
char Counter = 0;

P2M1 = 0x00; //--- 配置P2端口的P2.0~P2.7为推挽输出模式 ---
P2M0 = 0xFF;

P2 = LEDSEG[Counter]; //---根据计数变量的值查表对应的十进制数笔段码送P0口显示 ---
while(1)
{
if(0 == K1) //--- 检测P3.2引脚上K1是否按下 ---
{
Delay10mS(); //--- 若真按下则延时去按键抖动 ---
if(0 == K1) //--- 再次确认P3.2引脚上的K1是否真得按下 ---
{
Counter ++; //--- 若真得按下则计数变量加1 ---
if(Counter > 9)Counter = 0; //--- 计数变量值超过9则归0 ---
P2 = LEDSEG[Counter]; //--- 根据计数变量的值查表对应的十进制数笔段码送P2口显示 ---
}
while(0 == K1); //--- 等待P3.2引脚上的K1释放 ---
}
if(0 == K2) //--- 检测P3.3引脚上K2是否按下 ---
{
Delay10mS(); //--- 若真按下则延时去按键抖动 ---
if(0 == K2) //--- 再次确认P3.3引脚上的K2是否真得按下 ---
{
Counter --; //--- 若真得按下则计数变量减1 ---
if(Counter < 0)Counter = 9; //--- 计数变量值小于0则归9 ---
P2 = LEDSEG[Counter]; //--- 根据计数变量的值查表对应的十进制数笔段码送P2口显示 ---
}
while(0 == K2); //--- 等待P3.3引脚上的K2释放 ---
}
}
}
...全文
1388 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
汉诺塔www 2020-11-20
  • 打赏
  • 举报
回复
谢谢大家啦,很久没看csdn了,这门课大二学的啦,问题后来解决了,现在结贴啦。
汉诺塔www 2020-11-20
  • 打赏
  • 举报
回复
引用 1 楼 yishumei 的回复:
楼主是自学的单片机吗?先把单片机最小系统搭好,也就是把晶振和上电复位电路搭好。
我们是上课跟着老师学的,这是课下自己看书做的例子。
汉诺塔www 2020-11-20
  • 打赏
  • 举报
回复
isis 7 professional
引用 2 楼 Jerry_0238 的回复:
楼主用什么软件仿真的
  • 打赏
  • 举报
回复
https://blog.csdn.net/xianfajushi/article/details/85511846
  • 打赏
  • 举报
回复
https://blog.csdn.net/xianfajushi/article/details/80885105
Peter_GGG 2019-03-07
  • 打赏
  • 举报
回复
取余运算就可以
chegxy 2019-02-10
  • 打赏
  • 举报
回复
//#define K1 P3^2 //--- 宏定义K1代替P3.2 ---
//#define K2 P3^3 //--- 宏定义K2代替P3.3 ---
sbit K1= P3^2;
sbit K2= P3^3;
不要使用宏定义引脚,使用sbit定义引脚,亲测有效。
Jerry_0238 2019-02-06
  • 打赏
  • 举报
回复
楼主用什么软件仿真的
yishumei 2019-02-01
  • 打赏
  • 举报
回复
楼主是自学的单片机吗?先把单片机最小系统搭好,也就是把晶振和上电复位电路搭好。
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

27,521

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧