|
单片机发送和接受单个数据或者多个数据的源程序及仿真,下面是原理图:
仿真工程文件及所有完整程序等资料下载地址(压缩包一共有45个单片机仿真,全部下载后找到这个项目027即可):
http://www.51hei.com/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); //显示键盘函数所对应的数据
- }
- }
-
- /********************************************************************
- 结束
- *********************************************************************/
复制代码
|
|