标题: 如何在这个单片机程序中加一个关于LED闪烁的代码?谢谢 [打印本页]

作者: wanglin1207    时间: 2020-6-30 17:17
标题: 如何在这个单片机程序中加一个关于LED闪烁的代码?谢谢
音乐盒.zip (101.1 KB, 下载次数: 26)



作者: man1234567    时间: 2020-7-1 08:17
赏金太高必须参与 while(1){led=1;delay(25);led=0;delay(25);}
作者: wanglin1207    时间: 2020-7-1 08:30
man1234567 发表于 2020-7-1 08:17
赏金太高必须参与 while(1){led=1;delay(25);led=0;delay(25);}

从哪里加这个代码??
作者: liangsheng0212    时间: 2020-7-1 08:34
wanglin1207 发表于 2020-7-1 08:30
从哪里加这个代码??

在主函数死循环里加就行,你看你要通过什么条件来实现LED闪烁
作者: ranghe    时间: 2020-7-1 08:41
LED=1;led=0;加计数器产品脉冲
作者: XTXB    时间: 2020-7-1 08:51


作者: liqingb    时间: 2020-7-1 08:53
  1.                 i++;
  2.                 switch(i)
  3.                 {
  4.                         case 1: P2=_crol_(P2,1);break
  5.                         default :break
  6.                
  7.                 }
复制代码
可以p2口用音符值赋值,做成类似MP3

作者: xieyebao1995    时间: 2020-7-1 08:54
在主函数里面添加即可,加延时,就会有闪烁效果
作者: thanksbaby    时间: 2020-7-1 09:04
建议楼主将代码直接发出来,省的下载。可以直观一点。
闪烁一般是在主函数的while循环里面添加即可。
作者: 卡2666    时间: 2020-7-1 09:16
文件我这里错误,打不开了,给你两个闪烁的文件,可以参考一下
作者: 卡2666    时间: 2020-7-1 09:19
我打不开你的文件,这儿有几段闪烁的,你可以看一下:<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <WORKSPACE>  <FRAME activewindow="0">   <PLACEMENT>2c0000000200000003000000ffffffffffffffffffffffffffffffff000000000300000020060000f3030000</PLACEMENT>   <WINDOW type="default" module="ISIS"/>  </FRAME>  <MODULE name="VSMDEBUG">   <PWI/>  </MODULE> </WORKSPACE>看看这个有没有用
作者: XTXB    时间: 2020-7-1 09:52
有发声程序,用delay容易引起发声不连贯,建议用非阻塞方式实现LED闪烁:



作者: 权威人物    时间: 2020-7-1 11:22
如果你想要稳定的闪烁可以在定时器中使用计数,在主循环中判断计数值,达到规定值就翻转一下LED对应的IO口,计数值清零
作者: xujiabin    时间: 2020-7-1 11:38
一般不建议在主函数里面添加延时,会影响主函数运行,其实在定时器里面加个标志位就可以,到了时间引脚翻转一下就可以,这样的灯的闪烁频率比较准确,尤其是在做国标项目时。比如定时器定时中断为10毫秒,500毫秒翻转一次。,你家一个计数标志,到50时清零。同时给主函数一个标志,监测到这个标志就翻转一下io口,就可以了。
作者: naqishuben    时间: 2020-7-1 12:11
仔细看看,不复杂
作者: 随风飘远    时间: 2020-7-1 12:21
可以加一个 LED的子函数吧
作者: 陈润源home    时间: 2020-7-1 14:55
定时器里面加一个LED=!LED;
作者: XYB1995    时间: 2020-7-1 15:55
不建议在主函数里面添加,可以试试用定时器。
作者: wanglin1207    时间: 2020-7-1 16:51
XTXB 发表于 2020-7-1 09:52
有发声程序,用delay容易引起发声不连贯,建议用非阻塞方式实现LED闪烁:

加一下企鹅可以吗

作者: XTXB    时间: 2020-7-1 22:07
搞定没?1000太大了,你是等不到闪烁的,改为1或2就闪烁了,就是不大稳定,把红框代码放到定时器0中断中效果会好一些。要闪烁稳定,最好单独开个定时器2,把它放到定时器2中断中,就是不知道对发音影响大不大。
作者: sgyx    时间: 2020-7-2 15:53
可以再加个定时器1,和定时器0相类似的,这样控制的LED闪烁时间会非常准
作者: 魏海龙    时间: 2020-7-7 11:30
我感觉直接在while(1)
{
    led=~led;
    延时就好了  延时看你自己定
}
作者: 小黑的大表舅    时间: 2020-7-7 11:38
led=~led;
作者: hzw854025403    时间: 2020-9-27 11:40
应该先了解一下你这闪烁是要什么条件执行的,还是只是闪烁,只是闪烁加在中断里就行,要是有条件,就弄一个定时标志位,然后在主程序中添加条件判断
作者: 梁廷明    时间: 2020-9-28 10:35
led!=led;
作者: lenvov    时间: 2020-9-28 11:24
unsigned char code FREQL[]={
    0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,    //低音1234567
    0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
    0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,             //高音 234567
    0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};   //超高音 1234567  

sbit LED=P0^0   //定义P0^0为LED,方便操作,这个只是举例,实际以你led与具体IO口连接为准

void main(void)
{
        TMOD=0x11; //T0 T1 均在工作方式1
        ET0=1;  //T0开中断
        EA=1;   //CPU开中断         
        while(1)
        {            LED=0;
                               delay_ms(500);
                                LED=1;
                               delay_ms(500);//这四句可以实现闪烁,但是由于下面语句可能会有其他语句延时
                                                        //具体延时未知,若要准确闪烁,可使用定时器中断。


                music_play();        //根据当前状态播放相应歌曲的某个音符

                实际修改已用红色标出,还有疑问,可直接询问
作者: tianyue2001    时间: 2020-9-28 18:32
理想做法是做一个计时中断,在中断里做io引脚翻转
作者: 67889018    时间: 2020-9-28 19:49
写一个led_toggle()函数 delay一定时间,通过转换led的高低电平达到闪烁效果
作者: 德斯佩尔    时间: 2020-9-29 08:52
楼主可以试试在循环程序中加个led=~led;
作者: 昆明路口卖提莫    时间: 2020-9-29 11:30
让led闪烁就是让IO口高低电平而已, 如果要闪烁时间有要求就要加固定的延时,让闪烁的像呼吸灯一样就要用PWM, 这些都是基础,望楼主好好学习.
作者: 七禾页    时间: 2020-10-8 19:27
主函数里面加一个led=~led
作者: atom1    时间: 2020-10-9 18:32
如果还有中断资源用中断是最好的,既能实现目标,又不会影响主程序。最好看下手册,看下会不会有些程序设置上的重合,确保一下




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