找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1759|回复: 2
打印 上一主题 下一主题
收起左侧

为什么单片机程序中这个D1就是不能两呢(外部中断0控制led1)

[复制链接]
跳转到指定楼层
楼主
/****************************************************************
**********************
实验现象:下载程序后,操作 K3 按键使 D1 状态取反
接线说明: (具体接线图可见开发攻略对应实验的“实验现象”章节)
1,单片机-->LED&交通灯模块
P20-->D1
2,单片机-->独立按键模块
P32-->K3
注意事项:
*****************************************************************
**********************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k3=P3^2; //定义按键 K3
sbit led=P2^0; //定义 P20 口是 led
/****************************************************************
***************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1 时,大约延时 10us
*****************************************************************
**************/
void delay(u16 i)
{
while(i--);
}
/****************************************************************
***************
* 函 数 名 : Int1Init()
* 函数功能 : 设置外部中断 1
* 输 入 : 无
* 输 出 : 无
*****************************************************************
**************/
void Int0Init()
{
//设置 INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开 INT0 的中断允许。
EA=1;//打开总中断
}
/****************************************************************
***************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*****************************************************************
**************/
void main()
{
Int0Init(); // 设置外部中断 0
while(1);
}
/****************************************************************
***************
* 函 数 名 : Int0() interrupt 0
* 函数功能 : 外部中断 0 的中断函数
* 输 入 : 无
* 输 出 : 无
*****************************************************************
**************/
void Int0() interrupt 0 //外部中断 0 的中断函数
{
delay(1000); //延时消抖
if(k3==0)
{
led=~led;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2021-7-23 21:52 | 只看该作者
因为led只能亮,不能两

虽然出了警告,但也可以啊
代码没问题,那就是硬件问题
Led正负有没有接错?



回复

使用道具 举报

板凳
ID:123289 发表于 2021-7-24 09:08 | 只看该作者
进入中断时,K3必=0,否则是不会进入中断的,所以 IF K3=0 没有意义。
在中断程序未退出之前,K3弹N次都是没有用的,因为中断进行中,无法再进入(当然按下也无用)。
但当你退出中断时,会立即再进中断(感觉上K3不听话)。
所以正确的做法是:
中断响应后:LED求反、延时、去除中断标记(弹动必会产生中断标记,去除它就不会立即再中断),退出中断服务程序。
当然K3在延时未结束之前会失效。这是你的程序可以改进的地方。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表