找回密码
 立即注册

QQ登录

只需一步,快速开始

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

教你51单片机和PC串口通信 单片机的课程设计资料

[复制链接]
跳转到指定楼层
楼主
制作出来的实物图如下:


仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. unsigned char key_s, key_v, tmp;
  4. char code str[] = "I love zhu xiao ying--CUMT \n\r";

  5. void send_int(void);
  6. void send_str();
  7. bit        scan_key();
  8. void proc_key();
  9. void delayms(unsigned char ms);
  10. void send_char(unsigned char txd);

  11. sbit        K1 = P1^4;

  12. main()
  13. {
  14.     send_int();
  15.         TR1 = 1;                                            // 启动定时器1
  16.         while(1)
  17.         {
  18.                 if(scan_key())                            // 扫描按键
  19.                 {
  20.                         delayms(10);                        // 延时去抖动
  21.                         if(scan_key())                        // 再次扫描
  22.                         {
  23.                                 key_v = key_s;                // 保存键值
  24.                                 proc_key();                        // 键处理
  25.                         }
  26.                 }
  27.                 if(RI)                                                // 是否有数据到来
  28.                 {
  29.                         RI = 0;
  30.                         tmp = SBUF;                                // 暂存接收到的数据
  31.                         P0 = tmp;                                // 数据传送到P0口
  32.                         send_char(tmp);                        // 回传接收到的数据
  33.                 }        
  34.         }

  35. }
  36. void send_int(void)
  37. {     TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率
  38.         TH1 = 0xF3;                                // 波特率2400
  39.         TL1 = 0xF3;
  40.         SCON = 0x50;                        // 设定串行口工作方式
  41.         PCON&= 0xef;                        // 波特率不倍增
  42.                

  43.         IE = 0x0;                                // 禁止任何中断
  44. }
  45. bit scan_key()        
  46. // 扫描按键                              
  47. {
  48.         key_s = 0x00;
  49.         key_s |= K1;
  50.         return(key_s ^ key_v);        
  51. }

  52. void proc_key()
  53. // 键处理
  54. {
  55.         if((key_v & 0x01) == 0)
  56.         {                        // K1按下
  57.                 send_str();                                // 传送字串
  58.         }
  59. }

  60. void send_char(unsigned char txd)
  61. // 传送一个字符
  62. {
  63.         SBUF = txd;
  64.         while(!TI);                                // 等特数据传送
  65.         TI = 0;                                        // 清除数据传送标志
  66. }

  67. void send_str()
  68. // 传送字串
  69. {
  70.         unsigned char i = 0;
  71.         while(str[i] != '\0')
  72.         {
  73.                 SBUF = str[i];
  74.                 while(!TI);                                // 等特数据传送
  75.                 TI = 0;                                        // 清除数据传送标志
  76.                 i++;                                        // 下一个字符
  77.         }        
  78. }

  79. void delayms(unsigned char ms)        
  80. // 延时子程序
  81. {                                                
  82.         unsigned char i;
  83.         while(ms--)
  84.         {
  85.                 for(i = 0; i < 120; i++);
  86.         }
  87. }
复制代码

所有资料51hei提供下载:
一步一步教你51_PC串口通信.rar (65.27 KB, 下载次数: 9)


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

使用道具 举报

沙发
ID:1 发表于 2018-11-16 17:33 | 只看该作者
图文不对  积分被收回
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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