欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: STC8Hec11單片機(jī)控制電子音量M62429基礎(chǔ)版剛調(diào)通 KEIL5程序 [打印本頁]

作者: liqingyong    時(shí)間: 2026-1-13 10:56
標(biāo)題: STC8Hec11單片機(jī)控制電子音量M62429基礎(chǔ)版剛調(diào)通 KEIL5程序
單片機(jī)源程序如下:
#define KEY_COUNT_DESHAKING 15//按鍵消抖時(shí)間15MS
#define KEY_COUNT_LONGT 1500//長按按鍵判斷時(shí)間1500MS
#define KEY_COUNT_DUAL 180//雙擊按鍵判斷時(shí)間180MS
#define KEY_LONG_REPEAT 200//長按按鍵時(shí)響應(yīng)的時(shí)間間隔200MS
#define I2C_SCL P3_2
#define I2C_SDA P3_3
#define led P5_4

#include <STC8HX.h>
uint32 sys_clk = 12000000;//設(shè)置PWM、定時(shí)器、串口、EEPROM頻率參數(shù)
#include "Lib/EC11_51.h"//聲明庫頭文件
#include "delay.h"

uint8 i = 0;
uint8 j = 0;
uint8 k = 20;
uint16 vol = 0;
uint8 flag = 0;
uint8 cnt = 0;
uint16 mylist[21]={0x88aa,0x8aa,0xa0aa,0x20aa,0x80aa,0xaa,0xaa2a,0x2a2a,0x8a2a,0xa2a,0xa22a, 0x222a,0x822a,0x22a,0xa82a,0xa282a,0x882a,0x82a,0xa02a,0x202a,0x802a};
uint8 dat = 0x2f;
uint16 scl_dat = 0xaa;
uint8 scl_dat2 = 0x01;
uint8 LR = 0x02;
uint8 jianhc_A1;
void sendbyte_LR();
void sendbyte_dat();
void sendbyte_3();

void Timer1Init(void)        //1000微秒@12.000MHz
{
  AUXR &= 0xbf;                //定時(shí)器時(shí)鐘12T模式
  TMOD &= 0x0f;                //設(shè)置定時(shí)器模式
  TL1 = 0x18;                        //設(shè)定定時(shí)初值
  TH1 = 0xfc;                        //設(shè)定定時(shí)初值
}

void Timer0Init(void)        //1000微秒@12.000MHz
{
  AUXR &= 0x7f;                //定時(shí)器時(shí)鐘12T模式
  TMOD &= 0xf0;                //設(shè)置定時(shí)器模式
  TL0 = 0x18;                        //設(shè)定定時(shí)初值
  TH0 = 0xfc;                        //設(shè)定定時(shí)初值
}

void T_IRQ0(void) interrupt 1 using 1{
  cnt = cnt + 1;
}

xdata tongdaoHC HC_A1 = {0,0,0,0,0,0,0};//聲明A1通道全局結(jié)構(gòu)體緩存
void T_IRQ1(void) interrupt 3 using 2{
   HC_A1.EC11_A_dq = P3_5;
   HC_A1.EC11_B_dq = P3_6;
   HC_A1.EC11_D_dq = P3_4;
   jianhc_A1 = Encoder_EC11_Scan(&HC_A1);
   switch ( jianhc_A1)
    {
      case 1:
         if(k >= 1){
      k = k - 1;
    }
    else{
      k = k - 0;
    }
       break;
      case 2:
         if(k >= 1){
      k = k - 1;
    }
    else{
      k = k - 0;
    }
       break;
      case 3:
         if(k <= 20){
      k = k + 1;
    }
    else{
      k = k + 0;
    }
       break;
      case 4:
         if(k <= 20){
      k = k + 1;
    }
    else{
      k = k + 0;
    }
       break;
      case 5:
         led = !led;
    if(k >= 1){
      k = k - 1;
    }
    else{
      k = k - 0;
    }
       break;
      case 6:
            break;
      case 7:
            break;
      case 8:
            break;
    }
}

/*描述該功能...
*/
void sendbyte_LR(){
  for (i = 0; i < 1; i = i + 1) {
    I2C_SDA = 1;
    delay5us();
    I2C_SCL = 1;
    delay5us();
    I2C_SDA = 0;
    delay5us();
    I2C_SCL = 0;
    delay5us();
    delay5us();
    I2C_SCL = 1;
    delay5us();
    delay5us();
    I2C_SCL = 0;
    delay5us();
  }
}

/*描述該功能...
*/
void sendbyte_dat(){
  EA = 0;
  sendbyte_LR();
  for (j = 0; j < 16; j = j + 1) {
    if((vol&0x8000) != 0){
      P3_3 = 1;
    }
    else{
      P3_3 = 0;
    }
    vol = (vol<<1);
    delay1us();
    delay1us();
    if((scl_dat&0x8000) != 0){
      P3_2 = 1;
    }
    else{
      P3_2 = 0;
    }
    scl_dat = (scl_dat<<1);
    delay5us();
  }
  sendbyte_3();
  EA = 1;
}

/*描述該功能...
*/
void sendbyte_3(){
  I2C_SCL = 0;
  delay1us();
  delay1us();
  I2C_SDA = 1;
  delay1us();
  delay1us();
  I2C_SCL = 1;
  delay5us();
  I2C_SDA = 1;
  delay5us();
  I2C_SCL = 0;
  delay1us();
  delay1us();
  I2C_SDA = 0;
  delay5us();
}

void setup()
{
  P3M1&=~0x04;P3M0|=0x04;//推挽輸出
  P3M1&=~0x08;P3M0|=0x08;//推挽輸出
  P3M1&=~0x10;P3M0&=~0x10;//雙向IO口
  P5M1&=~0x10;P5M0|=0x10;//推挽輸出
  P3_3 = 0;
  P5_4 = 1;
  Timer1Init();
  EA = 1; // 控制總中斷
  ET1 = 1; // 控制定時(shí)器中斷
  TR1 = 1;// 定時(shí)器1開始計(jì)時(shí)
  Timer0Init();
  EA = 1; // 控制總中斷
  ET0 = 1; // 控制定時(shí)器中斷
  TR0 = 1;// 定時(shí)器0開始計(jì)時(shí)
  P3M1|=0x10;P3M0&=~0x10;//P3_4高阻輸入
  P3M1|=0x40;P3M0&=~0x40;//P3_6高阻輸入
  P3M1|=0x20;P3M0&=~0x20;//P3_5高阻輸入
}

void loop()
{
  if(cnt >= 200){
    cnt = 0;
    vol = mylist[(int)(k)];
    scl_dat = 0xaaaa;
    sendbyte_dat();
  }
}

void main(void)
{
  setup();
  while(1){
    loop();
  }
}

以上代碼下載: M62429.zip (143.64 KB, 下載次數(shù): 0)

作者: liqingyong    時(shí)間: 2026-1-13 11:00
開始時(shí)序沒弄好一直沒反應(yīng),還有數(shù)據(jù)轉(zhuǎn)換一直沒辦法,只能寫數(shù)組調(diào)用,先將就21個(gè)檔用吧,如果網(wǎng)友有更好的辦法歡迎指導(dǎo)
作者: liqingyong    時(shí)間: 2026-1-13 11:12
現(xiàn)在能控制音量,首次上電音量最小,可以按按鍵P3.4慢慢增加到-0dB音量最大。后續(xù)再增加功能。
作者: liqingyong    時(shí)間: 2026-1-13 13:49
EC11反轉(zhuǎn)寫的有誤作修改
xdata tongdaoHC HC_A1 = {0,0,0,0,0,0,0};//聲明A1通道全局結(jié)構(gòu)體緩存
void T_IRQ1(void) interrupt 3 using 2{
   HC_A1.EC11_A_dq = P3_5;
   HC_A1.EC11_B_dq = P3_6;
   HC_A1.EC11_D_dq = P3_4;
   jianhc_A1 = Encoder_EC11_Scan(&HC_A1);
   switch ( jianhc_A1)
    {
      case 1:
         if(k >= 1){
      k = k - 1;
    }
    else{
      k = k - 0;
    }
       break;
      case 2:
         if(k <= 20){
      k = k + 1;
    }
    else{
      k = k + 0;
    }
       break;
      case 3:
         if(k >= 1){
      k = k - 1;
    }
    else{
      k = k - 0;
    }
       break;
      case 4:
         if(k <= 20){
      k = k + 1;
    }
    else{
      k = k + 0;
    }
       break;
      case 5:
         led = !led;
    if(k >= 1){
      k = k - 1;
    }
    else{
      k = k - 0;
    }
       break;
      case 6:
            break;
      case 7:
            break;
      case 8:
            break;
    }
}
作者: 白水大蝦2016    時(shí)間: 2026-1-14 09:14
這個(gè)有創(chuàng)意非常適用
作者: liqingyong    時(shí)間: 2026-1-14 09:23
白水大蝦2016 發(fā)表于 2026-1-14 09:14
這個(gè)有創(chuàng)意非常適用

以前是個(gè)老音響DIY發(fā)燒友,DIY很多功放包括數(shù)字功放,音量電位器一直是個(gè)軟肋,一直想搞個(gè)數(shù)字音量電位器不會(huì)寫程序,這兩年學(xué)了單片機(jī)后才把這個(gè)夢想實(shí)現(xiàn)了。
作者: 白水大蝦2016    時(shí)間: 2026-1-15 09:00
liqingyong 發(fā)表于 2026-1-14 09:23
以前是個(gè)老音響DIY發(fā)燒友,DIY很多功放包括數(shù)字功放,音量電位器一直是個(gè)軟肋,一直想搞個(gè)數(shù)字音量電位器 ...

咱倆同行
作者: liqingyong    時(shí)間: 2026-1-15 10:05
白水大蝦2016 發(fā)表于 2026-1-15 09:00
咱倆同行

緣分
作者: hi等你    時(shí)間: 2026-2-28 14:03




編程天才路過,我目前為止只學(xué)了四五年,這是兩年前完工的,也是m62429,共80級(jí)數(shù)控,樓主在程序上可以

做個(gè)定時(shí)五分鐘將音量數(shù)值寫入掉電存儲(chǔ)的eeprom,這樣下回通電就是常用音量值,最人性化還可以限制在50級(jí)以下

存儲(chǔ),防止開機(jī)最大音量

作者: hi等你    時(shí)間: 2026-2-28 14:13


補(bǔ)上主板圖,這是三年前剛學(xué)打板,現(xiàn)在看來已經(jīng)很土冒了,直角走線是不規(guī)范的,當(dāng)時(shí)不懂,

24c02是個(gè)擺設(shè)不中用,已經(jīng)使用單片機(jī)的eeprom存儲(chǔ),三菱的M62429





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1