设计题目:甲机通过串口控制乙机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闪烁。 代码:甲机程序
- #include<reg51.h>
- #define uchar unsigned char
- sbit K1=P1^0; //P1.0脚作为换档开关
- void delay(); //延时子函数
-
- void conveysymbol(uchar c) //传送字符
- {
- SBUF=c; //将要传送字符的ASCII码写入甲机的SBUF上
- while(TI==0); //当SBUF数据满时跳出循环
- TI=0; //将TI手动清零
- }
-
- void main()
- {
- uchar model=0; //换档变量
- SCON=0x40; //串口为工作方式1
- TMOD=0x20; //定时器1工作方式2
- PCON=0x00; //波特率不加倍
- TH1=0xfd; //波特率为9600bps
- TL1=0xfd;
- TI=0; //默认SBUF未写满
- TR1=1; //启动定时器1
- while(1)
- {
- if(K1==0)
- {
- while(K1==0); //每检测到P1.0引脚有下降沿,即换档
- model=(model+1)%4;
- }
- switch(model)
- {
- case 0: break;//无操作
- case 1: conveysymbol('A'); break; //传送字符A的ASCII码
- case 2: conveysymbol('B'); break; //传送字符B的ASCII码
- case 3: conveysymbol('C'); break; //传送字符C的ASCII码
- }
- delay(); //延时
- }
-
- }
-
- void delay() //延时子函数
- {
- uchar i,j;
- for(i=200;i>0;i--)
- for(j=500;j>0;j--);
- }
-
- 乙机程序
-
-
- #include<reg51.h>
- #define uchar unsigned char
- sbit LED1=P0^0; //P0.0引脚接LED灯1
- sbit LED2=P0^3; //P0.0引脚接LED灯1
- void delay(); //延时子函数
- void main()
- {
- SCON=0x50; //串口为工作方式1,允许接收
- TMOD=0x20; //定时器1工作方式2
- PCON=0x00; //波特率不加倍
- TH1=0xfd; //波特率为9600bps
- TL1=0xfd;
- RI=0; //默认SBUF未写满
- TR1=1; // 启动定时器1
- LED1=LED2=0; //led灯初始状态为灭
- while(1)
- {
- if(RI) //当RI为1,即SBUF写满时,进入换档
- {
- RI=0; //手动将RI清零
- switch(SBUF)
- {
- case 'A': LED1=~LED1;LED2=0;break; //接收到A的ASCII码值时执行此句
- case 'B': LED2=~LED2;LED1=0;break; //接收到B的ASCII码值时执行此句
- case 'C': LED1=~LED1;LED2=~LED2; //接收到C的ASCII码值时执行此句
- }
- }
- else LED1=LED2=0; //若接收不到来自主机的字符,两个led灯均灭
- delay();
- }
-
- }
- void delay()
- {
- uchar i,j;
- for(i=200;i>0;i--)
- for(j=500;j>0;j--);
- }
复制代码
完整的Word格式文档51黑下载地址:
串口.doc
(188.5 KB, 下载次数: 26)
|