标题:
关于mcu的LED灯驱动程序 求各位大佬解释一下
[打印本页]
作者:
阳光与雨天
时间:
2018-9-19 13:52
标题:
关于mcu的LED灯驱动程序 求各位大佬解释一下
图一的程序为什么LED灯常亮,而图二的程序LED灯闪烁,两者有什么区别
1.png
(29.09 KB, 下载次数: 32)
下载附件
2018-9-19 13:51 上传
2.png
(29.44 KB, 下载次数: 36)
下载附件
2018-9-19 13:51 上传
作者:
杨雪飞
时间:
2018-9-19 14:25
闪烁是因为延时,第一图的延时子程序不对,没有延时。
作者:
taotie
时间:
2018-9-19 15:39
第一个无延时~第二个有延时。
作者:
cjm82
时间:
2018-9-19 15:57
图一的DELAY里面是空的,DELAY没有起作用.LED在高速的开关,其实LED也是闪的,只不过频率高眼睛看不到而已.
作者:
gaoyang9992006
时间:
2018-9-19 16:09
第一个的delay没有实现的函数体。
作者:
hellow_kitty
时间:
2018-9-19 17:07
第一个根本没有写任何delay函数呀
作者:
fjxmhhw
时间:
2018-9-19 17:17
赞同5楼说法
作者:
JACK2008
时间:
2018-9-19 17:59
第一个的delay没有具体的执行指令,第二个就有
作者:
文凤轩
时间:
2018-9-20 00:25
你只声明了延时函数,并没有写延时子程序呀,所以调用无效。
作者:
sxhwdz
时间:
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++);
}
作者:
TRAME
时间:
2018-9-20 08:06
图一的延时没有定义一个函数,你调用也是没有的。图二你在主程序前定义了延时函数。
作者:
jefelee
时间:
2018-9-20 08:48
第一张是错的,没有延时,而且,开始你给的是低电平,它亮可能不是你程序使它亮的。它亮可能相当于指示的意思。
作者:
jefelee
时间:
2018-9-20 08:59
第一个没延时,你把第二个Delay(20000)改成Delay(20)或更小,会出现“常亮”(其实在闪)效果,事实上只要有delay延时执行,LED都在闪烁,只是如果延时时间太短时,由于人视觉暂留原因,看不出来闪烁现象。
顺便@论坛管理员 能不能搞一个,评论2分钟内可以撤销的功能???
作者:
51hei1329904775
时间:
2018-9-20 09:05
第一个delay函数写的不对,也起不到延时的作用,没有运行程序。
作者:
51hei1772348223
时间:
2018-9-20 09:48
图一的DELAY里面是空的,DELAY就只延时了一个指令周期的时间.LED在高速的开关
作者:
grizzly
时间:
2018-9-20 10:05
延时的本质是让程序处于一种什么都不做的状态(cpu在工作),相当于空耗一段时间
作者:
lzhy25
时间:
2018-9-20 10:15
第一个没执行 ,第二个执行了,可是设个断点自行验证的
作者:
wsdx203
时间:
2018-9-20 11:19
第一个延时有问题
作者:
阳光与雨天
时间:
2018-9-20 15:52
谢谢各位的解释
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1