51單片機實現AD電壓轉換到串口輸出的主從機源代碼以及原理圖。
并可以通過LED數碼管顯示
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (18.87 KB, 下載次數: 46)
下載附件
2018-3-25 15:13 上傳
主機單片機源程序如下:
- #include<reg51.h>
- #define PDATA P2
- #define aver 2
- #define uint unsigned int
- #define uchar unsigned char
- sbit Ledlow = P1^3;
- sbit Ledhig = P1^4;
- uchar table2 []={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- uchar table1 []={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
- //短延時函數:ShortDelay()
- void nNop(uchar temp)
- {
- uint i;
- for(i=0 ;i<temp; i++) ;
- }
- //UART初始化:模式1,8位,9600Bds at 11.059MHz
- void InitSerial()
- { // uart in mode 1 (8 bit), REN=1
- TMOD = 0x20 ; // Timer 1 in mode 2
- TH1 = 0xF4; // 9600 Bds at 11.059MHz
- TL1 = 0xF4; // 9600 Bds at 11.059MHz
- TR1 = 1;
- PCON = 0x00; // Timer 1 run
- SCON = 0x50;
- }
- //主機接受信息給從機
- uchar recivefromslave()
- {
- uchar temp;
- while(!RI);
- temp=SBUF;
- RI=0;
- return(temp);
-
- }
- // 顯示
- void leddisp(uint temp )
- {
- uint i;
- uint getdata1 = 0;
- uint getdata2 = 0;
- temp=temp*aver;
- getdata1=temp/100;
- getdata2=temp/10;
- getdata2=getdata2%10;
-
- for(i=0;i<30;i++)
- {
- PDATA=table1[getdata1];
- Ledlow =0;
- Ledhig = 1;
- nNop(1000);
- Ledlow =0;
- Ledhig = 0;
- PDATA=table2[getdata2];
- Ledlow =1;
- Ledhig = 0;
- nNop(1000);
- Ledlow =0;
- Ledhig = 0;
- }
-
- }
- void main()
- {
- uint tab;
- uint tempt;
- Ledlow = 0;
- Ledhig = 0;
- PDATA = 0x00;
- InitSerial();
- while(1)
- {
- tempt = (uint) recivefromslave(); //接收從機采集的信息
- leddisp(tempt); //顯示信息
- if(tempt<0x60) //判斷信息
- {
- tab = 0;
- }
- else if(tempt>0xc0)
- {
- tab = 2;
- }
- else
- {
- tab = 1;
- }
- SBUF = (uchar)tab; //對采集信息進行控制
- while(!TI);
- TI = 0;
- }
- }
復制代碼
叢機單片機源程序如下:
0.png (51.02 KB, 下載次數: 41)
下載附件
2018-3-25 15:13 上傳
所有資料51hei提供下載:
uart.zip
(108.14 KB, 下載次數: 72)
2018-3-25 14:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|