找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2139|回复: 0
打印 上一主题 下一主题
收起左侧

RS232单片机串口实验

[复制链接]
跳转到指定楼层
#
RS232串口实验,在附件里,一共有4个程序 分别实现4个不同的功能。

LCD1602显示接收到HEX数据
数码管显示接收到的HEX数据
返回接收到的数据
发送数据



下面是数码管的那个源码:
  1. /*******************************************************************************
  2. *                 
  3. *                                        普中科技
  4. --------------------------------------------------------------------------------
  5. * 实 验 名                 : RS232串口试验
  6. * 实验说明       : 单片机将串口接收到的数据以10进制显示在数码管上。
  7. * 连接方式       : 见连接图
  8. * 注    意                 :
  9. *******************************************************************************/

  10. #include<reg51.h>

  11. //--定义使用的IO--//
  12. #define GPIO_DIG P0

  13. sbit LSA=P2^2;
  14. sbit LSB=P2^3;
  15. sbit LSC=P2^4;

  16. //--定义全局变量--//
  17. unsigned char code DIG_CODE[17]={
  18. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  19. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  20. //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
  21. unsigned char DisplayData[8];
  22. //用来存放要显示的8位数的值

  23. //--声明全局函数--//
  24. void DigDisplay();         //动态显示函数          
  25. void UsartConfiguration();
  26. /*******************************************************************************
  27. * 函 数 名         : main
  28. * 函数功能                   : 主函数
  29. * 输    入         : 无
  30. * 输    出         : 无
  31. *******************************************************************************/

  32. void main()
  33. {
  34.         unsigned char receiveData;

  35.         UsartConfiguration();
  36.         while(1)
  37.         {
  38.                 if(RI == 1)                                //查看是否接收到数据
  39.                 {
  40.                         receiveData = SBUF;        //读取数据
  41.                         RI = 0;                                //清除标志位

  42.                         //--因为一次接受只能接收到8位数据,最大为255,所以只用显示百位之后--//
  43.                         DisplayData[0] = 0x00;
  44.                         DisplayData[1] = DIG_CODE[receiveData / 100];      // 百位
  45.                         DisplayData[2] = DIG_CODE[receiveData % 100 / 10]; // 十位
  46.                         DisplayData[3] = DIG_CODE[receiveData % 10];           // 个位
  47.                         DisplayData[4] = 0x00;
  48.                         DisplayData[5] = DIG_CODE[receiveData / 100];      // 百位
  49.                         DisplayData[6] = DIG_CODE[receiveData % 100 / 10]; // 十位
  50.                         DisplayData[7] = DIG_CODE[receiveData % 10];
  51.                 }
  52.                 DigDisplay();
  53.         }
  54. }
  55. /*******************************************************************************
  56. * 函 数 名         :UsartConfiguration()
  57. * 函数功能                   :设置串口
  58. * 输    入         : 无
  59. * 输    出         : 无
  60. *******************************************************************************/

  61. void UsartConfiguration()
  62. {
  63.         SCON=0X50;                        //设置为工作方式1
  64.         TMOD=0X20;                        //设置计数器工作方式2
  65.         PCON=0X80;                        //波特率加倍
  66.         TH1=0XF3;                    //计数器初始值设置,注意波特率是4800的
  67.         TL1=0XF3;
  68.         TR1=1;                                            //打开计数器
  69. }
  70. /*******************************************************************************
  71. * 函 数 名         : DigDisplay
  72. * 函数功能                   : 使用数码管显示
  73. * 输    入         : 无
  74. * 输    出         : 无
  75. *******************************************************************************/
  76. void DigDisplay()
  77. {
  78.         unsigned char i;
  79.         unsigned int j;
  80.         for(i=0;i<8;i++)
  81.         {
  82.                 switch(i)         //位选,选择点亮的数码管,
  83.                 {
  84.                         case(0):
  85.                                 LSA=0;LSB=0;LSC=0; break;//显示第0位
  86.                         case(1):
  87.                                 LSA=1;LSB=0;LSC=0; break;//显示第1位
  88.                         case(2):
  89.                                 LSA=0;LSB=1;LSC=0; break;//显示第2位
  90.                         case(3):
  91.                                 LSA=1;LSB=1;LSC=0; break;//显示第3位
  92.                         case(4):
  93.                                 LSA=0;LSB=0;LSC=1; break;//显示第4位
  94.                         case(5):
  95.                                 LSA=1;LSB=0;LSC=1; break;//显示第5位
  96.                         case(6):
  97.                                 LSA=0;LSB=1;LSC=1; break;//显示第6位
  98.                         case(7):
  99.                                 LSA=1;LSB=1;LSC=1; break;//显示第7位       
  100.                 }
  101.                 GPIO_DIG=DisplayData[i];//发送段码
  102.                 j=10;                                                 //扫描间隔时间设定
  103.                 while(j--);       
  104.                 GPIO_DIG=0x00;//消隐
  105.         }
  106. }
复制代码


21、RS232串口实验.rar

2.91 MB, 下载次数: 24, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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