|
pcf8591是8位的ad轉(zhuǎn)換器芯片,帶da輸出功能
用單片機(jī)定時(shí)器 定時(shí)輸出數(shù)字量 轉(zhuǎn)化成模擬電壓 形成正弦波
運(yùn)行后 在debug里面選擇 digital oscillscope 調(diào)出示波器
通道a 幅值2mv 掃面速度2us
波形如下
單片機(jī)源程序如下:
- #include "reg51.h"
- #include "intrins.h"
- #include<math.h>
- #define time_step 15000 // 定時(shí)器時(shí)常
- unsigned char DSY_BUFF_CODE[16] = {0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e};
- sbit seg1 = P2^4;
- sbit seg2 = P2^5;
- sbit seg3 = P2^6;
- sbit seg4 = P2^7;
- void timer_init();
- void sentad_data(unsigned char);
- double rad;
- void main()
- {
- timer_init();
- // sentad_data(0xff);
- while(1);
- }
- void timer_init()
- {
- TMOD=0x01;
- TH0=(65536-time_step)/256;
- TL0=(65536-time_step)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void timer0_int() interrupt 1
- { static unsigned char wei=0;
- static char d;
- static unsigned int num = 0; //num 代表360個(gè)點(diǎn)中的第幾個(gè)點(diǎn) 每次遞增5個(gè)點(diǎn)
-
- TH0=(65536-time_step)/256;
- TL0=(65536-time_step)%256;
- d =(char)( (sin(0.01744*num))*127); // 3.14115/180 表示每度的弧度值 乘以度數(shù)num
- // 再把度數(shù)的sin值乘以127 輸出成模擬電壓量注意不能乘以255 因?yàn)檫@里是有符號(hào)類型 最高位是符號(hào)為 所以8位的數(shù)值最大位127
-
- if((d&0x80)!=0x80) d = d|0x80; //這里要再把最高位取反 與上0x80不等于0x80說明最高位為0 那么或上0x80將最高位置1
- else d &= 0x7f; // 如果不將最高位取反的話 波形會(huì)有問題 見文件夾中的截圖
-
- sentad_data(d); //將d輸出成模擬電壓
- if(num==360) num =0;
- num = num + 5; //每次遞增5度
- switch(wei) // 將d值送至數(shù)碼管顯示 可以通過調(diào)高time_step 觀察d值 用于調(diào)試
- {
- case 1:
- P2 &= 0x0f;
- P0 = DSY_BUFF_CODE[d/1000];
- seg1 = 1;
- break;
- case 2:
- P2 &= 0x0f;
- P0 = DSY_BUFF_CODE[d%1000/100];
- seg2 = 1;
- break;
- case 3:
- P2 &= 0x0f;
- P0 = DSY_BUFF_CODE[d%100/10];
- seg3 = 1;
- break;
- case 4:
- P2 &= 0x0f;
- P0 = DSY_BUFF_CODE[d%10];
- seg4 = 1;
- break;
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
1.zip
(227.92 KB, 下載次數(shù): 100)
2018-4-29 12:41 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|