找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8872|回复: 6
收起左侧

单片机按键控制流水灯 swtich语句的控制P0口8位LED的点亮状态

[复制链接]
ID:408573 发表于 2018-11-8 13:22 | 显示全部楼层 |阅读模式
swtich语句的控制P0口8位LED的点亮状态

单片机源程序如下:
  1. //实例20:用swtich语句的控制P1口8位LED的点亮状态
  2. #include<reg51.h>  //包含单片机寄存器的头文件
  3. sbit K5=P3^2;     //将K5位定义为P1.4
  4. /*****************************
  5. 函数功能:延时一段时间
  6. *****************************/
  7. void delay(void)
  8. {
  9. unsigned int n;
  10. for(n=0;n<20000;n++)
  11.         ;
  12. }
  13. /*****************************
  14. 函数功能:主函数
  15. *****************************/
  16. //download by http://www.codefans.net
  17. void main(void)
  18. {  
  19.    unsigned char i;
  20.         i=0;    //将i初始化为0
  21.         while(1)
  22.          {
  23.                   if(K5==0)     //如果S1键按下
  24.                    {
  25.                           delay();  //延时一段时间 按键消抖
  26.                           if(K5==0) //如果再次检测到S1键按下
  27.                             i++;    //i自增1
  28.                           if(i==9)  //如果i=9,重新将其置为1
  29.                             i=1;
  30.                                
  31.                    }
  32.                  switch(i)   //使用多分支选择语句
  33.                                  {
  34.                                    case 1: P1=0xfe;  //第一个LED亮
  35.                                                         break;
  36.                                         case 2: P1=0xfd;  //第二个LED亮
  37.                                               break;
  38.                                         case 3:P1=0xfb;   //第三个LED亮
  39.                                               break;
  40.                                         case 4:P1=0xf7;   //第四个LED亮
  41.                                               break;
  42.                                         case 5:P1=0xef;   //第五个LED亮
  43.                                               break;
  44.                                         case 6:P1=0xdf;   //第六个LED亮
  45.                                               break;
  46.                                         case 7:P1=0xbf;   //第七个LED亮
  47.                                          break;
  48.                                         case 8:P1=0x7f;   //第八个LED亮
  49.                                               break;
  50.                                         default:   //缺省值,关闭所有LED
  51.                                               P1=0xff;
  52.                                  }
  53.                  }          
  54. }
复制代码

所有资料51hei提供下载:
swtich语句的控制P0口8位LED的点亮状态.zip (9.22 KB, 下载次数: 35)

评分

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

查看全部评分

回复

使用道具 举报

ID:66287 发表于 2018-11-12 09:52 | 显示全部楼层
用switch语句,确实比if语句方便高效。
回复

使用道具 举报

ID:66287 发表于 2018-12-3 08:40 | 显示全部楼层
程序有待推敲,如果按键一直按下,LED会以10ms为单位快速变化,也就是什么也看不清,达不到原设计目的。
回复

使用道具 举报

ID:438257 发表于 2018-12-3 11:22 | 显示全部楼层
不需要用中断吗
回复

使用道具 举报

ID:66287 发表于 2018-12-3 14:09 | 显示全部楼层
问题出现在这里:
if(K5==0)     //如果S1键按下
                   {
                          delay();  //延时一段时间 按键消抖
                          if(K5==0) //如果再次检测到S1键按下
                            i++;    //i自增1
                          if(i==9)  //如果i=9,重新将其置为1
                            i=1;
                                
                   }

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:728926 发表于 2020-11-7 10:08 来自手机 | 显示全部楼层
怎么用if来写这个了?
回复

使用道具 举报

ID:619259 发表于 2020-11-8 23:13 来自手机 | 显示全部楼层
用代码表更简
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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