找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3722|回复: 1
收起左侧

单片机串口单个数据和多个数据的发送和接受程序及proteus仿真

[复制链接]
ID:137190 发表于 2016-10-10 14:31 | 显示全部楼层 |阅读模式
单片机发送和接受单个数据或者多个数据的源程序及仿真,下面是原理图:
0.png

0.png
仿真工程文件及所有完整程序等资料下载地址(压缩包一共有45个单片机仿真,全部下载后找到这个项目027即可):
http://www.51hei.com/bbs/dpj-56298-1.html


单片机串口多个数据的发送程序:
  1. /********************************************************************
  2.                            天马电子
  3. *********************************************************************/
  4. #include<reg52.h>                 //库文件
  5. #define uchar unsigned char//宏定义无符号字符型
  6. #define uint unsigned int  //宏定义无符号整型
  7. /********************************************************************
  8.                             初始定义
  9. *********************************************************************/
  10. code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
  11. uchar wei[4]={0XEf,0XDf,0XBf,0X7f};  //位的控制端

  12. code uchar dat[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //发送的数据
  13. uchar shu;
  14. /********************************************************************
  15.                             延时函数
  16. *********************************************************************/
  17. void delay(uchar t)
  18. {
  19.   uchar i,j;
  20.    for(i=0;i<t;i++)
  21.    {
  22.             for(j=13;j>0;j--);
  23.          { ;
  24.          }
  25.    }
  26. }


  27. void delayms(uchar n)
  28. {
  29. uchar m,s;
  30. for(m=n;m>0;m--)
  31. for(n=20;n>0;n--)
  32. for(s=248;s>0;s--);
  33. }

  34. /********************************************************************
  35.                             显示函数
  36. *********************************************************************/        
  37. void Led(uchar date) //显示函数
  38. {
  39. /*****************数据转换*****************************/
  40. uint z,x,c,v;
  41.   z=date/1000;                         //求千位
  42.   x=date%1000/100;                 //求百位
  43.   c=date%100/10;                 //求十位
  44.   v=date%10;                         //求个位

  45.       P2=0XFF;
  46.           P0=seg7code[z];
  47.           P2=wei[0];
  48.           delay(80);
  49.           P2=0XFF;  
  50.       P0=seg7code[x];
  51.           P2=wei[1];
  52.           delay(80);
  53.           P2=0XFF;  
  54.              P0=seg7code[c];
  55.           P2=wei[2];
  56.           delay(80);
  57.           P2=0XFF;  
  58.       P0=seg7code[v];
  59.           P2=wei[3];
  60.           delay(80);
  61.           P2=0XFF;
  62. }
  63. /********************************************************************
  64.                 功能:串口初始化,波特率9600,方式1
  65. *********************************************************************/

  66. void Init_Com(void)
  67. {
  68. TMOD = 0x20;
  69. PCON = 0x00;
  70. SCON = 0x50;
  71. TH1 = 0xFd;
  72. TL1 = 0xFd;
  73. TR1 = 1;
  74. }
  75. /********************************************************************
  76.                             主函数
  77. *********************************************************************/
  78. void main()
  79. {
  80. uchar a;
  81. uint b;
  82. Init_Com();
  83. while(1)
  84. {
  85. for(a=0;a<10;a++)
  86. {
  87. delayms(20);
  88. SBUF = dat[a];
  89. shu  = dat[a];
  90. Led(shu); //显示数据
  91. while(TI==0);
  92. TI=0;
  93. }
  94.    

  95. }
  96. }
  97.         
  98. /********************************************************************
  99.                               结束
  100. *********************************************************************/
复制代码

单片机串口多个数据的发送程序:
  1. /********************************************************************
  2. *********************************************************************/
  3. #include<reg52.h>                 //库文件
  4. #define uchar unsigned char//宏定义无符号字符型
  5. #define uint unsigned int  //宏定义无符号整型
  6. /********************************************************************
  7.                             初始定义
  8. *********************************************************************/
  9. code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
  10. uchar wei[4]={0XEf,0XDf,0XBf,0X7f};  //位的控制端
  11. uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
  12. uchar i;
  13. /********************************************************************
  14.                             延时函数
  15. *********************************************************************/
  16. void delay(uchar t)
  17. {
  18.   uchar i,j;
  19.    for(i=0;i<t;i++)
  20.    {
  21.             for(j=13;j>0;j--);
  22.          { ;
  23.          }
  24.    }
  25. }

  26. /********************************************************************
  27.                             显示函数
  28. *********************************************************************/        
  29. void Led(uchar date) //显示函数
  30. {
  31. /*****************数据转换*****************************/
  32. uint z,x,c,v;
  33.   z=date/1000;                         //求千位
  34.   x=date%1000/100;                 //求百位
  35.   c=date%100/10;                 //求十位
  36.   v=date%10;                         //求个位

  37.       P2=0XFF;
  38.           P0=seg7code[z];
  39.           P2=wei[0];
  40.           delay(80);
  41.           P2=0XFF;  
  42.       P0=seg7code[x];
  43.           P2=wei[1];
  44.           delay(80);
  45.           P2=0XFF;  
  46.              P0=seg7code[c];
  47.           P2=wei[2];
  48.           delay(80);
  49.           P2=0XFF;  
  50.       P0=seg7code[v];
  51.           P2=wei[3];
  52.           delay(80);
  53.           P2=0XFF;
  54. }

  55. /********************************************************************
  56.                             键盘取值函数
  57. *********************************************************************/
  58. void Keyin(void)
  59. {
  60. i=8;

  61. switch(dat)
  62.   {
  63.    case 1:i=0;break;
  64.    case 2:i=1;break;
  65.    case 4:i=2;break;
  66.    case 8:i=3;break;
  67.    case 16:i=4;break;
  68.    case 32:i=5;break;
  69.    case 64:i=6;break;
  70.    case 128:i=7;break;
  71.    default:break;
  72.   }
  73. }

  74. /********************************************************************
  75.                 功能:串口初始化,波特率9600,方式1
  76. *********************************************************************/

  77. void Init_Com(void)
  78. {
  79. TMOD = 0x20;
  80. PCON = 0x00;
  81. SCON = 0x50;
  82. TH1 = 0xFd;
  83. TL1 = 0xFd;
  84. TR1 = 1;
  85. }

  86. /********************************************************************
  87.                             主函数
  88. 说明:串口发送十六进制数 01 02 04 08 10 20 40 80         (发送其他数字显示 8)
  89.       对应的数码管显示   0   1  2  3  4  5  6  7

  90. *********************************************************************/
  91. void main()
  92. {
  93. Init_Com();//串口初始化

  94. while(1)
  95. {
  96.                      
  97. if( RI) //扫描判断是否接收到数据,
  98. {
  99. dat = SBUF; //接收数据SBUF赋与dat
  100. RI=0;
  101. Keyin();
  102. SBUF=dat;
  103. }
  104. Led(i); //显示键盘函数所对应的数据
  105. }
  106. }
  107.         
  108. /********************************************************************
  109.                               结束
  110. *********************************************************************/
复制代码

回复

使用道具 举报

ID:240534 发表于 2017-10-18 12:02 | 显示全部楼层
大神能不能发一份给我啊,我的黑币不够下载不了,邮箱是:2859852818@qq.com,万分感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表