久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機AD四路采集串口顯示雙IIC及OLED顯示
[打印本頁]
作者:
KJYOU
時間:
2023-11-6 14:51
標題:
51單片機AD四路采集串口顯示雙IIC及OLED顯示
為了讓后來者少走彎路,分享一個51單片機AD四路采集PCF8591實時采集的例程。雙IIC接口,還附上Proteus防真。
地址:AD四路采集串口顯示雙IIC
單片機源程序如下:
#include "main.h"
// 變量定義
u32 V0=0,V1=0,V2=0,V3=0;
u8 num;
//******************************************************************/
main()
{
OLED_Init();
OLED_ColorTurn(0); //0正常顯示,1 反色顯示
OLED_DisplayTurn(0); //0正常顯示 1 屏幕翻轉顯示
OLED_DrawBMP(0,0,128,64,BMP1);
Uart_Init();
Timer0_Init();
delayms(500);
OLED_Clear();
OLED_ShowChinese(24,1,0,16);//祝
OLED_ShowChinese(40,1,1,16);//你
OLED_ShowChinese(56,1,2,16);//好
OLED_ShowChinese(72,1,3,16);//運
OLED_ShowChinese(88,1,4,16);//!
delayms(500);
OLED_Clear();
OLED_ShowString(0,0,"CHANNEL1:",16);
OLED_ShowString(0,2,"CHANNEL2:",16);
OLED_ShowString(0,4,"CHANNEL3:",16);
OLED_ShowString(0,6,"CHANNEL4:",16);
while(1)
{
if(num==10)
{
V0=ADC(0x40);
delayms(10);
V1=ADC(0x41);
delayms(10);
V2=ADC(0x42);
delayms(10);
V3=ADC(0x43);
delayms(10);
DAC(V1);
delayms(10);
UartPrintASCII(V0);
delayms(2);
UartPrintASCII(V1);
delayms(2);
UartPrintASCII(V2);
delayms(2);
UartPrintASCII(V3);
UartPrintf("OK !");
V0=V0*50000/255;
V1=V1*50000/255;
V2=V2*50000/255;
V3=V3*50000/255;
num=0;
OLED_ShowNum(80,0,V1/10000,1,16);
OLED_ShowString(88,0,".",16);
OLED_ShowNum(96,0,V1%10000,4,16);
OLED_ShowNum(80,2,V2/10000,1,16);
OLED_ShowString(88,2,".",16);
OLED_ShowNum(96,2,V2%10000,4,16);
OLED_ShowNum(80,4,V3/10000,1,16);
OLED_ShowString(88,4,".",16);
OLED_ShowNum(96,4,V3%10000,4,16);
OLED_ShowNum(80,6,V0/10000,1,16);
OLED_ShowString(88,6,".",16);
OLED_ShowNum(96,6,V0%10000,4,16);
}
}
}
//*******************************************************************
void Timer0_Isr() interrupt 1
{
TF0 = 0; /*清除中斷標志*/
TR0 = 0; /*關中斷*/
num++;
TL0 = 0x00; //設置定時初始值
TH0 = 0x4C; //設置定時初始值
TR0 = 1; /*開中斷*/
}
//*******************************************************************
復制代碼
#include "ADC.h"
//*****串口初始化函數***********
//******************************
void Uart_Init(void)
{
REN = 1; //允許串行口接收數據
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位數據,可變波特率
AUXR &= 0xBF; //定時器時鐘12T模式
AUXR &= 0xFE; //串口1選擇定時器1為波特率發生器
TMOD &= 0x0F; //設置定時器模式
TMOD |= 0x20; //設置定時器模式
TL1 = 0xFD; //設置定時初始值
TH1 = 0xFD; //設置定時重載值
EA = 1; //打開全局中斷控制
ES = 0; //打開串行口中斷
ET1 = 0; //禁止定時器中斷
TR1 = 1; //定時器1開始計時
}
void UartPrintASCII(u8 dat) //發送一個字符
{
TI=0;
SBUF=dat;
while(TI==0);
TI=0;
}
void UartPrintf(u8 *p) //發送字符串
{
while(*p)
{
SBUF=*(p++);
while(TI==0)
{
};
TI=0;
}
}
void Timer0_Init(void) //50毫秒@11.0592MHz
{
EA=1;
ET0 = 1; /*允許定時中斷*/
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = 0x00; //設置定時初始值
TH0 = 0x4C; //設置定時初始值
TR0 = 1; /*啟動定時中斷*/
}
/*******************************************************************
起動總線函數
函數原型: void IIcStart();
功能: 啟動I2C總線,即發送I2C起始條件.
********************************************************************/
void IIcStart()
{
SCL=1;
SDA=1; /*發送起始條件的數據信號*/
delay5us();
SDA=0; /*發送起始信號*/
delay5us();
}
/*******************************************************************
結束總線函數
函數原型: void IIcStop();
功能: 結束I2C總線,即發送I2C結束條件.
********************************************************************/
void IIcStop()
{
SCL=1 ;
SDA=0; /*發送結束條件的數據信號*/
delay5us();
SDA=1; /*發送I2C總線結束信號*/
delay5us();
}
/********************************************************************
發送應答
函數原型: IIc_ACK(bit a);
功能: 主控器進行應答信號(注意:0表示發送應答,1表示發送非應答)
********************************************************************/
void IIc_Ack(bit ack)
{
SCL=1;
delay5us();
SDA=ack; /*清時鐘線,鉗住I2C總線以便繼續接收*/
delay5us();
SCL=0;
}
/********************************************************************
等待應答
函數原型: IIc_WaitACK(void);
功能: 主控器進行應答信號(0是就幫答)
********************************************************************/
bit IIc_WaitAck(void)
{
SCL=0;
delay5us();
SCL=1;
delay5us();
if(SDA==1)
{
SCL=0;
return 0;
}
else
{
SCL=0;
return 1;
}
}
/*******************************************************************
字節數據發送函數
函數原型: void SendByte(UCHAR c);
功能: 將數據c發送出去,可以是地址,也可以是數據,發完后等待應答,并對
此狀態位進行操作.(不應答或非應答都使ack=0)
發送數據正常,ack=1; ack=0表示被控器無應答或損壞。
********************************************************************/
void SendByte(unsigned char date)
{
unsigned char temp,i; //用于探測字節內某一位值的掩碼變量
temp=date;
for (i=0; i<8; i++) //從高位到低位依次進行
{
temp=temp<<1;
SCL=0 ;
delay5us();
SDA = CY;
delay5us();
SCL = 1; //拉高SCL
delay5us();
}
SCL = 0;
SDA = 1; //8位數據發送完后,主機釋放SDA,以檢測從機應答
}
/*******************************************************************
字節數據接收函數
函數原型: UCHAR RcvByte();
功能: 用來接收從器件傳來的數據,并判斷總線錯誤(不發應答信號),
發完后請用應答函數應答從機。
********************************************************************/
unsigned char RcvByte(void)
{
unsigned char i,j,k;
SCL=0;
delay5us();
for(i=0;i<8;i++)
{
SCL=1;
delay5us();
j=SDA;
k=(k<<1)|j;
SCL=0;
delay5us();
}
return k;
}
/*******************************************************************
D/A 變換, 轉化函數
*******************************************************************/
void DAC(unsigned char dat)
{
IIcStart(); //啟動總線
SendByte(0x90); //發送器件地址0x90是寫,0x91是讀
IIc_WaitAck();
SendByte(0x41); //發送控制字節//允許DA輸出
IIc_WaitAck();
SendByte(dat); //發送DAC的數值
IIc_WaitAck();
IIcStop(); //結束總線
}
/*******************************************************************
ADC讀字節數據函數
*******************************************************************/
unsigned char ADC(unsigned char addr)
{
unsigned char temp;
IIcStart(); //啟動總線
SendByte(0x90); //發送器件地址0x90是寫,0x91是讀
IIc_WaitAck();
SendByte(addr); //控制字節:選擇光敏電阻(0x41)還是滑動變阻器(0x43
IIc_WaitAck();
IIcStart();
SendByte(0x91);
IIc_WaitAck();
temp=RcvByte();
IIc_Ack(1); //0表示發送應答,1表示發送非應答
IIcStop();
return temp;
}
復制代碼
Proteus8.15版本的仿真:
Proteus8.15版本的仿真.7z
(133.22 KB, 下載次數: 50)
2023-11-6 23:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
IAIAI
時間:
2023-11-8 17:05
你好,請問是采了四路的電壓值嗎
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产91视频播放
|
欧美在线资源
|
日本亚洲一区二区
|
成人av免费网站
|
日日爱夜夜操
|
欧美精品久久久
|
亚洲免费在线视频
|
免费a级毛片在线播放
|
国产日韩精品一区二区
|
久久亚洲国产精品
|
久久亚洲精品国产精品紫薇
|
成人国产网站
|
国产亚洲欧美日韩精品一区二区三区
|
久草新在线
|
在线观看视频h
|
欧美成人精品一区二区三区
|
精品国产99
|
国产美女视频一区
|
亚洲国产精品一区二区第一页
|
中文字幕av中文字幕
|
伊人性伊人情综合网
|
亚洲视频区
|
免费国产一区
|
一区二区国产精品
|
免费污视频
|
美国黄色一级片
|
美女视频黄的免费
|
日韩成人在线播放
|
欧美一区二区三区精品免费
|
欧美成人精品
|
天天躁日日躁狠狠的躁天龙影院
|
亚洲国产第一页
|
在线观看亚洲
|
日日精品
|
国产高清一区二区
|
久久三级影院
|
国产乱码精品一区二区三区忘忧草
|
夜夜爽99久久国产综合精品女不卡
|
二区久久
|
国产精品污www在线观看
|
国产成人精品一区二区三区在线
|