1、按钮S0接在51单片机的 P3.3(INT1)引脚上,P1口接了8个发光二极管,编程实现:初始状态时,LED0灯亮,其它灯灭,利用S0按钮控制P1口的灯(中断方式),要求每按一下就点亮一盏灯( 前面点亮的保持点亮的状态 )
代码:

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar ledstatus_1;
uchar ledstatus_2;
bit flag;                  //标志位,中断后赋予1
uint i=0;
void wint1() interrupt 2
{flag=1;
}
void main()
{/*中断初始化*/IT1=1;EX1=1; EA=1;ledstatus_1=0xfe;           //开始LED灯的状态P1=ledstatus_1;while(1){if(flag){if(i<7)                                                                     //用于判断是否是否进行了一轮{                                                                                    //即当灯全亮后恢复开始的状态ledstatus_2=_crol_(ledstatus_1,1);      //ledstatus_2保存ledstatus_1循环左移后的数ledstatus_2=ledstatus_2&ledstatus_1;      //进行相与,这样就可以保持低位灯不灭P1=ledstatus_2;ledstatus_1=ledstatus_2;flag=0;i=i+1;                                                                 }else{ledstatus_1=0xfe;P1=ledstatus_1;flag=0;                                 //这个恢复后需要将标志位设位0i=0;                                                                      //否则一轮后的初始状态就会出现两个灯亮}}  }
}

电路图:

2、按钮S0接在51单片机的 P3.3(INT1)引脚上,P1口接了8个发光二极管,编程实现:初始状态时,P1口控制的灯按一定的频率闪烁;按一下S0,触发 外部中断1(INT1),实现单灯 右移 (即按LED7至LED0的顺序依次点亮)3圈结束,恢复初始状态。

代码:

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define LED P1
void delay(int xms)        //延时函数
{uint i,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);
}
void right(int x)           //右移
{int i,j;for(i=0;i<x;i++){LED=0x7f;for(j=0;j<7;j++){delay(250);LED=_cror_(LED,1);       //循环右移}delay(250);}
}
void my_interrupt() interrupt 2     //中断函数
{unsigned saveLED=LED;         //储存中断前LED状态right(3);                                   //调用单灯右移3圈LED=saveLED;                         //写回中断前LED状态
}
void main()
{/*中断初始化*/IT1=1;EX1=1; EA=1;LED=0X00;while(1){delay(250);LED=~LED;            //开始LED等闪烁}
}

电路图:

3、51单片机的P1.7引脚外接一个发光二极管D1,P3.2(INT0)引脚外接信号发生器(Single generator)。编程实现:首先通过P1.7口点亮发光二极管D1,然后信号发生器每输入10个脉冲触发一次中断,使D1灯亮、灭交替一次。
代码:

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define LED P1
void delay(int xms)        //延时函数
{uint i,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);
}
void left(int x)            //左移
{int i,j;for(i=0;i<x;i++){LED=0xfe;for(j=0;j<7;j++){delay(250);LED=(LED<<1)|0x01;       //左移}delay(250);}
}
void right(int x)           //右移
{int i,j;for(i=0;i<x;i++){LED=0x7f;for(j=0;j<7;j++){delay(250);LED=(LED>>1)|0x80;       //右移}delay(250);}
}
void my_int_right(void) interrupt 2     //中断函数
{unsigned saveLED=LED;         //储存中断前LED状态right(3);                                   //调用单灯右移3圈LED=saveLED;                         //写回中断前LED状态
}
void my_int_left(void) interrupt 0     //中断函数
{unsigned saveLED=LED;         //储存中断前LED状态left(3);                                    //调用单灯右移3圈LED=saveLED;                         //写回中断前LED状态
}
void main()
{/*中断初始化*/IT1=1;EX1=1; IT0=1;EX0=1;EA=1;IP=0x04;LED=0X00;while(1){delay(250);LED=~LED;            //开始LED等闪烁}
}

电路图:

4、P1口接8个发光二极管,P3.2和P3.3接两个按钮开关模拟两个外部中断源。平常8个灯以一定频率闪烁,按键S0按下触发中断,控制8个灯左移(即按D1至D8的顺序依次点亮)3圈,按键S1按下触发中断,控制8个灯右移(即按D8至D1的顺序依次点亮)3圈(右移的中断优先级高于左移)。

代码:

#include<reg51.h>
#define uint unsigned int
sbit P1_7=P1^7;
uint i = 0;                            //脉冲计数
void interrupt0() interrupt 0 using 2
{   i++;if(i==10)   //10个脉冲亮灭循环一次{i=0; P1_7=~P1_7;    }
}
void main()
{EA=1;   //中断允许IT0=1; //脉冲触发EX0=1;  //外部中断0P1_7=0; //led灯初始状态do{}while(1);
}

电路图:

所有代码和电路图:https://download.csdn.net/download/qq_43556844/15087408

单片机学习(2)------中断操作相关推荐

  1. 51单片机学习--定时器--中断--串口通信

    51单片机学习–定时器–中断–串口通信 定时器–中断–串口通信 中断分类 定时器中断 外部中断 串口中断 基本概念 对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B, ...

  2. ioca0中断 pic单片机_PIC单片机学习笔记

    1.前言 为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大 ...

  3. 单片机学习——中断系统

    单片机必学系列 单片机学习--中断系统 单片机学习--存储器详解(程序存储器.片内RAM.拓展RAM.EEPROM) 单片机学习--定时器/计数器 单片机学习--A/D转换 更新ing 单片机学习-- ...

  4. 51单片机学习笔记之中断(外部中断、定时器中断、中断嵌套)

    要学习51单片机中断的朋友,拥有这一篇博文就够了,深入浅出,里面包含了寄存器,外部中断.定时器中断.中断嵌套等的讲解,还有代码实战.快一万字,写得不容易,还请大家点赞支持一下,后续持续更新 (一)寄存 ...

  5. 单片机定时器实验两位倒计时秒表_单片机学习「1」 初始51单片机

    问题1:什么是单片机? 采用集成电路技术,将CPU(具有处理数据能力的中央处理器).RAM(随机存储器,类比电脑里的内存条).ROM(程序存储器,类比电脑硬盘).多种I/O口(类比电脑的各种接口,不过 ...

  6. 【小白】【大学】一名嵌入式软件开发小白的单片机学习历程、心路历程、经验分享

    我的嵌入式学习之路 我为什么写这篇文章 先简单介绍一下我自己 与每一个技术小白共勉 这篇文章写给谁 我的学习经验分享 我的成长之路 我的单片机学习历程分享 51系列单片机学习历程 预备知识:(可以查百 ...

  7. [单片机学习笔记](35):串级PID算法应用剖析、通过串口控制电机、MPU6050获取平衡车姿态、自制平衡车PID算法程序设计

    串级PID算法应用剖析 这是经过给队友讲解串级PID的程序的之后的进一步的理解总结. 内环的实际值,取决于你能测出什么值给内环.而内环的输入就是内环误差 内环的输出值,是内环误差(内环目标值-内环实际 ...

  8. 单片机学习和应用百问大全

    1.      C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言.其主要优点是占用资源少.程序执行效率高.但是不同的CP ...

  9. AutoLeaders控制组—51单片机学习笔记

    文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...

最新文章

  1. freebsd ports安装mysql_FreeBSD Ports 方式安装MySQL及注意事项
  2. 【超详细】遍历Windows进程模块
  3. 网易严选Java开发三面面经:java读文件内容
  4. 【flink】flink写入clickhouse Error while starting CH writer AccessDeninedExcepton
  5. Delphi中的dll操作
  6. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(6)签到题2题
  7. python实现50行代码_利用 50行Python 代码构建一个在线文本生成器!
  8. HTTP 连接管理进化论
  9. 树莓派制作语音对话机器人
  10. 互动快报:从读报刊看性格
  11. specification java_Java Specification类代码示例
  12. 夜夜听雨(三)(中国社会科学院 郑哲)
  13. Codeforces Round #682 (Div. 2)
  14. md本地免费编辑器推荐-marktext
  15. 记录一次 Vue 组件封装过程
  16. 开始学习ARM 单片机
  17. 知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得
  18. 魔兽争霸RPG游戏-军团战争-游戏经验总结
  19. SpringMVC怎么样设定重定向和转发的?
  20. POJ - 2386 (dfs简单应用)

热门文章

  1. python在pip安装pytorch时候killed
  2. js实现数学的排列组合
  3. 「前端」webp图片适配流量优化 1
  4. IP地址、主机名、域名解析(DNS)、虚拟机配置固定IP
  5. 湖南农业大学企业邮箱申请
  6. 铁道部新客票系统设计(一)
  7. uniapp h5 web-view不显示公众号文章
  8. 业精于勤,荒于嬉。行成于思,毁于随。
  9. 联想MIIX520笔记本电脑屏幕亮度无法调节问题
  10. shell简介和脚本执行方式