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

汉诺塔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释放 ---
}
}
}
...全文
1276 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
  • 打赏
  • 举报
回复
楼主是自学的单片机吗?先把单片机最小系统搭好,也就是把晶振和上电复位电路搭好。

27,375

社区成员

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

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