一、設計目的
1、學習并掌握IIC總線的工作原理
2、學習并掌握AD轉換器工作原理;
3、學習并掌握AD轉換程序設計方法;
4、學習并掌握串行通信程序設計;
二、實驗設備
1、計算機;
2、單片機開發板;
3、Keil C51編程軟件;
4、Proteus仿真軟件;
三、設計內容
1、功能
(1)檢測通道0電位器的模擬電壓并顯示(X.XX伏),
(2)將電壓值通過串口發送到上位機串口調試助手顯示,
(3)上位機串口調試助手顯示(文本形式顯示):“V:X.XX”回車(X.XX是電壓值,逐行顯示)
(4)上位機可以通過發送不同命令控制采集并顯示哪個通道:通道0、通道1、通道2的模擬電壓;
2、硬件電路原理圖
3、設計程序(5號、宋體、單倍行距、分兩欄,要求程序設計規范化,添加必要的說明和注釋)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (54.24 KB, 下載次數: 44)
下載附件
2020-8-2 16:59 上傳
單片機源程序如下:
main.c中
/***************************************************************
* 實 驗 名 :PCF8591AD轉換串口實驗
* 實驗說明 :采用AD轉換器采集模擬電壓、轉換為數字量、顯示數字量。
* 連接方式 :
(1)P0口連接數碼管的段控制:
CN3接CN16,A接P00,B接P01,C接P02,D接P03,E接P04,F接P05,G接P06,DP接P07
(2)P2.4-P2.7連接數碼管的位控制:
CN1接CN17,PUT1接P24,PUT2接P25,PUT3接P26,PUT4接P27
(3)P1口連接矩陣按鍵:
CN16接CN14,KEY1到KEY8分別對應P10到P17
(3)PCF8591的SDA、SCL連接P2.1、P2.0:
PCF8591的IIC數據腳SDA連接P2.1;
PCF8591的IIC時鐘腳SCL連接P2.0;
PCF8591的VCC連接開發板VCC;
PCF8591的GND連接開發板GND。
****************************************************************/
//包含文件
#include <reg51.h>
#include <intrins.h>
#include <IIC.h>
//宏定義
#define BAUD 9600 //波特率設置,bps
#define FOSC 11059200L //晶振設置,默認使用11.0592M Hz
//#define FOSC 12000000L //晶振設置,使用12M Hz
//#define FOSC 24000000L //晶振設置,使用24M Hz
#define AddWr 0x90 //寫數據地址
#define AddRd 0x91 //讀數據地址
//IO接口定義
#define KEY_PORT P1
#define LED_PORT P0
sbit wela_1 = P2^4;
sbit wela_2 = P2^5;
sbit wela_3 = P2^6;
sbit wela_4 = P2^7;
//全局變量定義
extern bit ack; //應答標志位
unsigned char key_value;
unsigned char qian,bai,shi,ge;
unsigned char CHX; //作為通道選擇
unsigned long readadc; //AD轉換結果
unsigned char state;
//LED顯示字模 0-F 共陽模式
unsigned code table[]={0Xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
/*******************************************************************************
* 函 數 名 :Delayms
* 函數功能 :實現 ms級的延時
* 輸 入 :ms
* 輸 出 :無
*******************************************************************************/
void Delayms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
#if FOSC == 11059200L
for(j=0;j<114;j++);
#elif FOSC == 12000000L
for(j=0;j<123;j++);
#elif FOSC == 24000000L
for(j=0;j<249;j++);
#else
for(j=0;j<114;j++);
#endif
}
/*******************************************************************************
* 函 數 名 :delay
* 函數功能 :延時子函數,短暫延時
* 輸 入 :timer
* 輸 出 :無
*******************************************************************************/
void delay(unsigned int timer)
{
while(timer--);
}
/*******************************************************************************
* 函 數 名 :ReadADC
* 函數功能 :讀AD轉值程序 輸入參數 Chl 表示需要轉換的通道,范圍從0-3 返回值范圍0-255
* 輸 入 :Chl
* 輸 出 :Val
*******************************************************************************/
unsigned char ReadADC(unsigned char Chl)
{
unsignedchar Val;
IIC_start(); //啟動總線
IIC_write(AddWr); //發送器件地址,準備寫
if(ack==0) return(0);
IIC_write(0x40|Chl); //發送器件子地址,Chl表示需要轉換的通道
if(ack==0) return(0);
IIC_start();
IIC_write(AddRd); //發送器件地址,準備讀
if(ack==0) return(0);
Val=IIC_read(); //讀取AD轉換結果
IIC_ACK(1); //發送非應答位
IIC_stop(); //結束總線
return(Val); //返回AD轉換結果
}
/*******************************************************************************
* 函 數 名 :WriteDAC
* 函數功能 :往DAC通道寫數據,進行DA轉換
* 輸 入 :dat
* 輸 出 :
*******************************************************************************/
bit WriteDAC(unsigned char dat)
{
IIC_start(); //啟動總線
IIC_write(AddWr); //發送器件地址,準備寫
if(ack==0)
return(0);
IIC_write(0x40); //發送器件子地址
if(ack==0)
return(0);
IIC_write(dat); //發送數據,進行DA轉換
if(ack==0)
return(0);
IIC_stop();
}
/*******************************************************************************
* 函 數 名 :LEDdisplay
* 函數功能 :循環顯示各個位上的數據
* 輸 入 :num要顯示的數據
* 輸 出 :無
*******************************************************************************/
void LEDdisplay()
{
wela_1 = 1; //關閉所有數碼管
wela_2 = 1;
wela_3 = 1;
wela_4 = 1;
wela_4=0; //顯示千位
LED_PORT=table[qian];
Delayms(1);
LED_PORT = 0xff;
wela_4=1;
wela_3=0; //顯示百位
LED_PORT=table[bai] & 0x7f;
Delayms(1);
LED_PORT = 0xff;
wela_3=1;
wela_2=0; //顯示十位
LED_PORT=table[shi];
Delayms(1);
LED_PORT = 0xff;
wela_2=1;
wela_1=0; //顯示個位
LED_PORT=table[ge];
Delayms(1);
LED_PORT = 0xff;
}
/*******************************************************************************
* 函 數 名 :KeyScan
* 函數功能 :4*4鍵盤掃描
* 輸 入 :無
* 輸 出 :num 獲取的鍵值,若沒有鍵值則返回0xff
*******************************************************************************/
unsigned char KeyScan()
{
unsigned char temp,num;
num = 0xff;
KEY_PORT=0xfe;
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
KEY_PORT=0xfd;
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
KEY_PORT=0xfb;
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
KEY_PORT=0xf7;
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
return num;
}
/*******************************************************************************
* 函 數 名 :UsartConfiguration
* 函數功能 :串口設置
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
void UsartConfiguration()
{
SCON = 0X50; //設置為工作方式1:10位異步收發器
TMOD |= 0x20; //設置計數器工作方式2:8位自動重裝計數器
PCON = 0X80; //波特率加倍:SMOD =1
TH1 = 256-(FOSC/12/32/(BAUD/2)); //計算定時器1初值
TL1 = 256-(FOSC/12/32/(BAUD/2));
TR1 = 1;//啟動定時器T1
ES=1; //開串口中斷
EA = 1; //開總中斷
}
/*******************************************************************************
* 函 數 名 :UsartSend
* 函數功能 :串口發送電壓
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
void UsartSend()
{
//發送 V
TI = 0; //清除發送中斷標志位TI
SBUF='V'; //收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
//發送 :
TI = 0; //清除發送中斷標志位TI
SBUF=':'; //收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
//發送電壓整數
TI = 0; //清除發送中斷標志位TI
SBUF=readadc%1000/100+'0';//收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
//發送小數點
TI = 0; //清除發送中斷標志位TI
SBUF='.';//收到的數據放入到發送SBUF,啟動串口發送
while(!TI);
//發送電壓十分位
TI = 0; //清除發送中斷標志位TI
SBUF=readadc%100/10+'0';//收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
//等待發送數據完成
//發送電壓百分位
TI = 0; //清除發送中斷標志位TI
SBUF=readadc%10+'0';//收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
//發送換行符
TI = 0; //清除發送中斷標志位TI
SBUF='\n'; //收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
TI=0;
}
/*******************************************************************************
* 函 數 名 :main
* 函數功能 :主函數
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
void main()
{
int count = 0;
state =1;
UsartConfiguration();
while(1)
{
key_value=KeyScan();
if(key_value!=0xff)
state=key_value;
if(state==1) //按鍵1按下,選擇通道0,即電位器調節實驗
CHX=0;
else if(state==2) //按鍵2按下,選擇通道1,即光敏電阻實驗
CHX=1;
else if(state==3) //按鍵3按下,選擇通道2,即熱敏電阻實驗
CHX=2;
else if(state==4) //按鍵4按下,選擇通道3,接地
CHX=3;
if(count >= 200) //采樣周期1s
{
//readadc=ReadADC(CHX)/256*5*100;
readadc=ReadADC(CHX)*5.0*100/255; //調用ReadADC函數讀取AD轉換結果
UsartSend();//發送電壓到串口
count = 0;
}
qian=readadc/1000; //顯示AD轉換結果
bai=readadc%1000/100;
shi=readadc%100/10;
ge=readadc%10;
LEDdisplay();
count++;
}
}
/*******************************************************************************
* 函 數 名 :UsartInt
* 函數功能 :串口中斷服務函數
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
void UsartInt() interrupt 4
{
char receiveData; //存放接收的函數
if(RI == 1) //RI=1說明是接收到數據產生的中斷
{
receiveData=SBUF; //從接收SBUF中取得接收到的數據
//判斷接受值,改變讀取通道
switch (receiveData)
{
case '0' :state = 1;break;
case '1' :state = 2;break;
case '2' :state = 3;break;
default :break;
}
RI = 0; //清除接收中斷標志位RI
}
}/***************************************************************
* 實 驗 名 :PCF8591AD轉換串口實驗
* 實驗說明 :采用AD轉換器采集模擬電壓、轉換為數字量、顯示數字量。
* 連接方式 :
(1)P0口連接數碼管的段控制:
CN3接CN16,A接P00,B接P01,C接P02,D接P03,E接P04,F接P05,G接P06,DP接P07
(2)P2.4-P2.7連接數碼管的位控制:
CN1接CN17,PUT1接P24,PUT2接P25,PUT3接P26,PUT4接P27
(3)P1口連接矩陣按鍵:
CN16接CN14,KEY1到KEY8分別對應P10到P17
(3)PCF8591的SDA、SCL連接P2.1、P2.0:
PCF8591的IIC數據腳SDA連接P2.1;
PCF8591的IIC時鐘腳SCL連接P2.0;
PCF8591的VCC連接開發板VCC;
PCF8591的GND連接開發板GND。
****************************************************************/
//包含文件
#include <reg51.h>
#include <intrins.h>
#include <IIC.h>
//宏定義
#define BAUD 9600 //波特率設置,bps
#define FOSC 11059200L //晶振設置,默認使用11.0592M Hz
//#define FOSC 12000000L //晶振設置,使用12M Hz
//#define FOSC 24000000L //晶振設置,使用24M Hz
#define AddWr 0x90 //寫數據地址
#define AddRd 0x91 //讀數據地址
//IO接口定義
#define KEY_PORT P1
#define LED_PORT P0
sbit wela_1 = P2^4;
sbit wela_2 = P2^5;
sbit wela_3 = P2^6;
sbit wela_4 = P2^7;
//全局變量定義
extern bit ack; //應答標志位
unsigned char key_value;
unsigned char qian,bai,shi,ge;
unsigned char CHX; //作為通道選擇
unsigned long readadc; //AD轉換結果
unsigned char state;
//LED顯示字模 0-F 共陽模式
unsigned code table[]={0Xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
/*******************************************************************************
* 函 數 名 :Delayms
* 函數功能 :實現 ms級的延時
* 輸 入 :ms
* 輸 出 :無
*******************************************************************************/
void Delayms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
#if FOSC == 11059200L
for(j=0;j<114;j++);
#elif FOSC == 12000000L
for(j=0;j<123;j++);
#elif FOSC == 24000000L
for(j=0;j<249;j++);
#else
for(j=0;j<114;j++);
#endif
}
/*******************************************************************************
* 函 數 名 :delay
* 函數功能 :延時子函數,短暫延時
* 輸 入 :timer
* 輸 出 :無
*******************************************************************************/
void delay(unsigned int timer)
{
while(timer--);
}
/*******************************************************************************
* 函 數 名 :ReadADC
* 函數功能 :讀AD轉值程序 輸入參數 Chl 表示需要轉換的通道,范圍從0-3 返回值范圍0-255
* 輸 入 :Chl
* 輸 出 :Val
*******************************************************************************/
unsigned char ReadADC(unsigned char Chl)
{
unsignedchar Val;
IIC_start(); //啟動總線
IIC_write(AddWr); //發送器件地址,準備寫
if(ack==0) return(0);
IIC_write(0x40|Chl); //發送器件子地址,Chl表示需要轉換的通道
if(ack==0) return(0);
IIC_start();
IIC_write(AddRd); //發送器件地址,準備讀
if(ack==0) return(0);
Val=IIC_read(); //讀取AD轉換結果
IIC_ACK(1); //發送非應答位
IIC_stop(); //結束總線
return(Val); //返回AD轉換結果
}
/*******************************************************************************
* 函 數 名 :WriteDAC
* 函數功能 :往DAC通道寫數據,進行DA轉換
* 輸 入 :dat
* 輸 出 :
*******************************************************************************/
bit WriteDAC(unsigned char dat)
{
IIC_start(); //啟動總線
IIC_write(AddWr); //發送器件地址,準備寫
if(ack==0)
return(0);
IIC_write(0x40); //發送器件子地址
if(ack==0)
return(0);
IIC_write(dat); //發送數據,進行DA轉換
if(ack==0)
return(0);
IIC_stop();
}
/*************************************
* 函 數 名 :LEDdisplay
* 函數功能 :循環顯示各個位上的數據
* 輸 入 :num要顯示的數據
* 輸 出 :無
*************************************/
void LEDdisplay()
{
wela_1 = 1; //關閉所有數碼管
wela_2 = 1;
wela_3 = 1;
wela_4 = 1;
wela_4=0; //顯示千位
LED_PORT=table[qian];
Delayms(1);
LED_PORT = 0xff;
wela_4=1;
wela_3=0; //顯示百位
LED_PORT=table[bai] & 0x7f;
Delayms(1);
LED_PORT = 0xff;
wela_3=1;
wela_2=0; //顯示十位
LED_PORT=table[shi];
Delayms(1);
LED_PORT = 0xff;
wela_2=1;
wela_1=0; //顯示個位
LED_PORT=table[ge];
Delayms(1);
LED_PORT = 0xff;
}
/*************************************
* 函 數 名 :KeyScan
* 函數功能 :4*4鍵盤掃描
* 輸 入 :無
* 輸 出 :num 獲取的鍵值,若沒有鍵值則返回0xff
*************************************/
unsigned char KeyScan()
{
unsigned char temp,num;
num = 0xff;
KEY_PORT=0xfe;
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
KEY_PORT=0xfd;
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
KEY_PORT=0xfb;
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
KEY_PORT=0xf7;
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
Delayms(5); //延時消抖
temp=KEY_PORT;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY_PORT;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=KEY_PORT;
temp=temp&0xf0;
}
}
}
return num;
}
/*************************************
* 函 數 名 :UsartConfiguration
* 函數功能 :串口設置
* 輸 入 :無
* 輸 出 :無
*************************************/
void UsartConfiguration()
{
SCON = 0X50; //設置為工作方式1:10位異步收發器
TMOD |= 0x20; //設置計數器工作方式2:8位自動重裝計數器
PCON = 0X80; //波特率加倍:SMOD =1
TH1 = 256-(FOSC/12/32/(BAUD/2)); //計算定時器1初值
TL1 = 256-(FOSC/12/32/(BAUD/2));
TR1 = 1;//啟動定時器T1
ES=1; //開串口中斷
EA = 1; //開總中斷
}
/*************************************
* 函 數 名 :UsartSend
* 函數功能 :串口發送電壓
* 輸 入 :無
* 輸 出 :無
*************************************/
void UsartSend()
{
//發送 V
TI = 0; //清除發送中斷標志位TI
SBUF='V'; //收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
//發送 :
TI = 0; //清除發送中斷標志位TI
SBUF=':'; //收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
//發送電壓整數
TI = 0; //清除發送中斷標志位TI
SBUF=readadc%1000/100+'0';//收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
//發送小數點
TI = 0; //清除發送中斷標志位TI
SBUF='.';//收到的數據放入到發送SBUF,啟動串口發送
while(!TI);
//發送電壓十分位
TI = 0; //清除發送中斷標志位TI
SBUF=readadc%100/10+'0';//收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
//等待發送數據完成
//發送電壓百分位
TI = 0; //清除發送中斷標志位TI
SBUF=readadc%10+'0';//收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
//發送換行符
TI = 0; //清除發送中斷標志位TI
SBUF='\n'; //收到的數據放入到發送SBUF,啟動串口發送
while(!TI); //等待發送數據完成
TI=0;
}
/*************************************
* 函 數 名 :main
* 函數功能 :主函數
* 輸 入 :無
* 輸 出 :無
*************************************/
void main()
{
int count = 0;
state =1;
UsartConfiguration();
while(1)
{
key_value=KeyScan();
if(key_value!=0xff)
state=key_value;
if(state==1) //按鍵1按下,選擇通道0,即電位器調節實驗
CHX=0;
else if(state==2) //按鍵2按下,選擇通道1,即光敏電阻實驗
CHX=1;
else if(state==3) //按鍵3按下,選擇通道2,即熱敏電阻實驗
CHX=2;
else if(state==4) //按鍵4按下,選擇通道3,接地
CHX=3;
if(count >= 200) //采樣周期1s
{
//readadc=ReadADC(CHX)/256*5*100;
readadc=ReadADC(CHX)*5.0*100/255; //調用ReadADC函數讀取AD轉換結果
UsartSend();//發送電壓到串口
count = 0;
}
qian=readadc/1000; //顯示AD轉換結果
bai=readadc%1000/100;
shi=readadc%100/10;
ge=readadc%10;
LEDdisplay();
count++;
}
}
/*************************************
* 函 數 名 :UsartInt
* 函數功能 :串口中斷服務函數
* 輸 入 :無
* 輸 出 :無
*************************************/
void UsartInt() interrupt 4
{
char receiveData; //存放接收的函數
if(RI == 1) //RI=1說明是接收到數據產生的中斷
{
receiveData=SBUF; //從接收SBUF中取得接收到的數據
//判斷接受值,改變讀取通道
switch (receiveData)
{
case '0' :state = 1;break;
case '1' :state = 2;break;
case '2' :state = 3;break;
default :break;
}
RI = 0; //清除接收中斷標志位RI
}
}
四、本任務中的幾個功能如何實現?(說明設計思路)
設計思路:
1. 首先借助例程,實驗采集電壓,但例程所給為八個二進制位,不代表電壓值,需要經過公式轉化,小數位的顯示,可以采用電壓值擴大100倍,給第二位數碼管后加小數點,實現了顯示2個電壓。
2. 串口發送電壓值,移植上次課例程,實現相應ASCII的轉化。
3. 用上位機發送數據來實現控制檢測通道,采用中斷法接受串口數據,用switch來判斷接收值,并改變state狀態,實現通道的切換。
51hei.png (16.34 KB, 下載次數: 49)
下載附件
2020-8-2 17:00 上傳
全部資料51hei下載地址:
PCF8591AD轉換應用設計.rar
(10.27 MB, 下載次數: 27)
2020-6-23 16:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|