1、1实验项目名称:数码管显示及双单片机串口通信实验实验室(中心) : 电 子 实 验 室 实验完成时间: 09 年 10 月 30 日2一实验目的与要求1、通过实验掌握数码管,显示数据的方法;熟悉有关元器件的使用方法。2、掌握单片机串口通信的设计方法,了解双单片机通信的原理。二实验原理及实验线路1、图中,74LS47 是七段译码器。它是将BCD 码翻译成七段驱动码,驱动数码管显示数据,数码管为共阴普亮数码管,型号为LTS547R,BCD码由P0口的低四位输出,P2 口作为位选口,P2.0 对应左 (右)边那块是首显示块, P2.3 对应右( 左)边的那块是末显示块。工作时,先送BCD 码,再选位
2、,使选中的数码管点亮,往复循环。2、已知8051的串行口采用方式1进行通信,晶振频率为 11.0592MHz,选用定时器T1作为波特率发生器,T1工作于方式2,要求通信的波特率为 9600,计算T1 的初值。设SMOD=0,根据式定时方式:X=M-要求的定时值/(12/fosc),计算T1的初值如下:X=28-11.0592*106/9600*32*12=253=FDH选用11.0592MHZ晶振的目的就是为了使计算得到的初值为整数,选用定时器 T1工作于方式2作为波特率发生器,只需要在初始化编程的时候,将计算得到的初值写入TH1 和TL1,当T1溢出时会自动重新装入初值,从而产生精确的波特率
3、真。如果将T1工作于方式0或方式1 ,则当T1 溢出时需要由中断服务程序重装初值,这时中断响应时间和中断服务程序指令的执行时间将导致波特率产生一定的误差。因此采用T1作为串行口的波特率真发生器时,通常都将T1设置为工作方式2 。三实验内容1、左循环显示“1 ”, “2”,“3”,“4”。右循环显示“1 ”,“2”,“3”,“4”。 先四个显示块显示1 ,2,3,4,1 秒后四个显示块同时显示5,6 ,7,8。2、用串口传送0F十六个数据。并用C代码编程。四、实验电路图1、数码管显示实验电路图教师评阅意见:签名: 年 月 日实验成绩:3XTAL218XTAL119ALE30EA31PSEN29R
4、ST9P0./AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD63P0.7/AD732P2.7/A1528P2.0/A821P2.1/A92P2./A1023P2.3/A124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD1P3.2/INT012P3./INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U380C51234567891RP1RESPACK-8D
5、03 Q02D14 Q15D27 Q26D38 Q39D413 Q412D514 Q515D617 Q616D718 Q719OE1LE1U174LS373X1CRYSTALC110nC210nC310nR11kR21k2、双单片机串口通信实验电路图XTAL218XTAL119ALE3031PSN29RST9P0./AD0390.1/138P0.2/AD2370.3/336P0.4/AD4350.5/534P0.6/AD630.7/732P2.7/A1528P2.0/A8212.1/92P2./A10232.3/124P2.4/A12252.5/13262.6/1427P1.011.2P1.2
6、31.34P1.451.56P1.671.78P3.0/RXD103.1/T 1P3.2/INT0123./IT113P3.4/T014P3.7/RD173.6/W163.5/T115U380C51X1CRYSTALC110nC210nC310nR11kXTAL218XTAL119ALE3031PSN29RST9P0./AD0390.1/138P0.2/AD2370.3/336P0.4/AD4350.5/534P0.6/AD630.7/732P2.7/A1528P2.0/A8212.1/92P2./A10232.3/124P2.4/A12252.5/13262.6/1427P1.011.2P1
7、.231.34P1.451.56P1.671.78P3.0/RXD103.1/T 1P3.2/INT0123./IT113P3.4/T014P3.7/RD173.6/W163.5/T115U180C51X2CRYSTALC410nC510nC610nR21k4五、实验 C 语言程序1、数码管显示代码#include#include#includesbit P24=P24;sbit P25=P25;sbit P26=P26;sbit P27=P27;unsigned char table10=0x3f,0x06,0x5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F;un
8、signed char count;void delay(unsigned i) unsigned char a,b,c;for(;i0;i-)for(c=167;c0;c-)for(b=171;b0;b-)for(a=16;a0;a-);_nop_; void delay0()int i,j;for(i=10;i0;i-)for(j=110;j0;j-)_nop_;void main(void)while(1) P2=0XFF;P0=table1;P24=0;delay(1);P2=0XFF;P0=table2;P25=0;delay(1);P2=0XFF;P0=table3;P26=0;d
9、elay(1);P2=0XFF;P0=table4;P27=0;delay(1);/-P2=0XFF;P0=table1;P27=0;delay(1);P2=0XFF;P0=table2;P26=0;delay(1);P2=0XFF;P0=table3;P25=0;delay(1);P2=0XFF;P0=table4;P24=0;delay(1);/-count=50;while(count-)P2=0XFF;P0=table1;P24=0;delay0();P2=0XFF;P0=table2;P25=0;delay0();P2=0XFF;P0=table3;P26=0;delay0();P2
10、=0XFF;P0=table4;P27=0;delay0();/-P0=0;count=50;delay(2);while(count-)P2=0XFF;P0=table5;P24=0;5delay0();P2=0XFF;P0=table6;P25=0;delay0();P2=0XFF;P0=table7;P26=0;delay0();P2=0XFF;P0=table8;P27=0;delay0();2、双机通信代码#include#define TR 1unsigned char idata buf16=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;unsigned
11、 char pf;/校验和标志位void delay(void) /延时 0.5Sunsigned char a,b,c;for(c=23;c0;c-)for(b=152;b0;b-)for(a=70;a0;a-);void initial(void)/初始化函数SCON=0x90;PCON=0X80;void send(void)/发送数据子函数unsigned char i;for(i=0;i16;i+)TB8=P;SBUF=bufi;P1=bufi;while(TI=0);TI=0;delay();while(RI=0);RI=0;if(SBUF=0xff)i-;void receive
12、(void)/接受数据子函数unsigned char d16;unsigned char i;for(i=0;i16;i+)while(RI=0);RI=0;ACC=SBUF;di=SBUF;/ if(RB8!=P)/ / SBUF=0XFF;/ i-;/ P1=0XFF;/ continue;/ / else P1=di;SBUF=0x00;delay();while(TI=0);TI=0;void main(void)initial();if(TR=1)receive();elsesend();6六实验步骤1、打开Keil 程序,执行菜单命令“Project”“New Project”创
13、建“数码管显示”项目,并选择单片机型号为AT89C51。执行菜单命令“File” “New”创建文件,输入源程序,保存为 “数码管显示.c”。在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group SourceGroup1”将源程序“数码管显示.c”添加到项目中。执行菜单命令“Project” “Options for Target Target 1”,在弹出的对话框中选择“Output” 选项卡,选中“Greate HEX File”。执行菜单命令“Project” “Build Target”,编译源程序。如果编译成功,则在“OutputWin
14、dow”窗口中显示没有错误,并创建了“数码管显示.HEX”文件。在proteus仿真平台上建立参考图系统,并将程序上载到虚拟芯片上运行,注意修改打开Keil 程序,执行菜单命令“Project”“New Project”创建“双单片机串口通信”项目,并选择单片机型号为AT89C51。2、执行菜单命令“File” “New”创建文件,输入源程序,保存为 “双单片机串口通信.A51 ”。在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group SourceGroup1”将源程序“双单片机串口通信.A51 ”添加到项目中。执行菜单命令“Project” “
15、Options for Target Target 1”,在弹出的对话框中选择“Output” 选项卡,选中“Greate HEX File”。执行菜单命令“Project” “Build Target”,编译源程序。如果编译成功,则在“OutputWindow”窗口中显示没有错误,并创建了“双单片机串口通信.HEX”文件。在proteus仿真平台上建立参考图系统,并将程序上载到虚拟芯片上运行。74LS47输入脚与数码管的引脚连接。七、实验总结及心得1、数码管显示实验没有什么难度,只是在设计程序的时候要先料及数码管动态显示的原理然后根据具体情况就能很好的了解如何使用了。2、双机通信的实验我是用 C 语言来编写的,这个实验也需要对单片机的功能要有很深的了解,在编程的时候也没有什么难度,只是编程的时候要仔细,我自己在编程完成的时候忘了将初始化函数调用,结果以为自己是把串口通信的原理弄错了,找了半天还是没能解决问题,最后发现没有调用出示化函数,浪费了不少精力。总结几点:在第一次做的时候一定将硬件设计好;做第一次做软件设计的时候要特别认真的做好每一步,如果你设计的程序很长,就很难再后期的调试中找到逻辑上的错误;做设计的时候要清楚的知道单片机各个引脚和端口的功能,如果不能理解,可以在实践中多积累积累经验,这样很有用。