找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于mcu的LED灯驱动程序 求各位大佬解释一下

  [复制链接]
跳转到指定楼层
楼主
图一的程序为什么LED灯常亮,而图二的程序LED灯闪烁,两者有什么区别

1.png (29.09 KB, 下载次数: 31)

1.png

2.png (29.44 KB, 下载次数: 35)

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

使用道具 举报

沙发
ID:97554 发表于 2018-9-19 14:25 | 只看该作者
闪烁是因为延时,第一图的延时子程序不对,没有延时。

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:342822 发表于 2018-9-19 15:39 | 只看该作者
第一个无延时~第二个有延时。
回复

使用道具 举报

地板
ID:388197 发表于 2018-9-19 15:57 | 只看该作者
图一的DELAY里面是空的,DELAY没有起作用.LED在高速的开关,其实LED也是闪的,只不过频率高眼睛看不到而已.

评分

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

查看全部评分

回复

使用道具 举报

5#
ID:38792 发表于 2018-9-19 16:09 | 只看该作者
第一个的delay没有实现的函数体。

评分

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

查看全部评分

回复

使用道具 举报

6#
ID:399921 发表于 2018-9-19 17:07 | 只看该作者
第一个根本没有写任何delay函数呀

评分

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

查看全部评分

回复

使用道具 举报

7#
ID:256002 发表于 2018-9-19 17:17 | 只看该作者
赞同5楼说法
回复

使用道具 举报

8#
ID:383749 发表于 2018-9-19 17:59 | 只看该作者
第一个的delay没有具体的执行指令,第二个就有

评分

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

查看全部评分

回复

使用道具 举报

9#
ID:386381 发表于 2018-9-20 00:25 来自手机 | 只看该作者
你只声明了延时函数,并没有写延时子程序呀,所以调用无效。
回复

使用道具 举报

10#
ID:387733 发表于 2018-9-20 07:51 | 只看该作者
第一个延时函数只有申明,没有实体,编译时就会报警,延时函数无法定位,所以链接以后该地址仍为0000,这样主程序执行第一条命令LED=0以后,又跳回0000重新开始,于是反复执行第一条指令。

C:0x0000    020017   LJMP     STARTUP1(C:0017)
     4:  void main(void)
     5:  {
     6:          while(1)
     7:          {
     8:                  led=0;
C:0x0003    C2A1     CLR      led(0xA0.1)
     9:                 delay(20000)
C:0x0005    7F20     MOV      R7,#0x20
C:0x0007    7E4E     MOV      R6,#0x4E
C:0x0009    120000   LCALL    C_STARTUP(C:0000)

第二个图的程序也不能通过编译,因为延时函数头后面多了个“ ;”,变成了函数申明

void delay(unsigned int i);
{
        unsigned int x;
        for(x=0;x<i;x++);
}
回复

使用道具 举报

11#
ID:372001 发表于 2018-9-20 08:06 | 只看该作者
图一的延时没有定义一个函数,你调用也是没有的。图二你在主程序前定义了延时函数。
回复

使用道具 举报

12#
ID:354282 发表于 2018-9-20 08:48 | 只看该作者
第一张是错的,没有延时,而且,开始你给的是低电平,它亮可能不是你程序使它亮的。它亮可能相当于指示的意思。
回复

使用道具 举报

13#
ID:354282 发表于 2018-9-20 08:59 | 只看该作者
第一个没延时,你把第二个Delay(20000)改成Delay(20)或更小,会出现“常亮”(其实在闪)效果,事实上只要有delay延时执行,LED都在闪烁,只是如果延时时间太短时,由于人视觉暂留原因,看不出来闪烁现象。

顺便@论坛管理员  能不能搞一个,评论2分钟内可以撤销的功能???
回复

使用道具 举报

14#
ID:400374 发表于 2018-9-20 09:05 | 只看该作者
第一个delay函数写的不对,也起不到延时的作用,没有运行程序。
回复

使用道具 举报

15#
ID:400401 发表于 2018-9-20 09:48 | 只看该作者
图一的DELAY里面是空的,DELAY就只延时了一个指令周期的时间.LED在高速的开关
回复

使用道具 举报

16#
ID:398663 发表于 2018-9-20 10:05 | 只看该作者
延时的本质是让程序处于一种什么都不做的状态(cpu在工作),相当于空耗一段时间
回复

使用道具 举报

17#
ID:400421 发表于 2018-9-20 10:15 | 只看该作者
第一个没执行 ,第二个执行了,可是设个断点自行验证的
回复

使用道具 举报

18#
ID:400416 发表于 2018-9-20 11:19 | 只看该作者
第一个延时有问题
回复

使用道具 举报

19#
ID:399963 发表于 2018-9-20 15:52 | 只看该作者
谢谢各位的解释
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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