3

主题

0

好友

37

积分

注册会员 当前离线

Rank: 2

UID
21868
帖子
48
精华
0
经验
37 点
金钱
25 ¥
注册时间
2007-4-21
发表于 2011-6-5 14:09 | 显示全部楼层
/******************
晶振为11.0592MHZ,
*******************/
#include<reg52.h>
#include<INTRINS.H>

#define uchar unsigned char         //宏定义{用uchar代替"unsigned char(无符号字符型)"}
#define uint  unsigned int     //宏定义{用uint代替"unsigned int  (无符号字整型)"}

void VolSet(uchar Volume);

sbit M62429_DAT= P2^0;  //数据定义位                4
sbit M62429_CLK= P2^1;         //时钟定义位        5
sbit k1 = P1^0;        //音量大
sbit k2 = P1^1;        //音量小
  void main()
{
        
   M62429_DAT=0;
    M62429_CLK=0;   
   _nop_();_nop_();_nop_();_nop_();        _nop_();
    while(1)
          {
        if(k1==0)
        {VolSet(87);}
        if(k2==0)
        {VolSet(0);}
           }


  }


void VolSet(uchar Volume)
{
uint Dat=0;
uchar i;
Volume=87-Volume;  //得到要送到芯片的实际数
Dat=(0x600|(Volume&0xfc)|((Volume&0x03)<<7));//设置通道1,2
EA=0;
for (i=0;i<10;i++)        //发送10位数据,共11位,最后1位另外发
  {
   M62429_DAT=Dat&0x01;
   _nop_();_nop_();_nop_();_nop_();        _nop_();
   M62429_CLK=1;   
   _nop_();_nop_();_nop_();_nop_();        _nop_();
   M62429_DAT=0;
   _nop_(); _nop_();_nop_();_nop_(); _nop_();
   M62429_CLK=0;     
   Dat>>=1;      
  }
M62429_DAT=1;
_nop_(); _nop_();_nop_();_nop_(); _nop_();
M62429_CLK=1;
_nop_();_nop_();_nop_();_nop_();        _nop_();
M62429_CLK=0;  
EA=1;
}

这是网上的一段程序,我自己修改的,想做个带电调音量的电子管前级。
但这个程序不能控制M62429.不知道哪里不对啊!!!

56

主题

12

好友

6087

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7495
精华
0
经验
6087 点
金钱
5744 ¥
注册时间
2008-10-20
发表于 2011-6-5 14:45 | 显示全部楼层
本帖最后由 卡西利亚斯 于 2011-6-5 14:51 编辑

unsigned char volume = 0;
unsigned char i=11 ;
unsigned int dat ;
//全局

volume 从EEPROM里取,上电的时候读一下,断电时候写一下。

volume++;或volume--;

dat = (((volume<<5)|(volume>>2))<<2)|0x0C01;           

用循环 发送LSB 到10bit 共11位

3

主题

0

好友

37

积分

注册会员 当前离线

Rank: 2

UID
21868
帖子
48
精华
0
经验
37 点
金钱
25 ¥
注册时间
2007-4-21
 楼主| 发表于 2011-6-6 09:16 | 显示全部楼层
回复 2# 卡西利亚斯
我算了得,我那个算法好像是对的,我就是不知道时序对不对,我用11.0592的晶振。

56

主题

12

好友

6087

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7495
精华
0
经验
6087 点
金钱
5744 ¥
注册时间
2008-10-20
发表于 2011-6-6 09:52 | 显示全部楼层
回复  卡西利亚斯
我算了得,我那个算法好像是对的,我就是不知道时序对不对,我用11.0592的晶振。
TONEE 发表于 2011-6-6 09:16



那就不清楚了,你上Proteus看看时续吧。

3

主题

0

好友

37

积分

注册会员 当前离线

Rank: 2

UID
21868
帖子
48
精华
0
经验
37 点
金钱
25 ¥
注册时间
2007-4-21
 楼主| 发表于 2011-6-6 10:45 | 显示全部楼层
回复 4# 卡西利亚斯

我自己重新写的程序帮忙看看;
我先只是简单的测试音量是否可控,到时候再加入音量加和音量减。

/******************
晶振为11.0592MHZ,
*******************/
#include<reg52.h>
//#include<absacc.h>           //
#include<INTRINS.H>

#define uchar unsigned char                 //宏定义{用uchar代替"unsigned char(无符号字符型)"}
#define uint  unsigned int       //宏定义{用uint 代替"unsigned int (无符号字整型)"}


uchar Dat=0;       //5位数据..主音量参数
uchar Dat2=0;      //2位数据..副音量参数
uchar mod=0x03     //2位数据..声道控制

void VolSet(uint Vol1);
void delay();
void delaym();

sbit M62429_DAT= P2^0;  //数据定义位                4
sbit M62429_CLK= P2^1;         //时钟定义位                5
sbit k1 = P0^0;        //音量
sbit k2 = P0^1;        //音量
sbit k3 = P0^2;        //音量
sbit k4 = P0^3;        //音量
sbit k5 = P0^4;        //音量
sbit k6 = P0^5;        //音量
sbit k7 = P0^6;        //音量
sbit k8 = P0^7;        //音量



void delaym(void)   //误差 -0.000000000002us
{
    unsigned char a,b;
    for(b=249;b>0;b--)
        for(a=17;a>0;a--);
}


void delay(void)   //误差 -0.000000000045us
{
    unsigned char a,b,c;
    for(c=131;c>0;c--)
        for(b=156;b>0;b--)
            for(a=3;a>0;a--);
}
  void main()
{
   M62429_DAT=0;
   M62429_CLK=0;   
//  _nop_();_nop_();_nop_();_nop_();_nop_();


  delay();       
//   delay();       
VolSet(10);
  delay();
    while(1)
          {

        if(k1==0)
        { delaym();
         if(k1==0)
          {
           VolSet(21);
          }
        }

        if(k2==0)
        { delaym();
         if(k2==0)
           {
            VolSet(20);
           }
         }

        if(k3==0)
        { delaym();
         if(k3==0)
           {
            VolSet(15);
           }
         }

       
        if(k4==0)
        { delaym();
         if(k4==0)
           {
            VolSet(12);
           }
         }

  
        if(k5==0)
        { delaym();
         if(k5==0)
           {
            VolSet(9);
           }
         }

   
        if(k6==0)
        { delaym();
         if(k6==0)
           {
            VolSet(6);
           }
         }

  
        if(k7==0)
        { delaym();
         if(k7==0)
           {
            VolSet(3);
           }
         }


        if(k8==0)
        { delaym();
         if(k8==0)
           {
            VolSet(0);
           }
         }

           }

  }
  
void VolSet(uint Vol1)

{

uchar i;
//   Dat=Vol1;
EA=0;
   /************************************************/
for (i=2;i>0;i--)        //发送2位数据..声道控制
  {
    M62429_DAT=mod&0x01;
   _nop_();_nop_();_nop_();_nop_();         
   M62429_CLK=1;   
   _nop_();_nop_();_nop_();_nop_();
   M62429_DAT=0;
   _nop_(); _nop_();_nop_();_nop_();
   M62429_CLK=0;     
   Dat>>=1;      
  }
  /************************************************/
for (i=5;i>0;i--)        //发送5位数据..主音量参数
  {
   M62429_DAT=Dat&0x01;
   _nop_();_nop_();_nop_();_nop_();         
   M62429_CLK=1;   
   _nop_();_nop_();_nop_();_nop_();
   M62429_DAT=0;
   _nop_(); _nop_();_nop_();_nop_();
   M62429_CLK=0;     
   Dat>>=1;      
  }
  /************************************************/
for (i=2;i>0;i--)        //发送2位数据..副音量参数
  {
    M62429_DAT=Dat2&0x01;
   _nop_();_nop_();_nop_();_nop_();         
   M62429_CLK=1;   
   _nop_();_nop_();_nop_();_nop_();
   M62429_DAT=0;
   _nop_(); _nop_();_nop_();_nop_();
   M62429_CLK=0;     
   Dat>>=1;      
  }  
/************************************************/ //最后2位数据。   
M62429_DAT=1;
_nop_();_nop_();_nop_();_nop_();
M62429_CLK=1;
_nop_();_nop_();_nop_();_nop_();
M62429_DAT=0;
   _nop_(); _nop_();_nop_();_nop_();  
M62429_CLK=0;  

   
M62429_DAT=1;
_nop_();_nop_();_nop_();_nop_();
M62429_CLK=1;
_nop_();_nop_();_nop_();_nop_();
M62429_DAT=0;
   _nop_(); _nop_();_nop_();_nop_();  
M62429_CLK=0;  
EA=1;
}

0

主题

0

好友

380

积分

业余侠客 当前离线

Rank: 4

UID
166025
帖子
586
精华
0
经验
380 点
金钱
370 ¥
注册时间
2010-1-19
发表于 2011-6-6 10:49 | 显示全部楼层
进来学习下。

56

主题

12

好友

6087

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7495
精华
0
经验
6087 点
金钱
5744 ¥
注册时间
2008-10-20
发表于 2011-6-6 11:23 | 显示全部楼层
主程序还没写好就加那么多内容谁帮你看啊~~~~~

dat= (((volume<<5)|(volume>>2))<<2)|0x0C01;
for (i=0;i<10;i++)
{
M62429_DAT=dat&1;   
M62429_CLK=0;
M62429_CLK=1;
Dat>>=1;  
  }
M62429_CLK=0;

56

主题

12

好友

6087

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7495
精华
0
经验
6087 点
金钱
5744 ¥
注册时间
2008-10-20
发表于 2011-6-6 11:26 | 显示全部楼层
这片子速度有慢,推荐你用32KHZ的晶体。

3

主题

0

好友

37

积分

注册会员 当前离线

Rank: 2

UID
21868
帖子
48
精华
0
经验
37 点
金钱
25 ¥
注册时间
2007-4-21
 楼主| 发表于 2011-6-6 12:16 | 显示全部楼层
回复 8# 卡西利亚斯

我不会protus看时序,用24C02的时序可否。

2

主题

0

好友

211

积分

业余侠客 当前离线

Rank: 4

UID
191854
帖子
249
精华
0
经验
211 点
金钱
210 ¥
注册时间
2010-4-15
发表于 2011-6-6 14:52 | 显示全部楼层
关注数字控制

5

主题

0

好友

192

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
155029
帖子
291
精华
0
经验
192 点
金钱
185 ¥
注册时间
2009-12-14
发表于 2012-7-31 10:20 | 显示全部楼层
本帖最后由 kcfoo2 于 2012-7-31 10:26 编辑

这延时函数做得......,不知道用指针呀,数据算法有问题,看说明,前5位数据是按4递增的,后2位为补余,既前5位数据+后2位数据的和,如果MCU够大,不妨用查表
uchar unsigned char da=(vol/4)|((vol%4)>>5);

5

主题

0

好友

192

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
155029
帖子
291
精华
0
经验
192 点
金钱
185 ¥
注册时间
2009-12-14
发表于 2012-7-31 10:22 | 显示全部楼层
DA不得大与83

5

主题

0

好友

192

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
155029
帖子
291
精华
0
经验
192 点
金钱
185 ¥
注册时间
2009-12-14
发表于 2012-7-31 10:30 | 显示全部楼层
按你的程序,DAT=V0L1/4; DAT2=VOL1%4;

31

主题

0

好友

235

积分

业余侠客 当前离线

Rank: 4

UID
407094
帖子
399
精华
0
经验
235 点
金钱
219 ¥
注册时间
2011-10-1
发表于 2012-7-31 11:55 | 显示全部楼层
回复  卡西利亚斯

我不会protus看时序,用24C02的时序可否。
TONEE 发表于 2011-6-6 12:16



    下M62429的PDF看看它的时序对不对啊

1

主题

0

好友

87

积分
     

论坛游民 当前离线

Rank: 3Rank: 3

UID
833180
帖子
104
精华
0
经验
87 点
金钱
85 ¥
注册时间
2017-6-1
发表于 2021-7-8 14:12 | 显示全部楼层
我做的是51遥控pga2311的电子音量,lcd显示。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部