1 A/D與D/A
將模擬量轉換為數字量稱為模數轉換(A/D轉換),模擬量是連續的,比如電壓、電流等,可以連續變化的量;數字量是離散的,對應于計算機中的位,每一個位只能是0或1,是不存在中間狀態的。通過模數轉換原件將模擬量轉化為數字量輸入計算機,以便計算機進行計算、存儲等(這里說的計算機指具有cpu芯片的計算系統)。
模數轉換中運用到了微分思想。如下圖所示:
將連續的信號轉換成一系列接近的離散的值,分割的越窄,就能表現得越精確。
數模轉換(D/A轉換)與模數轉換的效果相反,是輸入控制的數字量,經過D/A轉換器輸出模擬量。
2 電路與元器件
80C51芯片是intel公司開發的MCS-51系列單片機中的經典的一種。
DAC0832是D/A轉換芯片,是專門用于數模轉換的的芯片。
電路圖如圖:
3 源代碼
3.1 程序開始
org 0000h
jmp Start
;====================================================================
; CODE SEGMENT
;====================================================================
org 0100h
3.2 監視按鈕操作
watchKey:;//監控按鈕的操作
jnb p1.0,squareWave;//p1.0口,方波
jnb p1.1,sawtoothWave;//p1.1口,鋸齒波
jnb p1.2,triangleWave;//p1.2口,三角波
ret
根據電路圖,三個按鈕接地,即按鈕按下會產生低電平,所以檢測三個口接受到的信號,出現低電平時跳轉到波形的發生函數部分。
3.3 按鈕控制顯示波形
Start:
mov A,#0FFh
mov p1,A;//給p1口送高電平,按鍵按下為低電平
call watchKey
jmp start;
先給p1端口送高電平,然后調用按鈕監控函數,沒有鍵按下則一直在Start部分循環。
3.4 方波產生的方法
方波信號是有一段時間輸出穩定的高電平,一段時間輸出穩定的低電平。要實現這個功能,需要保持端口的輸出值穩定,并啟用延時或循環。
squareWave:
mov R0,#0FFh;//存電位初值
mov R1,#0F0h;//存高電平循環次數
mov R2,#40h;//存低電平循環次數。調整R1和R2可以調整占空比
positive:
mov A,R0;//取電位值
mov p3,A;//輸出數據電位,DA輸出模擬電位
call watchKey;//監控按鈕的動作(可以用開中斷代替),下同
djnz R1,positive;//剩余的循環次數不為零,繼續輸出高電平,剩余循環次數為零則進入低電平
mov R0,#00h;//存低電平
negative:
mov A,R0;
mov p3,A;
call watchKey;
djnz R2,negative;//循判斷循環結束,往下執行。
jmp squareWave;//進行下一周期
這里沒有用延時,而是用循環代替,二者的區別在于延時中不會監控按鈕動作,循環時每一次循環都會監控按鈕。當延時短時二者效果沒有太大區別,所以這里用那種都可以。
3.5 鋸齒波產生的方法
鋸齒波是在一個周期內逐漸增大,在下一周期開始時又會跳回零點。代碼實現如下:
sawtoothWave:
mov R0,#00h;//初值
mov R1,#80h;//上升沿循環次數
sawup:
mov A,R0;
mov p3,A;
inc A;//每次增加1,在下一次循環輸出,出現逐漸增大的效果。
mov R0,A;
call watchKey;
cjne R0,#0FFh,sawup;//循環未結束則繼續增加,結束則跳回低電平
jmp sawtoothWave;//下一周期
3.6 三角波產生的方法
三角波的一個周期分為上升沿和下降沿,都是線性變化的,可以利用鋸齒波的方法做一個上升沿和一個下降沿。
triangleWave:
mov R0,#00h;//初值
mov R1,#80h;//上升沿循環次數,反映為上升沿寬度
mov R2,#80h;//下降沿循環次數,反映為下降沿寬度
up:;//上升沿
mov A,R0;
mov p3,A;
inc A;
mov R0,A;
call watchKey;
cjne R0,#80h,up;
down:;//下降沿
mov A,R0;
mov p3,A;
dec A;
mov R0,A;
call watchKey;
cjne R0,#00h,down;
jmp triangleWave;
3.7 程序結束
Loop:
jmp Loop
;====================================================================
END
4 效果
4.1 方波
4.2 鋸齒波
4.3 三角波
5 參考資料
[1] 80c51_百度百科 (baidu.com)
[2] DAC0832_百度百科 (baidu.com)
[3] 51單片機匯編指令集_宇宙379的博客-CSDN博客_51單片機指令集
[4] 【51單片機】矩陣鍵盤逐行掃描法仿真實驗+超詳細Proteus仿真和Keil操作步驟_cumt等等的博客-CSDN博客_矩陣鍵盤鍵碼掃描程序設計實驗
上一篇:【51單片機】點陣LED的顯示實驗
下一篇:【51單片機】七段數碼管和矩陣鍵盤的綜合實驗——計算器
推薦閱讀最新更新時間:2025-06-07 23:30



