|
單片機發送和接受單個數據或者多個數據的源程序及仿真,下面是原理圖:
0.png (32.04 KB, 下載次數: 65)
下載附件
2016-10-10 14:29 上傳
0.png (58.51 KB, 下載次數: 51)
下載附件
2016-10-10 14:28 上傳
仿真工程文件及所有完整程序等資料下載地址(壓縮包一共有45個單片機仿真,全部下載后找到這個項目027即可):
http://www.zg4o1577.cn/bbs/dpj-56298-1.html
單片機串口多個數據的發送程序:
- /********************************************************************
- 天馬電子
- *********************************************************************/
- #include<reg52.h> //庫文件
- #define uchar unsigned char//宏定義無符號字符型
- #define uint unsigned int //宏定義無符號整型
- /********************************************************************
- 初始定義
- *********************************************************************/
- code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //顯示段碼 數碼管字跟
- uchar wei[4]={0XEf,0XDf,0XBf,0X7f}; //位的控制端
- code uchar dat[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //發送的數據
- uchar shu;
- /********************************************************************
- 延時函數
- *********************************************************************/
- void delay(uchar t)
- {
- uchar i,j;
- for(i=0;i<t;i++)
- {
- for(j=13;j>0;j--);
- { ;
- }
- }
- }
- void delayms(uchar n)
- {
- uchar m,s;
- for(m=n;m>0;m--)
- for(n=20;n>0;n--)
- for(s=248;s>0;s--);
- }
- /********************************************************************
- 顯示函數
- *********************************************************************/
- void Led(uchar date) //顯示函數
- {
- /*****************數據轉換*****************************/
- uint z,x,c,v;
- z=date/1000; //求千位
- x=date%1000/100; //求百位
- c=date%100/10; //求十位
- v=date%10; //求個位
- P2=0XFF;
- P0=seg7code[z];
- P2=wei[0];
- delay(80);
- P2=0XFF;
- P0=seg7code[x];
- P2=wei[1];
- delay(80);
- P2=0XFF;
- P0=seg7code[c];
- P2=wei[2];
- delay(80);
- P2=0XFF;
- P0=seg7code[v];
- P2=wei[3];
- delay(80);
- P2=0XFF;
- }
- /********************************************************************
- 功能:串口初始化,波特率9600,方式1
- *********************************************************************/
- void Init_Com(void)
- {
- TMOD = 0x20;
- PCON = 0x00;
- SCON = 0x50;
- TH1 = 0xFd;
- TL1 = 0xFd;
- TR1 = 1;
- }
- /********************************************************************
- 主函數
- *********************************************************************/
- void main()
- {
- uchar a;
- uint b;
- Init_Com();
- while(1)
- {
- for(a=0;a<10;a++)
- {
- delayms(20);
- SBUF = dat[a];
- shu = dat[a];
- Led(shu); //顯示數據
- while(TI==0);
- TI=0;
- }
-
- }
- }
-
- /********************************************************************
- 結束
- *********************************************************************/
復制代碼
單片機串口多個數據的發送程序:
- /********************************************************************
- *********************************************************************/
- #include<reg52.h> //庫文件
- #define uchar unsigned char//宏定義無符號字符型
- #define uint unsigned int //宏定義無符號整型
- /********************************************************************
- 初始定義
- *********************************************************************/
- code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //顯示段碼 數碼管字跟
- uchar wei[4]={0XEf,0XDf,0XBf,0X7f}; //位的控制端
- uchar dat; //用于存儲單片機接收發送緩沖寄存器SBUF里面的內容
- uchar i;
- /********************************************************************
- 延時函數
- *********************************************************************/
- void delay(uchar t)
- {
- uchar i,j;
- for(i=0;i<t;i++)
- {
- for(j=13;j>0;j--);
- { ;
- }
- }
- }
- /********************************************************************
- 顯示函數
- *********************************************************************/
- void Led(uchar date) //顯示函數
- {
- /*****************數據轉換*****************************/
- uint z,x,c,v;
- z=date/1000; //求千位
- x=date%1000/100; //求百位
- c=date%100/10; //求十位
- v=date%10; //求個位
- P2=0XFF;
- P0=seg7code[z];
- P2=wei[0];
- delay(80);
- P2=0XFF;
- P0=seg7code[x];
- P2=wei[1];
- delay(80);
- P2=0XFF;
- P0=seg7code[c];
- P2=wei[2];
- delay(80);
- P2=0XFF;
- P0=seg7code[v];
- P2=wei[3];
- delay(80);
- P2=0XFF;
- }
- /********************************************************************
- 鍵盤取值函數
- *********************************************************************/
- void Keyin(void)
- {
- i=8;
- switch(dat)
- {
- case 1:i=0;break;
- case 2:i=1;break;
- case 4:i=2;break;
- case 8:i=3;break;
- case 16:i=4;break;
- case 32:i=5;break;
- case 64:i=6;break;
- case 128:i=7;break;
- default:break;
- }
- }
- /********************************************************************
- 功能:串口初始化,波特率9600,方式1
- *********************************************************************/
- void Init_Com(void)
- {
- TMOD = 0x20;
- PCON = 0x00;
- SCON = 0x50;
- TH1 = 0xFd;
- TL1 = 0xFd;
- TR1 = 1;
- }
- /********************************************************************
- 主函數
- 說明:串口發送十六進制數 01 02 04 08 10 20 40 80 (發送其他數字顯示 8)
- 對應的數碼管顯示 0 1 2 3 4 5 6 7
- *********************************************************************/
- void main()
- {
- Init_Com();//串口初始化
- while(1)
- {
-
- if( RI) //掃描判斷是否接收到數據,
- {
- dat = SBUF; //接收數據SBUF賦與dat
- RI=0;
- Keyin();
- SBUF=dat;
- }
- Led(i); //顯示鍵盤函數所對應的數據
- }
- }
-
- /********************************************************************
- 結束
- *********************************************************************/
復制代碼
|
|