找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机开关控制心型LED闪烁状态源程序与Proteus仿真

[复制链接]
跳转到指定楼层
楼主
Proteus通过使用单片机C51控制流水灯的闪硕状态,语言简单

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit S1=P2^0;
  6. sbit S2=P2^1;
  7. sbit S3=P2^2;
  8. sbit S4=P2^3;
  9. uchar keyval;   //定义键值变量
  10. void key_scan();        //按键扫描函数声明
  11. void delayms(uint);       //延时函数声明
  12. void pattern1();
  13. void pattern2();
  14. void pattern3();
  15. void pattern4();

  16. void main(void)
  17. {
  18. keyval=0;
  19. while(1)
  20. {
  21.   key_scan();                         //调用按键扫描函数
  22.   switch(keyval)                  
  23.   {
  24.    case 1:pattern1();break; //按键1被按下时执行操作
  25.    case 2:pattern2();break; //按键2被按下时执行操作
  26.    case 3:pattern3();break; //按键3被按下时执行操作
  27.    case 4:pattern4();break; //按键4被按下时执行操作
  28.   }
  29. }
  30. }
  31. void key_scan(void)       //按键扫描函数定义
  32. {
  33. P2=0xff;
  34. if((P2&0x0f)!=0x0f)
  35. {
  36.   delayms(100);    //按键消抖
  37.   if(S1==0)
  38.   keyval=1;
  39.   if(S2==0)
  40.   keyval=2;
  41.   if(S3==0)
  42.   keyval=3;
  43.   if(S4==0)
  44.   keyval=4;
  45. }
  46. }
  47. void delayms(uint j)
  48. {
  49.         uchar i;
  50.         for(;j>0;j--)
  51.         {
  52.                 i=250;
  53.                 while(--i);
  54.                 i=249;
  55.                 while(--i);
  56.         }
  57. }


  58. void pattern1()
  59. {
  60.   uchar i;
  61.         P0=0x7f;
  62.         P1=0xfe;
  63.         for(i=0;i<8;i++)
  64.         {delayms(200);
  65.          P0=_cror_(P0,1);
  66.          P1=_crol_(P1,1);
  67.   }
  68. }

  69. void pattern2()
  70. {
  71.   uchar i,temp;
  72.         temp=0xfe;
  73.         for(i=0;i<8;i++)
  74.         {delayms(200);
  75.          P0=P1=temp;
  76.          temp=temp<<1;
  77.   }
  78. }

  79. void pattern3()
  80. {
  81.     P0=P1=0xff;
  82.           delayms(200);
  83.           P0=P1=0x00;
  84.           delayms(200);
  85. }


  86. void pattern4()
  87. {
  88.   uchar i;
  89.         P0=0x7f;
  90.         for(i=0;i<8;i++)
  91.         {delayms(200);
  92.          P0=_cror_(P0,1);
  93.   }        
  94.         P0=0xff;
  95.         P1=0xfe;
  96.         for(i=0;i<8;i++)
  97.         {delayms(200);
  98.          P1=_crol_(P1,1);
  99.   }
  100.         P1=0xff;
  101. }
复制代码
本人初学,仅供参考,存在错误和不足之处,请大家回帖多多指教,切勿照搬,文件下载:
以上的Keil5代码工程文件和Proteus仿真8.13下载:
以上代码下载.7z (60.43 KB, 下载次数: 16)

评分

参与人数 1黑币 +10 收起 理由
admin + 10 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:561301 发表于 2022-6-8 16:56 | 只看该作者
刚试用了  发现要切换不同的闪烁只能在刚接通电源时才能,中途按下其他键没有反应,
回复

使用道具 举报

板凳
ID:65074 发表于 2023-1-29 16:13 | 只看该作者
我的也是这样的效果 只有复位后按按键可以切换 之后就切换不了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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