找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3458|回复: 0
收起左侧

04 开关按键控制类单片机系统(proteus仿真+keil5)

[复制链接]
ID:628491 发表于 2019-12-16 10:02 | 显示全部楼层 |阅读模式
单片机仿真实习任务:
04 开关按键控制类单片机系统
04.png

  1. /**************************
  2. * 说明: 按键被按下时led灯灭
  3. **************************/
  4. #include <reg52.h>
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. //定义按键端口
  8. sbit key1 = P2^0;
  9. sbit key2 = P2^1;
  10. sbit key3 = P2^2;
  11. sbit key4 = P2^3;
  12. sbit key5 = P2^4;
  13. sbit key6 = P2^5;
  14. sbit key7 = P2^6;
  15. sbit key8 = P2^7;


  16. #define led P1        //对整个P2端口进行操作

  17. /*        延时函数                */
  18. void delay(unsigned int del)         //10ms * del
  19. {
  20.         unsigned int i,j;
  21.         for(i=0; i<del; i++)
  22.         for(j=0; j<1827; j++);      

  23. }

  24. void  Led_Pipeline_1() //先从右到左逐个亮灭;再从左到右逐个亮灭;
  25. {
  26.         unsigned  char i;       
  27.         delay(10);
  28.         led=0xfe;        //初始状态将LED0点亮

  29.         for(i=0;i<8;i++)//        1111 1110
  30.         {
  31.                 P1=~(0x01<<i);         //将0000 0001左移i位,然后将结果取反赋值到P2口
  32.                 delay(20);         //大约延时200ms
  33.         }
  34.         led=0xFF; //熄灭所有LED
  35.         delay(20);
  36.         for(i=0;i<8;i++)
  37.         {
  38.                 P1=~(0x80>>i);         //将1右移i位,然后将结果取反赋值到P2口
  39.                 delay(20);
  40.         }       
  41.         led=0xFF; //熄灭所有LED
  42. }
  43. void Led_Pipeline_2() //两侧向中间,再中间向两侧亮灭
  44. {
  45.         unsigned  char i,High,Low;
  46.         delay(20);
  47.         led=0x7E;        //初始状态将两侧点亮
  48.         High=led&0xF0;        //高四位
  49.         Low=led&0x0F;          //低四位
  50.         delay(30);
  51.         for(i=0;i<3;i++)
  52.         {
  53.                 High=~(~High>>1);         //将0x8右移1位
  54.                 Low=~(~Low<<1);           //将0x1左移1位
  55.                
  56.                 led=(High&0xF0)|(Low&0x0F);//保证高位、低位不受到移位影响
  57.                 delay(30);
  58.         }       
  59.         led=0xFF; //熄灭所有LED
  60.         delay(20);
  61.         led=0xE7;//初始状态将中间两颗LED点亮
  62.         delay(30);
  63.         for(i=0;i<3;i++)
  64.         {
  65.                 High=~(~High<<1);         //将0x8右移i位
  66.                 Low=~(~Low>>1);         //将0x1左移i位
  67.                
  68.                 led=(High&0xF0)|(Low&0x0F);//保证高位、低位不受到移位影响
  69.                 delay(30);
  70.         }       
  71.         led=0xFF; //熄灭所有LED
  72. }

  73. void Led_Pipeline_3() //先右再左逐个亮起,不熄灭;再从左到右逐个熄灭;
  74. {
  75.         unsigned  char i;       
  76.         delay(20);
  77.         led=0xfe;        //初始状态将LED0点亮
  78.         delay(10);
  79.         for(i=0;i<8;i++)
  80.         {
  81.                 P1=0xFE<<i;         //将1111 1110左移i位,然后将结果赋值到P2口
  82.                 delay(10);         //大约延时100ms
  83.         }
  84.         led=0xFF; //熄灭所有LED
  85.         for(i=0;i<8;i++)
  86.         {
  87.                 P1=~(0xFF>>i);         //将1111 1111右移i位,然后将结果取反赋值到P2口
  88.                 delay(10);
  89.         }       
  90.         led=0xFF; //熄灭所有LED
  91. }

  92. void Led_Pipeline_4() //先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;
  93. {
  94.         unsigned  char i;       
  95.         delay(20);
  96.         led=0x7F;       
  97.         delay(10);
  98.         for(i=0;i<8;i++)
  99.         {
  100.                 P1=0x7F>>i;         
  101.                 delay(10);
  102.         }
  103.         led=0xFF;
  104.         for(i=0;i<8;i++)
  105.         {
  106.                 P1=~(0xFF<<i);
  107.                 delay(10);
  108.         }       
  109.         led=0xFF; //熄灭所有LED
  110. }





  111. //程序入口
  112. void main()
  113. {
  114.   while(1)
  115.   {

  116.           if(key1 == 0)
  117.                 {
  118.             Led_Pipeline_1();
  119.           }
  120.           else if(key2 == 0)
  121.                 {
  122.             Led_Pipeline_2();
  123.           }
  124.                 else if(key3 == 0)
  125.                 {
  126.             Led_Pipeline_3();
  127.           }
  128.                 else if(key4 == 0)
  129.                 {
  130.             Led_Pipeline_4();
  131.           }
  132.                 else if(key5 == 0)
  133.                 {
  134.             led = 0x00;          //灯亮
  135.           }
  136.                 else if(key6 == 0)
  137.                 {
  138.             led = 0x55;          //灯亮
  139.           }
  140.                 else if(key7 == 0)
  141.                 {
  142.             led = 0xF0;          //灯亮
  143.           }
  144.                 else if(key8 == 0)
  145.                 {
  146.             led = 0xFF;          //灯亮
  147.           }

  148.   }
  149. }
复制代码




04 Single-chip microcomputer system for switch button control.rar

118.19 KB, 下载次数: 15, 下载积分: 黑币 -5

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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