日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AD转换及单片机通信

發布時間:2023/12/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AD转换及单片机通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要求

用兩片單片機進行通信,其中甲機外接0809芯片進行AD轉換,將AD轉換結果送至P0端口用4位數碼管顯示,并將數據發送至乙機;乙機接收甲機發送的數據,和甲機同步顯示AD轉換結果。

ADC0809芯片

由于芯片介紹篇幅過大這里就,不做詳細描述。詳情請見ADC0809芯片簡介

硬件及連線


甲機(發射機)代碼:

#include <reg52.h> #define uchar unsigned char #define uint unsigned int int display[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int show[4]={0,1,2,3}; sbit OE=P3^4; sbit EOC=P3^5; sbit ST=P3^6; sbit CLK=P3^7;sbit L1=P2^0; sbit L2=P2^1; sbit L3=P2^2; sbit L4=P2^3; uint num;void delay(int x) {int i;while(x--){for(i=0;i<120;i++);} }void xianshi(uint x) //顯示函數 {int i,p_2; x=x*100/51; //AD轉換值換算為相應電壓值show[0]=0;//5V用不到這一位show[1]=x/100; show[2]=x%100/10;show[3]=x%10; p_2=0x01; for(i=0; i<4; i++){P0=0x00; //清屏,避免重影if(i==1)P0=display[show[i]]+0x80; elseP0=display[show[i]]; P2=~p_2; p_2=p_2<<1;delay(3);} }void sending(uint i)//發送 {SBUF=i;//送給緩沖器while(!TI);//發送完畢TI=0;//清零 }void Init() {SCON=0X40;PCON=0x00;TMOD=0x20;TH1=0xFD;TL1=0xFD;ES=1; //打開接收中斷EA=1; //打開總中斷TR1=1; }void main() {Init();while(1){ST=0;OE=0;ST=1;//啟動轉換器, ST=0;//下降沿開始轉換while(!EOC);//EOC轉換完成OE=1;//輸出允許位有效num=P1;xianshi(num);//將P3口狀態顯示OE=0;//輸出關閉sending(num);} }

乙機(接收機)代碼:

#include <reg52.h> #define uchar unsigned char #define uint unsigned int int display[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int show[4]={0}; uint num=0;void delay(int x) {int i;while(x--){for(i=0;i<120;i++);} } void xianshi() //顯示函數 {int i,p_2;num=num*100/51; //AD轉換值換算為相應電壓值show[0]=0;//5V用不到這一位show[1]=num/100; show[2]=num%100/10;show[3]=num%10; p_2=0x01; for(i=0; i<4; i++){P0=0x00; //清屏,避免重影if(i==1)P0=display[show[i]]+0x80; elseP0=display[show[i]]; P2=~p_2; p_2=p_2<<1;delay(10);} }void receive() interrupt 4//接收 {if(RI)//接收完畢{ num=SBUF;//取出數據RI=0;//清零}//xianshi(); } void UART_init() {TMOD=0x20;//T1工作方式2SCON=0x50;//串行口方式1允許接收PCON=0x00;//波特率不加倍TH1=0XFD; //計數器初始值設置,注意波特率是9600的TL1=0XFD;TR1=1;EA=1;ES=1; } void main() {UART_init();while(1){xianshi();//將P3口狀態顯示} }

仿真結果


最大電壓位5V:

總結

以上是生活随笔為你收集整理的AD转换及单片机通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。