找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

郭天祥单片机开发板上面编写一个LED灯控制程序 求思路

查看数: 1395 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-3-23 20:18

正文摘要:

由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现 利用S2~S5 四个按键以及D1~D8 八颗LED灯编程实现以下功能。  按下S1按键,流水灯开始执 ...

回复

ID:213173 发表于 2021-3-24 16:51
楼主先用这个代码测试,然后再慢慢读懂,就算一只脚入门了。
  1. #include <reg51.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit S2=P3^4;
  5. sbit S3=P3^5;
  6. sbit S4=P3^6;
  7. sbit D1=P1^0;

  8. uint t;
  9. uchar num;
  10. uchar count;
  11. bit sign;

  12. void delayms(uint k)
  13. {
  14.         uint i,j;
  15.         for(i=k;i>0;i--)
  16.                 for(j=110;j>0;j--);
  17. }

  18. void main()
  19. {
  20.         while(1)
  21.         {
  22.                 if(!S2||!S3||!S4)//任意键按下
  23.                 {
  24.                         if(++count>=10 && sign==0)//消抖/
  25.                         {
  26.                                 sign=1;//锁定
  27.                                 if(!S2)
  28.                                 {
  29.                                         num=1;
  30.                                         P1=0xfe;//亮一个灯
  31.                                 }
  32.                                 if(!S3)
  33.                                 {
  34.                                         num=2;
  35.                                         P1=0xff;//关闭所有输出
  36.                                 }
  37.                                 if(!S4)
  38.                                 {
  39.                                         num=0;
  40.                                         P1=0xff;//关闭所有输出
  41.                                 }
  42.                         }
  43.                 }
  44.                 else//松手
  45.                 {
  46.                         count=0;//清0
  47.                         sign=0;//清0
  48.                 }

  49.                 if(num==1)
  50.                 {
  51.                         if(++t%500==0)//0.5秒周期
  52.                         {
  53.                                 P1=(P1<<1)+1;//左移一位,最低位补1
  54.                                 if(P1==0xff)
  55.                                         P1=0xfe;//重新开始
  56.                         }
  57.                 }
  58.                 if(num==2)
  59.                 {
  60.                         if(++t%500==0)//0.5秒周期
  61.                         {
  62.                                 D1=~D1;//取反
  63.                         }
  64.                 }
  65.                 delayms(1);//控制主循环周期1ms
  66.         }
  67. }
复制代码

评分

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

查看全部评分

ID:894154 发表于 2021-3-24 13:47
while(1)
{
if(key==S1)
{P1.0=1;dealy();P1.1=1;dealy();..............P1.7=1;dealy();P1=0X00;dealy();}
if(key==S2)
{P1=0x00;dealy();P1=0xFF;dealy();}
if(key==S3)
{P1=0x00;}
}

评分

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

查看全部评分

ID:139866 发表于 2021-3-24 09:36
看电路图找出按键和LED的IO口,然后就是LED控制和键盘读取的问题了,easy!

评分

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

查看全部评分

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

Powered by 单片机教程网

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