找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机两个外部中断实验 单灯左移右移3圈 Proteus仿真和源代码

[复制链接]
跳转到指定楼层
楼主
单片机两个外部中断实验的仿真原理图(proteus仿真工程文件可到本帖附件下载):



单片机源代码:
  1. /* 两个外部中断实验 */
  2. //==声明区===================================
  3. #include        <reg51.h>        //        定义8x51暂存器之标头档,P2-17~19
  4. #define        LED        P1                        //        定义LED接至Port 1
  5. void delay1ms(int);                //        声明延迟函数
  6. void left(int);                        //        声明单灯左移函数
  7. void right(int);                //        单灯右移函数开始
  8. //==主程序===================================
  9. main()                                        //        主程序开始
  10. {        IE=0x85;                        //        准许INT 0,INT 1中断(6-4页)
  11.         IP=0x01;                        //        设定INT 0具有最高优先权(6-5页)
  12.         LED=0x00;                        //        初值=0000 0000,灯全亮        
  13.         while(1)                        //        无穷循环,程序一直跑
  14.         {        delay1ms(250);        //        延迟250 1m=0.25s
  15.                 LED=~LED;                //        LED反相
  16.         }                                        //        while循环结束
  17. }                                                //        主程序结束
  18. //==子程序===================================
  19. /* INT 0的中断子程序 - 单灯左移3圈 */
  20. void my_int0(void) interrupt 0        //        INT0 中断子程序开始
  21. {        unsigned saveLED=LED;        //        储存中断前LED状态
  22.         left(3);                        //        单灯左移3圈
  23.         LED=saveLED;                //        写回中断前ED状态   
  24. }                                                //        结束INT0 中断子程序
  25. /* INT 1的中断子程序 - 单灯右移3圈 */
  26. void my_int1(void) interrupt 2        //        INT1 中断子程序开始
  27. {        unsigned saveLED=LED;        //        储存中断前LED状态
  28.         right(3);                        //        单灯右移3圈
  29.         LED=saveLED;                //        写回中断前LED状态
  30. }                                                //        结束INT1 中断子程序
  31. /* 延迟函数,延迟约x 1ms */
  32. void delay1ms(int x)        //        延迟函数开始
  33. {        int i,j;                        //        声明整数变数i,j
  34.         for (i=0;i<x;i++)        //        计数x次,延迟x 1ms
  35.                 for (j=0;j<120;j++);        //        计数120次,延迟1ms
  36. }                                                //        延迟函数结束
  37. /* 单灯左移函数,执行x圈 */
  38. void left(int x)                 //        单灯左移函数开始
  39. {        int i, j;                        //        声明变数i,j
  40.         for(i=0;i<x;i++)        //        i循环,执行x圈
  41.         {        LED=0xfe;                //        初始状态=1111 1110,最右灯亮
  42.                 for(j=0;j<7;j++)        //        j循环,左移7次
  43.                 {        delay1ms(250);        //        延迟250 1m=0.25s
  44.                         LED=(LED<<1)|0x01;         //        左移1位後,LSB设为1
  45.                 }                                //        j循环结束
  46.                 delay1ms(250);        //        延迟250 1m=0.25s
  47.         }                                        //        i循环结束*/
  48. }                                                //        单灯左移函数结束
  49. /* 单灯右移函数,执行x圈 */
  50. void right(int x)                 //        单灯右移函数开始
  51. {        int i, j;                        //        声明变数i,j
  52.         for(i=0;i<x;i++)        //        i循环,执行x圈
  53.         {        LED=0x7f;                //        初始状态=0111 1111
  54.                 for(j=0;j<7;j++)//        j循环,右移7次
  55.                 {        delay1ms(250);        //        延迟250 10m=0.25s
  56.                         LED=(LED>>1)|0x80;         //        右移1位後,MSB设为1
  57.                 }                                //        j循环结束
  58.                 delay1ms(250);        //        延迟250 1m=0.25s
  59.         }                                        //        i循环结束*/
  60. }                                                //        单灯右移函数结束
复制代码

该系列源码包含有很多非常经典,代码风格十分规范,而且注释详细的单片机例程,还带仿真,对于MCU学习特别是初学者是很有帮助的,全部源码下载(共几十个项目):http://www.51hei.com/bbs/dpj-80575-1.html

本例程下载(含proteus仿真工程文件与源码):
单片机两个外部中断实验 单灯左移右移3圈.rar (13.12 KB, 下载次数: 16)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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