找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8219|回复: 0
收起左侧

甲机通过单片机串口控制乙机LED闪烁的设计报告

[复制链接]
ID:392008 发表于 2018-9-11 17:07 | 显示全部楼层 |阅读模式
设计题目:甲机通过串口控制乙机LED闪烁
一、设计实验条件
计算机与通信工程实验室
二、设计任务及要求
两片单片机(称为甲机和乙机)之间采用串行通信方式1来控制乙机的LED1闪烁,LED2闪烁, LED1和LED2同时闪烁,或者同时关闭LED1和LED2。
  •   甲机发送字符“A”,控制乙机的LED1闪烁;
  • 甲机发送字符“B”,控制乙机的LED2闪烁;
  • 甲机发送字符“C”,控制乙机的LED1和LED2同时闪烁;
  • 甲机停止发送任何命令字符,则乙机的LED1和LED2均停止闪烁。
在上述功能的基础上,在电路中添加LED指示灯和蜂鸣器,使系统可以同时识别依次按下的多个按键,在到达指定位置后蜂鸣器发出短暂声音且LED闪烁片刻,数字继续滚动显示。例如,当前位置在1层时,用户依次按下4、6、5时,则数字分别向上滚动到4、5、6时暂停且LED闪烁片刻,同时蜂鸣器发出提示音。声音频率可固定或可变。如果在待去的楼层的数字中,有的在当前运行的反方向,则数字现在当前方向运行完毕后,再依次按顺序前往反方向的数字位置。

三、设计报告的内容
  • 绪论

为了增强实践能力,拓展学习范围,加深对单片机原理及相关知识的理解与应用,我们组队参加了此次单片机课程设计,并选择了“甲机通过串口控制乙机LED闪烁”作为本次课设的题目。

  • 设计主体
设计电路图:

结束语:本次单片课设试验是锻炼我们动手能力的一个考验,让我们将课上学到的以及试验中学到的融入到此次课设中,极大地增强了我们的实际操作能力,感谢我的队友和老师。
参考资料陈海宴.51单片机原理及应用【M】.北京:北京航空航天大学出版社,2006年四、设计时间与安排
1、设计时间:        1周2、设计时间安排:  熟悉实验设备、收集资料: 1  天设计图纸、实验、计算、程序编写调试:4 天编写课程设计报告: 1  天答辩: 1  天


MAX232:简介和主要作用

【MAX232是一种双组驱动器/接收器,片内含有一个电容性电压发生器以便在单5V电源供电时提供EIA/TIA-232-E电平。】

当用单片机和PC机通过串口进行通信,尽管单片机有串行通信的功能,但单片机提供的信号电平和RS232的标准不一样,因此要通过max232这种类似的芯片进行电平转换。

引脚介绍

第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。

第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。

其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。

8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

TTL/CMOS数据从11引脚(T1IN)、10引脚(T2IN)输入转换成RS-232数据从14脚(T1OUT)、7脚(T2OUT)送到电脑DB9插头;DB9插头的RS-232数据从13引脚(R1IN)、8引脚(R2IN)输入转换成TTL/CMOS数据后从12引脚

(R1OUT)、9引脚(R2OUT)输出。

第三部分是供电。15脚GND、16脚VCC(+5v)。

电路分析:

甲机P1.0口连接一个秒脉冲,当开关按下时,产生一个下降沿,此时软件命令p3.1口发送一个字符,经过max232传输到乙机p3.0口,由软件命令控制乙机p0.0口和p0.3口连接的LED闪烁与熄灭。从而实现甲机通过串口控制乙机LED闪烁。

代码:甲机程序



  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. sbit K1=P1^0;                //P1.0脚作为换档开关
  4. void delay();                 //延时子函数

  5. void conveysymbol(uchar c)    //传送字符
  6. {
  7.               SBUF=c;                //将要传送字符的ASCII码写入甲机的SBUF上
  8.               while(TI==0);            //当SBUF数据满时跳出循环
  9.               TI=0;                  //将TI手动清零
  10. }

  11. void main()
  12. {
  13.               uchar model=0;          //换档变量
  14.               SCON=0x40;             //串口为工作方式1
  15.               TMOD=0x20;            //定时器1工作方式2
  16.               PCON=0x00;            //波特率不加倍
  17.               TH1=0xfd;              //波特率为9600bps
  18.               TL1=0xfd;
  19.               TI=0;                  //默认SBUF未写满
  20.               TR1=1;                //启动定时器1
  21.               while(1)
  22.               {
  23.                             if(K1==0)
  24.                                           {
  25.                                                         while(K1==0);                 //每检测到P1.0引脚有下降沿,即换档
  26.                                                         model=(model+1)%4;
  27.                                           }
  28.                             switch(model)
  29.                             {
  30.                                           case 0:  break;//无操作            
  31.                                           case 1: conveysymbol('A'); break;     //传送字符A的ASCII码
  32.                                           case 2: conveysymbol('B'); break;     //传送字符B的ASCII码
  33.                                           case 3: conveysymbol('C'); break;     //传送字符C的ASCII码
  34.                             }
  35.                             delay();           //延时
  36.               }

  37. }

  38. void delay()              //延时子函数
  39. {
  40.               uchar i,j;
  41.               for(i=200;i>0;i--)
  42.               for(j=500;j>0;j--);
  43. }

  44. 乙机程序


  45. #include<reg51.h>
  46. #define uchar unsigned char
  47. sbit LED1=P0^0;                //P0.0引脚接LED灯1
  48. sbit LED2=P0^3;                //P0.0引脚接LED灯1
  49. void delay();                   //延时子函数
  50. void main()
  51. {
  52.               SCON=0x50;              //串口为工作方式1,允许接收
  53.               TMOD=0x20;             //定时器1工作方式2
  54.               PCON=0x00;             //波特率不加倍
  55.               TH1=0xfd;               //波特率为9600bps
  56.               TL1=0xfd;
  57.               RI=0;                   //默认SBUF未写满
  58.               TR1=1;                 // 启动定时器1
  59.               LED1=LED2=0;           //led灯初始状态为灭
  60.               while(1)
  61.               {
  62.                             if(RI)               //当RI为1,即SBUF写满时,进入换档
  63.                             {
  64.                                           RI=0;           //手动将RI清零
  65.                                           switch(SBUF)
  66.                                           {
  67.                                                         case 'A': LED1=~LED1;LED2=0;break; //接收到A的ASCII码值时执行此句
  68.                                                         case 'B': LED2=~LED2;LED1=0;break; //接收到B的ASCII码值时执行此句
  69.                                                         case 'C': LED1=~LED1;LED2=~LED2; //接收到C的ASCII码值时执行此句
  70.                                           }
  71.                             }
  72.                             else LED1=LED2=0; //若接收不到来自主机的字符,两个led灯均灭
  73.                             delay();
  74.               }

  75. }
  76. void delay()
  77. {
  78.               uchar i,j;
  79.               for(i=200;i>0;i--)
  80.               for(j=500;j>0;j--);
  81. }
复制代码



完整的Word格式文档51黑下载地址:
串口.doc (188.5 KB, 下载次数: 26)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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