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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 33165|回復(fù): 30
收起左側(cè)

數(shù)字電位器X9C103 100級(jí)調(diào)節(jié)電路和單片機(jī)源程序

  [復(fù)制鏈接]
ID:249545 發(fā)表于 2017-12-17 10:56 | 顯示全部樓層 |閱讀模式
        數(shù)字電位器在90年代就有了,當(dāng)時(shí)大學(xué)DIY HI-END頂級(jí)音響流行想用它來(lái)做音量電位器,但是價(jià)格非常昂貴.現(xiàn)已出來(lái)很多年價(jià)格尚可接受,但也和STM32差不多價(jià)!它在某些場(chǎng)合可以高可靠性地代替普通模擬電位器,如美國(guó)美信公司生產(chǎn)的10K歐姆的X9C103,它有100級(jí)調(diào)節(jié),每檔100歐姆.可做為音量調(diào)節(jié)電路,儀器模擬量調(diào)節(jié)及數(shù)控電源DIY什么的,其實(shí)前不久我買(mǎi)幾塊回來(lái)就是想DIY數(shù)控電源(在大蝦眼中就是"假數(shù)控吧"),下面貢獻(xiàn)買(mǎi)來(lái)的所有資料和原程序.       由于水平有限,專業(yè)軟件的我不懂,我也沒(méi)有時(shí)間測(cè)試X9C103行不行,我現(xiàn)在就是善良地為老師大神大蝦們無(wú)條件地分享資料(美信公司20年前的東西,應(yīng)該沒(méi)有版權(quán)問(wèn)題)謝謝!

原理圖:
0.jpg

使用說(shuō)明
一、基礎(chǔ)部分
數(shù)字電位器 X9c103 模塊是一款寬電壓(3V-5V)供電,10K滿量程電位器。
電位器中間抽頭在 0-10k 間滑動(dòng)共 100 級(jí)(電位器滑動(dòng)端典型阻抗 40 歐) 數(shù)字電位器 VL 和 VH 端口分別對(duì)應(yīng)滑動(dòng)變阻器的低端和高端,允許輸入電壓范圍-5V 到+5V。 數(shù)字電位器模塊附帶測(cè)試程序,程序代碼為 C 語(yǔ)言代碼,分模塊編寫(xiě)。代碼包括:主函數(shù)、顯示子函數(shù)、按鍵子函數(shù)以及各模塊的頭文件,可以采用 KEIL4 打開(kāi)源代碼經(jīng)行測(cè)試和學(xué)習(xí)。

二、測(cè)試部分
如只需測(cè)試模塊使用可不研究源代碼,將測(cè)試程序中.HEX 文件下載到目標(biāo)板。
1、按鍵子函數(shù)共涉及兩個(gè)按鍵檢測(cè)和控制,分別對(duì)應(yīng) P3^2 和P3^3.兩個(gè)按鍵每次按下分別實(shí)現(xiàn) 10K 數(shù)字電位器中間滑動(dòng)端往上端和往下端滑動(dòng)1k數(shù)值。數(shù)字電位器接口說(shuō)明:INC 接 P2^0,U_D 接P2^1,CS 接P2^2。
2、顯示器接口:電源端口 VCC(2 腳)  GND(1 腳)接 5V 電源。數(shù)據(jù)端口 D0-D7(7 腳到14 腳)接P0 口(P0^0  -  P0^7)。對(duì)比度調(diào)節(jié)端口 VL(3 腳)為液晶顯示器對(duì)比度調(diào)整端用電位器分壓得到 0V-5V 中間某一電壓使液晶清晰顯示?刂贫丝 RS(4 腳)為寄存器選擇,高電平1 時(shí)選擇數(shù)據(jù)寄存器、低電平0 時(shí)選擇指令寄存器。控制端口 RW(5 腳)為讀寫(xiě)信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作控制端口 EN(6 腳)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。

單片機(jī)源程序如下(key部分):
  1. /*
  2. * 按鍵子函數(shù)子函數(shù)
  3. * 按鍵子函數(shù)共涉及兩個(gè)按鍵檢測(cè)和控制,分別對(duì)應(yīng)P3^2和P3^3.兩個(gè)按鍵每次按下分別實(shí)現(xiàn)10K數(shù)字
  4. * 電位器中間滑動(dòng)端往上端和往下端滑動(dòng)1k數(shù)值。

  5. * 數(shù)字電位器接口說(shuō)明:INC接P2^0,U_D接P2^1,CS接P2^2。
  6. */

  7. #include"HEADER.h"
  8. #include"LCD1602.h"
  9. #include"BUTTON.h"

  10. volatile unsigned char FLAG_BUTTON = 0;//按鍵檢測(cè)標(biāo)志位
  11. volatile unsigned char BUTTON_DAT = 0;//按鍵鍵值變量
  12. volatile unsigned int TIME_10MS = 0;//時(shí)間變量
  13. volatile unsigned char VOLUME = 0;//電位器值
  14. void T0_Timer() interrupt 1//定時(shí)器0中斷服務(wù)程序
  15. {
  16.         

  17.         TR0 = 0;
  18. //        WDT_CONTR = 0X31;                  //喂狗
  19.         TH0 =55536/256;                          //重裝初值
  20.         TL0 =55536%256;                      //重裝初值
  21.         TR0 = 1;                        

  22.         TIME_10MS ++;                                  //time_10ms變量累加
  23.         if(TIME_10MS == 1000)TIME_10MS = 0;//time_10ms變量清零

  24.         ButtonTest();//按鍵檢測(cè);
  25. }
  26. void ButtonTest(void)
  27. {
  28.         static uchar Count_ButtonDown;//靜態(tài)按鍵按下計(jì)數(shù)
  29.         static uchar Count_ButtonUp;//靜態(tài)按鍵松開(kāi)計(jì)數(shù)
  30.         if((SW_1 == 0)||(SW_2 == 0))
  31.         {
  32.                 Count_ButtonDown++;
  33.                 Count_ButtonUp = 0;
  34.                         if(Count_ButtonDown==2)
  35.                         {
  36.                                 if(SW_1 == 0)BUTTON_DAT = 1;
  37.                                 else if(SW_2 == 0)BUTTON_DAT = 2;
  38.                                 if(BUTTON_DAT != 0)FLAG_BUTTON = 1;
  39.                         }
  40.                         if(Count_ButtonDown>=50)
  41.                         {
  42.                                 Count_ButtonDown = 0;
  43.                                 if(SW_1 == 0)BUTTON_DAT = 1;
  44.                                 else if(SW_2 == 0)BUTTON_DAT = 2;
  45.                                 if(BUTTON_DAT != 0)FLAG_BUTTON = 1;
  46.                         }
  47.         }
  48.         else
  49.         {
  50.                 if(Count_ButtonDown>2) //如果按鍵已經(jīng)確認(rèn)按下,則開(kāi)始判斷松開(kāi)
  51.                 {
  52.                         Count_ButtonUp++;      
  53.                         if(Count_ButtonUp>=2)     
  54.                         {        
  55.                                 Count_ButtonUp = 0;
  56.                                 Count_ButtonDown = 0;        
  57.                         }
  58.                 }
  59.         }
  60. }
  61. void ButtonService(unsigned char dat)
  62. {
  63.         switch(dat)
  64.         {
  65.                 case 1:        //電位器值增加
  66.                 {
  67.                                 unsigned char n = 0;
  68.                                 CS = 0;
  69.                                 U_D = 1;
  70.                                 _nop_();
  71.                                 for(n=10;n>0;n--)
  72.                                 {
  73.                                         INC = 0;
  74.                                         _nop_();
  75.                                         _nop_();
  76.                                         INC = 1;
  77.                                 }
  78.                                 CS = 1;
  79.                                 
  80.                                 VOLUME++;
  81.                                 if(VOLUME > 10)VOLUME = 10;
  82.                                 DISPLAY[0] = VOLUME%100/10+0x30;
  83.                                 DISPLAY[1] = VOLUME%10+0x30;
  84.                                 Lcd_Set_xy(2,7);
  85.                                 Lcd_Wdat(DISPLAY[0]);
  86.                                 Lcd_Wdat(DISPLAY[1]);
  87.                 }
  88.                 break;
  89.                 case 2:        //電位器值減小
  90.                 {

  91.                                 unsigned char n = 0;
  92.                                 CS = 0;
  93.                                 U_D = 0;
  94.                                 _nop_();
  95.                                 for(n=10;n>0;n--)
  96.                                 {
  97.                                         INC = 0;
  98.                                         _nop_();
  99.                                         _nop_();
  100.                                         INC = 1;
  101.                                 }
  102.                                 CS = 1;
  103.                                 if(VOLUME == 0)VOLUME = 1;
  104.                                 VOLUME--;
  105.                                 DISPLAY[0] = VOLUME%100/10+0x30;
  106.                                 DISPLAY[1] = VOLUME%10+0x30;
  107.                                 Lcd_Set_xy(2,7);
  108.                                 Lcd_Wdat(DISPLAY[0]);
  109.                                 Lcd_Wdat(DISPLAY[1]);
  110. ……………………

  111. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

/*
* LCD1602顯示器并行驅(qū)動(dòng)子函數(shù)
* 顯示器接口:電源端口VCC(2腳) GND(1腳)接5V電源。
               數(shù)據(jù)端口D0-D7(7腳到14腳)接P0口(P0^0 - P0^7)。
               對(duì)比度調(diào)節(jié)端口VL(3腳)為液晶顯示器對(duì)比度調(diào)整端用電位器分壓得到0V-5V中間某一電壓使液晶清晰顯示。
               控制端口RS(4腳)為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。
               控制端口RW(5腳)為讀寫(xiě)信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作
               控制端口EN(6腳)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。
*/


單片機(jī)源程序如下(主程序):
  1. #include"HEADER.h"
  2. #include"LCD1602.h"
  3. #include"BUTTON.h"

  4. volatile unsigned char DISPLAY[4];//全局顯示數(shù)組
  5. /*****************************初始化函數(shù)*****************************/
  6. void Init()//初始化函數(shù)
  7. {
  8.         TMOD = 0X01;//定時(shí)器0設(shè)置工作方式1
  9.         TH0 =55536/256;//定時(shí)器初值
  10.         TL0 =55536%256;//定時(shí)器初值
  11.         
  12.         EA = 1;//打開(kāi)總中斷
  13.         ET0 = 1;//定時(shí)器0打開(kāi)
  14.         TR0 = 1;//定時(shí)器0運(yùn)行
  15. //        WDT_CONTR = 0X31;//看門(mén)狗定時(shí)器在12M晶振時(shí)131ms復(fù)位        
  16. }
  17. /****************************主函數(shù)******************************/
  18. void main(void)
  19. {        
  20.         unsigned char m = 0;
  21.         Init();
  22.         Lcd_Init ();
  23.         Lcd_Clear();
  24.         
  25.         Delayms(20);
  26.         Lcd_Set_xy(1,3);
  27.         Lcd_String("Aether  Test");
  28.         Lcd_Set_xy(2,1);
  29.         Lcd_String("Value:00 K");
  30.         
  31.         //數(shù)字電位器初始化
  32.         INC = 1;
  33.         CS = 0;
  34.         U_D = 0;
  35.         _nop_();
  36.         for(m=100;m>0;m--)//電位器強(qiáng)制向下滑動(dòng)100級(jí)到最底端
  37.         {
  38.                 INC = 0;
  39.                 _nop_();
  40.                 _nop_();
  41.                 INC = 1;
  42.         }
  43.         CS = 1;

  44.         while(1)
  45.         {        
  46.                 if(FLAG_BUTTON == 1)//按鍵檢測(cè)
  47.                 {
  48.                         FLAG_BUTTON = 0;
  49. ……………………

  50. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
數(shù)字電位器測(cè)試程序.rar (41.8 KB, 下載次數(shù): 521)
高精度的數(shù)字電位器X9C103.pdf (176.6 KB, 下載次數(shù): 260)
數(shù)字電位器使用說(shuō)明.pdf (52.92 KB, 下載次數(shù): 279)
數(shù)字電位器原理圖.pdf (100.01 KB, 下載次數(shù): 309)

評(píng)分

參與人數(shù) 2黑幣 +110 收起 理由
zkele + 10 很給力!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:266765 發(fā)表于 2017-12-25 21:04 | 顯示全部樓層
學(xué)習(xí)一下……。
回復(fù)

使用道具 舉報(bào)

ID:284674 發(fā)表于 2018-2-21 22:14 | 顯示全部樓層
很喜歡這個(gè),但是又不太懂單片機(jī)!
回復(fù)

使用道具 舉報(bào)

ID:284674 發(fā)表于 2018-2-21 22:17 | 顯示全部樓層
89C52可以控制6個(gè)數(shù)字電位器嗎?程序又要怎么改呢

回復(fù)

使用道具 舉報(bào)

5#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:234782 發(fā)表于 2018-3-24 11:25 | 顯示全部樓層
樓主大才
回復(fù)

使用道具 舉報(bào)

ID:312448 發(fā)表于 2018-4-20 16:43 | 顯示全部樓層
很好用
回復(fù)

使用道具 舉報(bào)

ID:307393 發(fā)表于 2018-4-21 16:39 | 顯示全部樓層
學(xué)習(xí)了!謝謝樓主
回復(fù)

使用道具 舉報(bào)

ID:307393 發(fā)表于 2018-4-21 16:40 | 顯示全部樓層
學(xué)習(xí)了!謝謝樓主
回復(fù)

使用道具 舉報(bào)

ID:309564 發(fā)表于 2018-4-23 10:16 | 顯示全部樓層
天才樓主
回復(fù)

使用道具 舉報(bào)

ID:314892 發(fā)表于 2018-4-23 21:55 | 顯示全部樓層
學(xué)習(xí)一下!
回復(fù)

使用道具 舉報(bào)

ID:366650 發(fā)表于 2018-7-7 09:45 | 顯示全部樓層
lz辛苦!
回復(fù)

使用道具 舉報(bào)

ID:369597 發(fā)表于 2018-7-11 16:48 | 顯示全部樓層

學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:379259 發(fā)表于 2018-7-26 09:27 | 顯示全部樓層
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:32650 發(fā)表于 2018-9-27 14:52 | 顯示全部樓層
很好!
回復(fù)

使用道具 舉報(bào)

ID:496376 發(fā)表于 2019-3-29 11:45 | 顯示全部樓層
好東西。。。!
回復(fù)

使用道具 舉報(bào)

ID:332684 發(fā)表于 2019-4-11 16:40 | 顯示全部樓層
很厲害
回復(fù)

使用道具 舉報(bào)

ID:493535 發(fā)表于 2019-7-17 09:24 | 顯示全部樓層
VH和VL用接嗎
回復(fù)

使用道具 舉報(bào)

ID:72951 發(fā)表于 2019-9-12 13:49 | 顯示全部樓層
好的,謝謝。
回復(fù)

使用道具 舉報(bào)

ID:64765 發(fā)表于 2019-11-1 15:26 | 顯示全部樓層
好資料,學(xué)習(xí)了,謝謝分享。
回復(fù)

使用道具 舉報(bào)

ID:594334 發(fā)表于 2019-11-14 16:34 | 顯示全部樓層
好資料,學(xué)習(xí)一下,感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:71549 發(fā)表于 2019-12-16 12:49 | 顯示全部樓層
學(xué)習(xí)一下。
回復(fù)

使用道具 舉報(bào)

ID:610541 發(fā)表于 2020-4-8 14:23 | 顯示全部樓層

好資料,學(xué)習(xí)一下,感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:680779 發(fā)表于 2020-5-14 16:51 | 顯示全部樓層
分享的資料很有用!
回復(fù)

使用道具 舉報(bào)

ID:704585 發(fā)表于 2020-5-27 14:35 | 顯示全部樓層
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:473918 發(fā)表于 2020-6-23 09:27 | 顯示全部樓層
很好的學(xué)習(xí)資料,謝謝分享。。
回復(fù)

使用道具 舉報(bào)

27#
無(wú)效樓層,該帖已經(jīng)被刪除
28#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:815563 發(fā)表于 2021-2-8 11:42 | 顯示全部樓層
挺實(shí)用的數(shù)字電位器資料
回復(fù)

使用道具 舉報(bào)

ID:128334 發(fā)表于 2021-2-9 20:46 | 顯示全部樓層
這個(gè)芯片不貴 我在身高體檢機(jī)語(yǔ)音播報(bào)部分用過(guò)
回復(fù)

使用道具 舉報(bào)

31#
無(wú)效樓層,該帖已經(jīng)被刪除
32#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:384552 發(fā)表于 2021-3-29 11:41 | 顯示全部樓層
有個(gè)問(wèn)題,程序和電路圖不相符
回復(fù)

使用道具 舉報(bào)

34#
無(wú)效樓層,該帖已經(jīng)被刪除
35#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:74784 發(fā)表于 2021-7-8 14:35 | 顯示全部樓層
我做的是51遙控pga2311的電子音量,lcd顯示。
回復(fù)

使用道具 舉報(bào)

37#
無(wú)效樓層,該帖已經(jīng)被刪除
38#
無(wú)效樓層,該帖已經(jīng)被刪除
39#
無(wú)效樓層,該帖已經(jīng)被刪除
40#
無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表