新人菜鸟求助 想把蜂鸣器和数码管整一起

2019-07-14 19:12发布

我弄成了这样 对吗 #include "system.h"#include "Systick.h"
#include "led.h"
#include "smg.h"
#include "beep.h"


u8 smgduan[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
             0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};//0~F ÊýÂë¹Ü¶ÎÑ¡Êý¾Ý

int main()
{
        u8 i=0;
        SysTick_Init(72);
        LED_Init();
        SMG_Init();
        while(1)
        {
                for(i=0;i<16;i++)
                {
                        GPIO_Write(SMG_PORT,(u16)(~smgduan));
                        delay_ms(1000);        
                }        
                BEEP_Init();
                u16 n=0;
                while(1)
                {
                        n++;
                        if(n%10==0)
                        {
                                beep=!beep;
                        }
                        if(n%20000==0)
                        {
                                led1=!led1;        
                        }
                        delay_us(10);  
                }  
        }

        
        
}




QQ图片20171101175450.png
QQ图片20171101175446.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
人中狼
1楼-- · 2019-07-15 05:45
首先你得确定两个整合之后想要达到什么效果,原程序中两个都是采用延时得方法,这种方法并不好用,特别是想你这样进行整合得情况,最好能修改成使用定时器的方式,这样数码管和蜂鸣器的延时时间都可以在定时器里进行各自的调整,而不会互相影响
xinnnnnn
2楼-- · 2019-07-15 08:16
 精彩回答 2  元偷偷看……
人中狼
3楼-- · 2019-07-15 12:21
你需要设置几个变量,1,数码管扫描计时变量,用来确定每个数码管点亮的时间;2,蜂鸣器鸣响计时变量,用来确定蜂鸣器的鸣响时间;3,蜂鸣器的状态标志,表明蜂鸣器应该是鸣叫还是关闭。
定时器定时一个基本时间,数码管和蜂鸣器的时间就基于这个基本时间来调节。在定时器中断程序里进行数码管的扫描程序,并根据蜂鸣器的状态标志来判断是应该鸣叫还是关闭。
在主程序中进行计数,当计数到F时,设置蜂鸣器状态标志,方便在定时器中断程序里鸣叫蜂鸣器。
调试时可以先调试蜂鸣器部分,这个比较好调试,然后调试数码管部分,这里会有消隐,扫描频率等问题。
川楠
4楼-- · 2019-07-15 14:41
顶一个~~~~~~~~~~~~~~~
juxun001
5楼-- · 2019-07-15 18:00
路过看下,用定时器确实更好!
流星泪落
6楼-- · 2019-07-15 21:13
确实,不用定时器的话非常麻烦

一周热门 更多>