找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么改这个程序可以让单片机LED灯从中间往两边亮

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg52.h>

  2. sbit LED = P0^0;
  3. sbit ADDR0 = P1^0;
  4. sbit ADDR1 = P1^1;
  5. sbit ADDR2 = P1^2;
  6. sbit ADDR3 = P1^3;
  7. sbit ENLED = P1^4;

  8. void main()
  9. {
  10.         ENLED = 0;
  11.         ADDR3 = 1;
  12.         ADDR2 = 1;
  13.         ADDR1 = 1;
  14.         ADDR0 = 0;

  15.         LED = 1;
  16.         while(1);
  17. }
复制代码


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

使用道具 举报

沙发
ID:308784 发表于 2018-9-6 22:16 | 只看该作者
void main() {              ADDR2 = 1;         ADDR1 = 1;   delay();      ADDR0 = 1;ADDR3 = 1  ; delay();       LED = 1; ENLED = 1;        while(1); }
回复

使用道具 举报

板凳
ID:394799 发表于 2018-9-6 23:26 来自手机 | 只看该作者
LED口和ENLED口也连接LED吗?
回复

使用道具 举报

地板
ID:116893 发表于 2018-9-7 08:15 | 只看该作者
你这是某开发板的吧,用数组,位移啥的可以。
回复

使用道具 举报

5#
ID:164602 发表于 2018-9-7 08:49 | 只看该作者
同学,你不给你的电路,我怎么帮你嘛。
单片机程序,一定、只能根据电路来进行,同样功能,不同电路,程序一定有区别的。
你想让灯从中间向两边亮,但看你的程序,灯涉及两个口,看不出哪个灯是中间的,哪个又是边上的,怎么编程呢?
回复

使用道具 举报

6#
ID:394872 发表于 2018-9-7 10:03 | 只看该作者
需要你的电路原理图呢
回复

使用道具 举报

7#
ID:384109 发表于 2018-9-7 10:19 | 只看该作者
这个要求就是走马灯了,程序里需要循环,因为需要点亮LED,再关闭LED,可以参考走马灯的程序,你的程序里是四个LED,最简单的做法就是先关闭所有LED,然后点亮ADDR2和ADDR1,延时一段时间,关闭ADDR2和ADDR1,点亮ADDR3和ADDR0,延时一段时间,关闭ADDR3和ADDR0,就可以达到你要的效果了
回复

使用道具 举报

8#
ID:301037 发表于 2018-9-7 11:01 | 只看该作者
定义了6个   但是不知道你这个原来咋亮的   
回复

使用道具 举报

9#
ID:357877 发表于 2018-9-7 21:19 | 只看该作者
这个是电路原理图

QQ截图20180907211014.png (514.62 KB, 下载次数: 24)

QQ截图20180907211014.png
回复

使用道具 举报

10#
ID:357877 发表于 2018-9-7 21:30 | 只看该作者
allen2016 发表于 2018-9-7 08:15
你这是某开发板的吧,用数组,位移啥的可以。

嗯嗯  怎么操作
回复

使用道具 举报

11#
ID:155507 发表于 2018-9-8 09:17 | 只看该作者
给你改了一下试试。

  1. #include<reg52.h>

  2. #define LEDPORT P0

  3. //sbit LED = P0^0;
  4. sbit ADDR0 = P1^0;
  5. sbit ADDR1 = P1^1;
  6. sbit ADDR2 = P1^2;
  7. sbit ADDR3 = P1^3;
  8. sbit ENLED = P1^4;

  9. unsigned char p[] = {
  10.         0x18, //00011000
  11.         0x24, //00100100
  12.         0x42, //01000010
  13.         0x81, //10000001
  14.         0x42, //01000010
  15.         0x24, //00100100
  16.         0x18  //00011000
  17. };

  18. //mS延时函数
  19. void DelayMs(unsigned int t)
  20. {
  21.         unsigned int i,j;
  22.         for(i=0;i<t;i++)
  23.                 for(j=0;j<148;j++);

  24. }


  25. void main()
  26. {
  27.         int i;
  28.         ENLED = 0;
  29.         ADDR3 = 1;
  30.         ADDR2 = 1;
  31.         ADDR1 = 1;
  32.         ADDR0 = 0;

  33.         //LED = 1;
  34.         while(1)
  35.         {
  36.                 for(i=0;i<6;i++)
  37.                 {
  38.                         LEDPORT = p[i];
  39.                         DelayMs(600); //延时600毫秒
  40.                 }
  41.         }
  42. }


复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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