标题: 求助一个比较简单的关于单片机外部中断的问题 [打印本页]

作者: 1843647506    时间: 2021-11-4 22:53
标题: 求助一个比较简单的关于单片机外部中断的问题
单片机P3.2外部中断0接按键,P1.4-P1.7接小灯,0电平点亮,P1.0-P1.3接开关,合上是0电平接地,开关状态反映到二级管上,用C51编程实现每中断一次,发光二极管显示开关状态。
我想的是这样的:
读p1口
然后左移4位
然后赋给p1


但是电路运行
是哪里有问题吗
我应该怎么修改代码呢

$}KLC~6$VJR5YE160N{B%(3.png (69.57 KB, 下载次数: 80)

$}KLC~6$VJR5YE160N{B%(3.png

UL%X[(DQ(O`%GSIEKO3P82L.png (86.59 KB, 下载次数: 69)

UL%X[(DQ(O`%GSIEKO3P82L.png

}LA)RZ1ONRL(_M0}]Z)}{94.png (92.26 KB, 下载次数: 78)

}LA)RZ1ONRL(_M0}]Z)}{94.png

作者: 1843647506    时间: 2021-11-4 23:48
这个是电源接地,反过来

1124.png (65.57 KB, 下载次数: 67)

1124.png

作者: 1843647506    时间: 2021-11-5 00:24
我根据网上的代码修改好了,但是我有一点没看懂,就是P1=0X0f;,,为什么P1要赋这句话,我尝试改成0x00或者0x01都不能正常运行,这是为什么啊

11.png (65.52 KB, 下载次数: 70)

11.png

22.png (75.61 KB, 下载次数: 77)

22.png

作者: wulin    时间: 2021-11-5 06:25
1843647506 发表于 2021-11-5 00:24
我根据网上的代码修改好了,但是我有一点没看懂,就是P1=0X0f;,,为什么P1要赋这句话,我尝试改成0x00或者 ...
  1. #include<reg51.h>

  2. void main()
  3. {
  4.         IT0 = 1;
  5.         EX0 = 1;
  6.         EA = 1;
  7.         while(1);
  8. }

  9. void INT_0(void) interrupt 0
  10. {
  11.         P1=P1<<4|0x0f;//P1<<4后低4位自动补0,|0x0f是低4位还原1。
  12. }
复制代码

作者: 1843647506    时间: 2021-11-5 11:46
wulin 发表于 2021-11-5 06:25

低四位赋1,是为了检测端口吗?我不太明白为什么低四位要赋1这个原理
作者: wulin    时间: 2021-11-5 11:53
1843647506 发表于 2021-11-5 11:46
低四位赋1,是为了检测端口吗?我不太明白为什么低四位要赋1这个原理

就是为了能够正常检测按键端口
作者: 188610329    时间: 2021-11-5 15:26
你网上找的修改,和你原来的其实差不多,你看不明白么?

你原来的代码其实2个地方错,你改完应该就明白了。
首先  i=i<<4   来源不明,
其次,i=i||0x0f  符号错误,改一下应该是这样:

i=P1;
i=i<<4;
i=i|0x0f;
P1=i;

基于你原程序修改,这样你能看懂了么?

作者: yzwzfyz    时间: 2021-11-5 16:56
要点:读键值时,要先置1,如果清0,则读到的0是不是按键造成的,就分不清了。
将读到的键值直接送显,是可取的,但不要忘了,下次读键值之前,要重新置1。
作者: 1843647506    时间: 2021-11-5 22:28
谢谢各位的解答,我明白了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1