找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
#
ID:895686 发表于 2021-3-23 20:18 来自手机 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现

利用S2~S5 四个按键以及D1~D8 八颗LED灯编程实现以下功能。  按下S1按键,流水灯开始执行;  按下S2按键,D1灯闪烁(使用位取反的方式,D1 = ~D1);  按下S3按键全部功能停止。  

IMG_20210323_201816.jpg (1.55 MB, 下载次数: 57)

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

使用道具 举报

板凳
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 单片机教程网

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