|
TLC549轉(zhuǎn)換器電路Proteus仿真原理圖如下:
51hei.gif (130.33 KB, 下載次數(shù): 29)
下載附件
2023-10-20 14:20 上傳
TLC549.png (12.91 KB, 下載次數(shù): 32)
下載附件
2023-10-20 14:16 上傳
單片機(jī)源程序如下:
- /*
- *軟 件 標(biāo) 題:TLC549 AD采樣子程序
- *軟 件 說 明:從TLC549讀取采樣值
- *_________________________________________
- *
- */
- #include <REGX51.H>//頭文件
- #include "intrins.h"
- #define Wait1us _nop_();
- #define Wait2us {_nop_();_nop_();}
- #define Wait4us {Wait2us;Wait2us;}
- #define Wait8us {Wait4us;Wait4us;}
- #define Wait10us {Wait8us;Wait2us;}
- #define Wait30us {Wait10us;Wait8us;Wait4us;Wait2us;}
- /************定義接口總線**************/
- sbit Clock = P1 ^ 5; //時(shí)鐘口線
- sbit DataOut = P1 ^ 4; //數(shù)據(jù)輸出口線
- sbit ChipSelect = P1 ^ 3; //片選口線
- /************接口總線定義結(jié)束**********/
- /*********函數(shù)名稱:ADCSelChannel********
- *
- *功能:轉(zhuǎn)換指定通道的模擬量為數(shù)字量
- *
- *說明:
- *
- *位置:1
- *
- ****************************************/
- unsigned char ADCSelChannel(void)
- {
- unsigned char ConvertValue = 0;
- unsigned char i;
- ChipSelect = 1; //芯片復(fù)位
- ChipSelect = 0;
- ChipSelect = 1;
- Clock = 0;
- Wait4us;
- ChipSelect = 0; //芯片起始
- Wait4us; //等待延時(shí)
- for (i = 0; i < 8; i ++) //輸入采樣轉(zhuǎn)換時(shí)鐘
- {
- Clock = 1;
- Clock = 0;
- }
- ChipSelect = 1; //開始轉(zhuǎn)換
- Wait10us; //等待轉(zhuǎn)換結(jié)束
- ChipSelect = 0; //讀取轉(zhuǎn)換結(jié)果
- Wait4us;
- for (i = 0; i < 8; i ++) //
- {
- Clock = 1;
- ConvertValue <<= 1;
- if (DataOut)
- {
- ConvertValue = 0x1;
- }
- Clock = 0;
- }
- ChipSelect = 1;
- return (ConvertValue); //返回轉(zhuǎn)換結(jié)果
- }
復(fù)制代碼
- #include <REGX51.H>//頭文件
- #include "intrins.h"//空操作文件
- #include<stdio.h>
- #include<stdlib.h>
- #define uchar unsigned char//宏定義char
- #define uint unsigned int//宏定義int
- void delay(long i){while(i--);}
- uchar code tb[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數(shù)碼管段選
- uchar code seg_bit_scan[]={0xef,0xdf,0xbf,0x7f}; //各個(gè)數(shù)碼管對(duì)應(yīng)的位選數(shù)據(jù)
- sbit data_temp=P1^4;//數(shù)據(jù)線(讀出數(shù)據(jù))
- sbit cs=P1^3;//片選
- sbit sclk=P1^5;//io口時(shí)鐘
- uint j; uchar qian,bai,shi,ge;
- void chuli(uint num) //顯示程序
- {
-
- qian=num/1000%10; //千,百,十,個(gè)處理
- bai=num/100%10;
- shi=num/10%10;
- ge=num%10;
-
- }
- uint ad_549() //TLC549處理
- {
- uchar i;
- uint data_ad=0;
- cs=1;//先拉高電平 //初始化,啟動(dòng)
- sclk=0;//clk拉低電平
- cs=0;//cs拉低電平
- _nop_();//空操作 5微妙
-
- for(i=8;i>0;i--)//循環(huán)讀取8位A/D轉(zhuǎn)換結(jié)果
- {
- data_ad<<=1;
- data_ad=data_temp|data_ad;
- sclk=1;
- _nop_();_nop_();
- sclk=0;
- _nop_();
- }//循環(huán)八次 讀到一個(gè)8個(gè)2進(jìn)制數(shù)
- cs=1;//cs拉高電平
- sclk=0;
- if (data_ad==0xff) data_ad=data_ad+1.953125 ;
- data_ad=data_ad*19.53125;//采集到的0--255,對(duì)應(yīng)0--5V
- return(data_ad);//返回ad的數(shù)據(jù)
- }
- void timer0_isr(void) interrupt 1//定時(shí)器的0中斷服務(wù)函數(shù)
- {
-
- TR0=0;//關(guān)閉定時(shí)器0
- TL0=(65536-10000)%256;//賦初值
- TH0=(65536-10000)/256;//賦初值
- j++;
- if(j>=4) //變量j加一次 //如果j大于4
- j=0;//j等于0
-
- TR0=1;//重新啟動(dòng)定時(shí)器0
- }
- void timer0_init (void)//定時(shí)器0中斷初始化函數(shù)
- {
- EA=0;//關(guān)閉總中斷
- TMOD=0x01;//確定定時(shí)器0的工作方式為1
- TR0=0;//關(guān)閉定時(shí)器0
- TL0=(65536-10000)%256;//賦初值
- TH0=(65536-10000)/256;//賦初值
- PT0=1;//
- ET0=1;//打開定時(shí)器0的中斷開關(guān)
- EA=1;//打開總中斷開關(guān)
- TR0=1;//啟動(dòng)定時(shí)器0
- }
- void main(void)//主程序
- {
-
- uint i;//變量i
- timer0_init ();//初始化定時(shí)器0 啟動(dòng)定時(shí)器0
-
- while(1)//循環(huán)函數(shù)
- {
- P0=0xff;
- i=ad_549();//把a(bǔ)d_549讀到的數(shù)賦給i
- chuli(i);//顯示最終結(jié)果(啟動(dòng)ad_549轉(zhuǎn)換)
-
- switch(j)
- {
- case 0: P0 = tb[ge]; break;
- case 1: P0 = tb[shi]; break;
- case 2: P0 = tb[bai];break;
- case 3: P0 = tb[qian]&0x7f; break;
- default: break;
- }
-
- P2 = seg_bit_scan[j]; //與j對(duì)應(yīng),P2輸出數(shù)碼管的位選信號(hào)
- delay(8);
- }
- }
-
復(fù)制代碼
仿真程序下載:
A_D轉(zhuǎn)換器應(yīng)用-已測(cè)可用.zip
(334.45 KB, 下載次數(shù): 15)
2023-10-20 08:22 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|