目錄
一、前言
二、芯片介紹
1、ADC0832
2、74HC245
三、硬件連接
四、軟件代碼
五、效果展示
六、代碼鏈接
一、前言
通過ADC0832對電位器進行檢測根據電壓的不同主控芯片計算出不同的數值,將所得數值進行數模轉換顯示在數碼管上。電位器種類有很多,搖桿式電位器在可在遙控小車、遙控飛機等電子制作時進行使用,電位器數值顯示是電位器使用的基礎,后期可進行多電路的添加與應用。
二、芯片介紹
1、ADC0832
引腳功能:
引腳編號 | 引腳功能 | 描述 |
---|---|---|
1 | CS- | 低電平芯片使能端 |
2 | CH0 | 模擬信號輸入通道0 |
3 | CH1 | 模擬信號輸入通道1 |
4 | GND | 低電平(地) |
5 | D1 | 數據信號輸入,選擇通道控制 |
6 | D0 | 數據信號輸入,轉換數據輸出 |
7 | CLK | 時鐘輸入 |
8 | VCC | 高電平 |
2、74HC245
74HC245是方向可控的八路緩沖器,主要用于實現數據總線的雙向異步通信。 74HC245是兼容TTL器件引腳的高速CMOS總線收發器,典型的CMOS型三態緩沖門電路,八路信號收發器,。由于單片機或CPU的數據/地址/控制總線端口都有一定的負載能力,如果負載超過其負載能力,一般應加驅動器。74HC245通常在主控芯片的并行接口與外部受控設備的并行接口間添加。主要應用于大屏顯示,以及其它的消費類電子產品中增加驅動。
引腳功能:
引腳編號 | 引腳編號 | 描述 |
---|---|---|
1 | DIR | 方向控制 |
2 | A0 | 數據輸入/輸出 |
3 | A1 | 數據輸入/輸出 |
4 | A2 | 數據輸入/輸出 |
5 | A3 | 數據輸入/輸出 |
6 | A4 | 數據輸入/輸出 |
7 | A5 | 數據輸入/輸出 |
8 | A6 | 數據輸入/輸出 |
9 | A7 | 數據輸入/輸出 |
10 | GND | 邏輯地 |
11 | B7 | 數據輸入/輸出 |
12 | B6 | 數據輸入/輸出 |
13 | B5 | 數據輸入/輸出 |
14 | B4 | 數據輸入/輸出 |
15 | B3 | 數據輸入/輸出 |
16 | B2 | 數據輸入/輸出 |
17 | B1 | 數據輸入/輸出 |
18 | B0 | 數據輸入/輸出 |
19 | OE- | 輸出使能 |
20 | VCC | 邏輯電源 |
DIR=1,A-B;DIR=0,B-A;
OE=0導通,OE=1關閉;
三、硬件連接
仿真圖
P3口連接共陰極數碼管的段碼位;P20、P21、P22、P23為數碼管的位選;
P10連接CS-;P11連接CLK;P12連接DIDO;
四、軟件代碼
main主函數
進行定時器的初始化,ADC0832的初始化,以及數碼管段顯示的使用。
void main()
{
uchar AD1;
uint vt1;
uint while_times = 0;
delayms(300);
ET0 = 1;
TR0 = 1;
ET1 = 1;
TR1 = 1;
EA = 1; //打開總中斷
CLK = 0; //ADC0832初始化
CS = 1;
while(1)
{
DigDisplay();
AD1 = Get_AD_Result1();
vt1= (500.0/256.0)*AD1;
date[0] =smgduan[vt1/100];//千分位
date[1] =smgduan[vt1/10%10]; //百分位
date[2] =smgduan[vt1%10];//十分位
date[3] =smgduan[vt1];//個分位
}
}
數碼管位選函數。
通過switch語句進行位選,P3口為數碼管段顯示口;數碼管顯示使用的是數碼管動態掃描。
void DigDisplay()
{
int i;
for(i=0;i<8;i++)
{
switch(i) //位選,選擇點亮的數碼管,
{
case(0):
qian=0;bai=1;shi=1; ge=1;break;//顯示第0位
case(1):
qian=1;bai=0;shi=1; ge=1;break;//顯示第1位
case(2):
qian=1;bai=1;shi=0; ge=1;break;//顯示第2位
case(3):
qian=1;bai=1;shi=1; ge=0;break;//顯示第3位
}
P3=date[i];//發送段碼
delayms(1); //間隔一段時間掃描
P3=0x00;//消隱
}
}
ADC0832通道選擇函數。
該芯片在上篇文章中有進行解釋,這里不進行解釋了。
uchar Get_AD_Result1() //包含11個CLK下降沿
{
uchar i, dat;
CS = 1; //ADC0832未工作時,CS端為高電平,此時芯片禁用
CLK =1;
CS = 0;
DIDO = 1; CLK = 0; CLK = 1; //SCLK第一個下降沿來到時,DI = 1啟動ADC0832
DIDO = 1; CLK = 0; CLK = 1; //SCLK第二個下降沿
DIDO = 0; CLK = 0; CLK = 1; //SCLK第三個下降沿,發送1,0選擇通道cho
DIDO = 1; //釋放總線
for(i = 0; i < 8; i++) //第4個下降沿到第11個下降沿
{
CLK = 0; //clk處于下降沿,每一個下降沿DO端輸入下一個
if(DIDO) dat |= 0x01; // dat = dat | 0x01,dat和0x01做“或”的運算,意思是最低位置1,其它位保持不變。
CLK = 1; //clk處于上升沿
dat <<= 1; //數據左移
}
return (dat);
CS = 1; //ADC0832停止工作
}
delay.c
根據需要進行調用。
/*------------------------------------------------
uS延時函數
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時函數
------------------------------------------------*/
void delayms(unsigned char t)
{
while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
五、效果展示
實物展示 https://live.csdn.net/v/217316
六、代碼鏈接
歡迎留言評論分享自己的看法;關注公眾號“小小創客者”回復“數碼管顯示電位器值”獲得代碼,如有錯誤歡迎指正。
審核編輯:湯梓紅
-
單片機
+關注
關注
6032文章
44525瀏覽量
633266 -
電位器
+關注
關注
14文章
1005瀏覽量
66731 -
數值
+關注
關注
0文章
80瀏覽量
14352
發布評論請先 登錄
相關推薦
評論