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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 883|回復: 9
打印 上一主題 下一主題
收起左側

STC8Hec11單片機控制電子音量M62429基礎版剛調通 KEIL5程序

[復制鏈接]
跳轉到指定樓層
樓主
單片機源程序如下:
#define KEY_COUNT_DESHAKING 15//按鍵消抖時間15MS
#define KEY_COUNT_LONGT 1500//長按按鍵判斷時間1500MS
#define KEY_COUNT_DUAL 180//雙擊按鍵判斷時間180MS
#define KEY_LONG_REPEAT 200//長按按鍵時響應的時間間隔200MS
#define I2C_SCL P3_2
#define I2C_SDA P3_3
#define led P5_4

#include <STC8HX.h>
uint32 sys_clk = 12000000;//設置PWM、定時器、串口、EEPROM頻率參數
#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;                //定時器時鐘12T模式
  TMOD &= 0x0f;                //設置定時器模式
  TL1 = 0x18;                        //設定定時初值
  TH1 = 0xfc;                        //設定定時初值
}

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

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

xdata tongdaoHC HC_A1 = {0,0,0,0,0,0,0};//聲明A1通道全局結構體緩存
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; // 控制定時器中斷
  TR1 = 1;// 定時器1開始計時
  Timer0Init();
  EA = 1; // 控制總中斷
  ET0 = 1; // 控制定時器中斷
  TR0 = 1;// 定時器0開始計時
  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, 下載次數: 0)

評分

參與人數 2黑幣 +20 收起 理由
lisky123 + 10 共享資料的獎勵!
jialishoushi + 10 共享資料的獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:303735 發表于 2026-1-13 11:00 | 只看該作者
開始時序沒弄好一直沒反應,還有數據轉換一直沒辦法,只能寫數組調用,先將就21個檔用吧,如果網友有更好的辦法歡迎指導
回復

使用道具 舉報

板凳
ID:303735 發表于 2026-1-13 11:12 | 只看該作者
現在能控制音量,首次上電音量最小,可以按按鍵P3.4慢慢增加到-0dB音量最大。后續再增加功能。
回復

使用道具 舉報

地板
ID:303735 發表于 2026-1-13 13:49 | 只看該作者
EC11反轉寫的有誤作修改
xdata tongdaoHC HC_A1 = {0,0,0,0,0,0,0};//聲明A1通道全局結構體緩存
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;
    }
}
回復

使用道具 舉報

5#
ID:876947 發表于 2026-1-14 09:14 | 只看該作者
這個有創意非常適用
回復

使用道具 舉報

6#
ID:303735 發表于 2026-1-14 09:23 | 只看該作者
白水大蝦2016 發表于 2026-1-14 09:14
這個有創意非常適用

以前是個老音響DIY發燒友,DIY很多功放包括數字功放,音量電位器一直是個軟肋,一直想搞個數字音量電位器不會寫程序,這兩年學了單片機后才把這個夢想實現了。
回復

使用道具 舉報

7#
ID:876947 發表于 2026-1-15 09:00 | 只看該作者
liqingyong 發表于 2026-1-14 09:23
以前是個老音響DIY發燒友,DIY很多功放包括數字功放,音量電位器一直是個軟肋,一直想搞個數字音量電位器 ...

咱倆同行
回復

使用道具 舉報

8#
ID:303735 發表于 2026-1-15 10:05 | 只看該作者
回復

使用道具 舉報

9#
ID:996773 發表于 2026-2-28 14:03 | 只看該作者




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

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

存儲,防止開機最大音量
回復

使用道具 舉報

10#
ID:996773 發表于 2026-2-28 14:13 | 只看該作者


補上主板圖,這是三年前剛學打板,現在看來已經很土冒了,直角走線是不規范的,當時不懂,

24c02是個擺設不中用,已經使用單片機的eeprom存儲,三菱的M62429
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表