标题: 郭天祥单片机开发板上面编写一个LED灯控制程序 求思路 [打印本页]

作者: 1679153346    时间: 2021-3-23 20:18
标题: 郭天祥单片机开发板上面编写一个LED灯控制程序 求思路
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现

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

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

IMG_20210323_201816.jpg

作者: 天ノ忆    时间: 2021-3-24 09:36
看电路图找出按键和LED的IO口,然后就是LED控制和键盘读取的问题了,easy!
作者: ANT1987    时间: 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;}
}
作者: wulin    时间: 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. }
复制代码





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1