搜索
bottom↓
回复: 3

哪位坛友有PUDN的账号,帮忙下载一个程序

[复制链接]

出0入55汤圆

发表于 2018-6-21 11:01:51 | 显示全部楼层 |阅读模式
麻烦有PUDN账号的坛友,帮忙下个程序,非常感谢。
http://www.pudn.com/Download/item/id/3218927.html

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2018-6-21 11:14:44 | 显示全部楼层
本帖最后由 zjk 于 2018-6-21 11:19 编辑

下载了,不知道为什么无法添加附件,
我直接复制代码贴出来吧,你的这个下载链接里只有ML22420.c和ML22420.h这两个文件,另外问下如何阿莫上怎么上传附件。
ML22420.c的
#include<PIC18F87K90.h>
#include<PIC18.h>
#include<stdio.h>
#include "../inc/type.h"
#include "../inc/common.h"
#include "../inc/ML22420.h"
#include "../inc/soft_timer.h"
void MUSIC_CH0(void);
void MUSIC_CH1(void);
void MUSIC_CH2(void);
void MUSIC_CH3(void);
void (const *MUSIC_DONE[8])(void) =
{
        MUSIC_CH0,
        MUSIC_CH1,
        MUSIC_CH2,
        MUSIC_CH3
};
UINT8 ML22420_TransferByte(UINT8 data)
{
        UINT8 i,temp = 0;
        ML22420_CSB = 0;                                //打开片选
        while(ML22420_BUSY == 0);                //判忙
        for(i = 0;i < 8;i++)
        {
                ML22420_SCK = 0;
                NOP();NOP();
                if((data & 0x80) > 0)
                        ML22420_MOSI = 1;
                else
                        ML22420_MOSI = 0;
                NOP();NOP();
                data = data<<1;
                ML22420_SCK = 1;
                NOP();NOP();
                temp = temp << 1;
                temp = temp + ML22420_MISO;
        }
        ML22420_CSB = 1;                                //关闭片选
        return temp;
}
/*
*        上电
*/
void ML22420_PUP(void)
{
        ML22420_TransferByte(0x00);
}
/*
*        断电
*/
void ML22420_PDWN(void)
{
        ML22420_TransferByte(0x20);       
}
/*
*        读取状态
*/
UINT8 ML22420_RDSTAT(UINT8 BitChnum)
{
        UINT8 temp;
        ML22420_TransferByte(0xB0);
        temp = ML22420_TransferByte(0xFF);
        return (temp & BitChnum);
}
/*
*
*/
void ML22420_AMODE(void)
{
        ML22420_TransferByte(0x04);
        ML22420_TransferByte(0xC7);
}
/*
*        PLAY命令用来指定播放的语音段号并开始播放
*/
void ML22420_PLAY(UINT8 chnum,UINT16 segnum)
{
        UINT8 i=100,temp;       
        while(i--)
        {
                temp = ML22420_RDSTAT(1 << chnum);
                if(temp > 0)
                        break;
                if(i == 0)
                        return;
        }
        temp = (segnum & 0x0c00)>>8;        
        chnum |= 0x40;
        chnum |= temp;
        ML22420_TransferByte(chnum);                                        //send first byte
        ML22420_TransferByte(segnum);                                        //send second byte
}
/*
*        STOP命令用于停止播放
*/
void ML22420_STOP(UINT8 chnum)
{
        chnum = 1 << chnum;
        chnum |= 0x60;         
        ML22420_TransferByte(chnum);       
}
/*
*        SLOOP命令用于设定循环播放的模式。可指定每个通道
*/
void ML22420_SLOOP(UINT8 chnum)
{
        UINT8 i = 100,temp;
        chnum = 1 << chnum;
        while(i--)
        {
                temp = ML22420_RDSTAT(chnum);
                if(temp > 0)
                        break;
                if(i == 0)
                        return;
        }
        chnum |= 0x80;         
        ML22420_TransferByte(chnum);
}
/*
*        CLOOP命令用于解除循环播放模式
*/
void ML22420_CLOOP(UINT8 chnum)
{
        chnum = 1 << chnum;
        chnum |= 0x90;         
        ML22420_TransferByte(chnum);       
}
/*
*        CVOL是2字节的命令,用于设定各通道的播放音量
*/
void ML22420_CVOL(UINT8 chnum,UINT16 cvolnum)
{
        chnum = 1 << chnum;
        if((cvolnum > 0x1f)||(chnum > 0x0F))
                return;
        chnum = 0xA0 | (chnum & 0x0f);
        cvolnum = cvolnum & 0x1f;
        ML22420_TransferByte(chnum);                //send first byte
        ML22420_TransferByte(cvolnum);                //send second byte
}
/*
*        AVOL是2字节的命令,用于设定内置放大器的音量
*/
void ML22420_AVOL(UINT16 avolnum)
{
        if(avolnum > 0x3f)
                return;
        avolnum = avolnum & 0x3f;
        ML22420_TransferByte(0x08);                        //send first byte
        ML22420_TransferByte(avolnum);                //send second byte
}
/*
*        APP--停止所有通道
*/
void ML22420_STOP_ALL_PLAY(void)
{
        UINT8 i;
        for(i=0;i<4;i++)
                ML22420_STOP(i);
}
/*
*        APP--设备初始化,
*        注意:当三个通道以上同时循环播放,解除循环播放命令就失效
*/
void ML22420_APP_INIT(void)
{
          ML22420_PUP();
          ML22420_STOP_ALL_PLAY();
        ML22420_AMODE();
    ML22420_CVOL(0,0x01);       
        ML22420_CVOL(1,0x01);
        ML22420_CVOL(2,0x01);       
        ML22420_CVOL(3,0x01);
        ML22420_AVOL(0x30);
}
void MUSIC_CH0(void)
{
        switch(MUSIC_CMD.CMD)
        {
                case MUSIC_PLAY_CMD:
                        if(MUSIC_CMD.SEG == 0)
                                ML22420_PLAY(0,MUSIC_BACK_SEG);
                        else if(MUSIC_CMD.SEG == 1)
                                ML22420_PLAY(0,MUSIC_ERR_SEG);
                        break;
                case MUSIC_SLOOP_CMD:
                        ML22420_SLOOP(0);
                        break;
                case MUSIC_STOP_CMD:
                        ML22420_STOP(0);
                        break;
                case MUSIC_CVOL_CMD:
                        ML22420_CVOL(0,0x05);
                        break;
                default:break;
        }
}
void MUSIC_CH1(void)
{
        switch(MUSIC_CMD.CMD)
        {
                case MUSIC_PLAY_CMD:
                        if(MUSIC_CMD.SEG == 0)
                                ML22420_PLAY(1,MUSIC_SMALL_WHEEL_SEG);
                        else if(MUSIC_CMD.SEG == 1)
                                ML22420_PLAY(1,MUSIC_BIG_WHEEL_SEG);
                        else if(MUSIC_CMD.SEG == 2)
                                ML22420_PLAY(1,MUSIC_WIN_SEG);
                        else
                        {
                                ML22420_PLAY(1,MUSIC_START_SEG);
                                StartTimerOfList(&MUSIC_RUN_A,500);
                        }
                        break;
                case MUSIC_SLOOP_CMD:
                        ML22420_SLOOP(1);
                        break;
                case MUSIC_STOP_CMD:
                        ML22420_STOP(1);
                        break;
                case MUSIC_CVOL_CMD:
                        ML22420_CVOL(1,0x05);
                        break;
                default:break;
        }
}
void MUSIC_CH2(void)
{
        switch(MUSIC_CMD.CMD)
        {
                case MUSIC_PLAY_CMD:
                        if(MUSIC_CMD.SEG == 0)
                                ML22420_PLAY(2,MUSIC_SMALL_WHEEL_SEG);
                        else if(MUSIC_CMD.SEG == 1)
                                ML22420_PLAY(2,MUSIC_BIG_WHEEL_SEG);
                        else if(MUSIC_CMD.SEG == 2)
                                ML22420_PLAY(2,MUSIC_WIN_SEG);
                        else
                        {
                                ML22420_PLAY(2,MUSIC_START_SEG);
                                StartTimerOfList(&MUSIC_RUN_B,500);
                        }
                        break;
                case MUSIC_SLOOP_CMD:
                        ML22420_SLOOP(2);
                        break;
                case MUSIC_STOP_CMD:
                        ML22420_STOP(2);       
                        break;
                case MUSIC_CVOL_CMD:
                        ML22420_CVOL(2,0x05);
                        break;
                default:break;
        }
}
void MUSIC_CH3(void)
{
        switch(MUSIC_CMD.CMD)
        {
                case MUSIC_PLAY_CMD:
                        if(MUSIC_CMD.SEG == 0)
                        {
                                ML22420_STOP(3);
                                ML22420_PLAY(3,MUSIC_HIT_SEG);       
                        }
                        else if(MUSIC_CMD.SEG == 1)
                                ML22420_PLAY(3,MUSIC_INCOIN_SEG);                                       
                        break;
                case MUSIC_SLOOP_CMD:
                        ML22420_SLOOP(3);
                        break;
                case MUSIC_STOP_CMD:
                        ML22420_STOP(3);
                        break;
                case MUSIC_CVOL_CMD:
                        ML22420_CVOL(3,0x05);       
                        break;
                default:break;
        }
}

ML22420.h的
#ifndef __ML22420_H__
#define __ML22420_H__
#define ML22420_CSB         LATCbits.LATC5
#define ML22420_BUSY         PORTAbits.RA4
#define ML22420_SCK         LATCbits.LATC0
#define ML22420_MOSI         LATCbits.LATC2
#define ML22420_MISO         PORTCbits.RC1
extern void ML22420_APP_INIT(void);
extern void ML22420_STOP_ALL_PLAY(void);
extern void ML22420_SLOOP_PLAY(UINT8 chnum,UINT16 segnum);
extern void ML22420_CLOOP(UINT8 chnum);
extern UINT8 ML22420_RDSTAT(UINT8 BitChnum);
extern void ML22420_PLAY(UINT8 chnum,UINT16 segnum);
extern void ML22420_STOP(UINT8 chnum);
extern void ML22420_FADR(UINT8 chnum,UINT16 segnum);
extern void ML22420_START(UINT8 chnum);
extern void (const *MUSIC_DONE[8])(void);
#endif

出0入0汤圆

发表于 2018-6-21 11:01:52 | 显示全部楼层
已上传!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入55汤圆

 楼主| 发表于 2018-6-21 14:46:49 | 显示全部楼层
已搞定,多谢楼上二位
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 23:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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