?? wavegen.c
字號:
/***************************PROGRAM FUNCTION*******************************/
// TLV5618產生從0-5V變化的電壓(鋸齒波),DA數據每次變化1位,即電壓增量=1.22mV //
// 數碼管顯示預期電壓值 //
// 預期電壓值和萬用表測得的電壓值有出入 //
// 待改進:小數顯示時的四舍五入問題,嘗試其它小數顯示的算法 //
// 模式設置:R1=1,SPD=1,PWR=0,R0=0--使用OUTPUT A進行輸出 //
#include<reg52.h>
#define uCHAR unsigned char
#define uint unsigned int
sbit DACS1 = P2^5; //5618/5617 CHIP SELECT
sbit DASDA = P1^1;
sbit DASCL = P1^0;
sbit seg_latch=P2^6;
sbit bit_latch=P2^7;
uCHAR code table[]={0x3f,0x03,0x6D,0x67,
0x53,0x76,0x7E,0x23,
0x7F,0x77,0x7B,0x5E,
0x3C,0x4F,0x7C,0x78};//my code
void SendDA(uCHAR data0,uCHAR data1,bit data2); //發送待進行DA轉換的數據
void delay(uint z);
void SendDA(uCHAR data0,uCHAR data1,bit data2) //bit變量只取0或1
{
unsigned char i;
DASDA=1;
DASCL=1;
DACS1 = 0;
if(data2)
{
data0|=0x40; //SPD=1:fast mode
}//data2決定工作模式
else
{
data0|=0xc0; //R1=1,SPD=1
}
//data0中高四位為模式設置位,低四位為數據位
for (i=0;i<8;i++)
{
DASDA=(bit)(data0&0x80);//給一位數據
DASCL=1;
DASCL=0; //給一個脈沖
data0<<=1;//移到下一位
}
//data1為12位數據的低8位
for (i=0;i<8;i++)
{
DASDA=(bit)(data1&0x80);
DASCL=1;
DASCL=0;
data1<<=1;
}
DASDA= 1; //為下次作準備
DACS1= 1; //為下次作準備
}
void DA(uint outputa)
{
SendDA(outputa/256,outputa%256,0);//輸出a
//sendda(outputb/256,outputb%256,1);//輸出b
}
void display(unsigned int num) //顯示程序 1024->1.25V
{
float temp;
uCHAR qianwei,baiwei,shiwei,gewei;
temp=(5.0/4096)*1000;//放大1000倍,基本量1.22mV
temp*=num;
num=(uint)(temp); //強制類型轉換
qianwei=num/1000;
baiwei=num%1000/100;
shiwei=num%100/10;
gewei=num%10;
P0=table[qianwei]|0x80; //添加小數點
seg_latch=1;
seg_latch=0;
P0=0xfe; //led1有效,顯示千位
bit_latch=1;
bit_latch=0;
delay(5);
P0=table[baiwei];
seg_latch=1;
seg_latch=0;
P0=0xfd; //led2有效,顯示百位
bit_latch=1;
bit_latch=0;
delay(5);
P0=table[shiwei];
seg_latch=1;
seg_latch=0;
P0=0xfb; //led3有效,顯示十位
bit_latch=1;
bit_latch=0;
delay(5);
P0=table[gewei];
seg_latch=1;
seg_latch=0;
P0=0xf7; //led4有效,顯示個位
bit_latch=1;
bit_latch=0;
delay(5);
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=113;y>0;y--);
}
void main()
{
while(1)
{
unsigned int i;
uCHAR k;
for(i=0;i<4096;i++)
{
DA(i);//12位的,范圍0-4096
for(k=0;k<20;k++)
{
display(i); //顯示預期電壓值
}
}
//delay(10); //這兒不用延時,不然會造成顯示閃爍
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -