0.jpg (89.37 KB, 下載次數: 107)
下載附件
2018-1-23 05:35 上傳
0.png (41.58 KB, 下載次數: 84)
下載附件
2018-1-23 05:36 上傳
單片機源程序如下:
- /******************************************************************
- 功能:采用USART串口通信,波特率為9600,一個單片機發送數字
- 一個單片機接收,并把接收的數字用數碼管顯示。接收!!!
- 作者:cs天涯
- ******************************************************************/
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- bit flag;
- uchar num;
- void display(uchar num);
- void delay(uint z);
- void init();
- uchar code table[]=
- {
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};//編碼0~9AbCdEF
- void main()
- {
- init();
- while(1)
- {
- while(flag)
- {
- display(num);
- delay(5);
- }
- }
- }
- void init()
- {
- PCON &= 0x7F; //波特率不加倍
- TMOD=0x20; //定時器1工作方式2
- TH1=0xfd;
- TL1=0xfd; //給定時器定初值,設置波特率為9600
- TR1=1; //開啟定時器1工作
- SCON=0x50;//0101 0000 允許串行口接收數據,設置串行口工作方式1
- EA=1;
- ES=1; //打開串行口中斷
- ET1=0; //禁止定時器1中斷
- }
- void display(uchar num)
- {
- uchar shi,ge;
- shi=num/10; //取十位
- ge=num%10; //取個位
- P0=table[shi]; //送十位值
- P2=0xbf;//1011 1111 //選擇段選位置
- delay(5);
- P0=0; //數碼管消影
- P2=0xff;
- P0=table[ge]; //送個位值
- P2=0x7f;//0111 1111 //選擇段選位置
- delay(5);
- P0=0; //數碼管消影
- P2=0xff;
- }
- void delay(uint z) //延時函數
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void receive() interrupt 4
- {
- num=SBUF;
- flag = 1; //接受一次后打開顯示
- ES = 0; //關閉串行中斷
- RI = 0; //清除串行接受標志位
- }
- 發送程序:
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar num; //=2939可以不要
- void init();
- void delay(int z);
- void send(uchar num); //聲明子函數的時候要加分號
- void main()
- {
- init(); //調用子函數的時候要加分號
- while(1)
- {
- send(39); //發送函數
- delay(10); //發送后延時一下,保證發送頻率不過快
- }
- }
- void init()
- {
- PCON&=0x7F; // 設置波特率不加倍
- TMOD=0x20; //設置定時器1工作方式 2
- TH1=0xfd;
- TL1=0xfd; //設定定時器1工作方式2的初值 (關計算還沒講) 波特率為9600
- TR1=1; //開定時器1,開啟波特率發生器
- SM0=0;
- SM1=1; //設定串口通信工作方式1
- EA=1; //開總中斷
- }
- void delay(int z) //晶振11.592.延時z毫秒
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void send(uchar num)
- {
- SBUF=num; //把發送的內容寫進sbuf,自動發送 ,發送數據時TI為0,!0為1
- while(!TI); //!邏輯非,發送完數據,發送完數據時TI為1.!1為0,停止發送
- TI=0; //TI需要軟件清零
- }
復制代碼
所有資料51hei提供下載:
單片機串口通信.zip
(37.19 KB, 下載次數: 258)
2018-1-23 00:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|