单片机实验报告--数码管、串口----数码管显自己学号、单片机和电脑串口通信
单片机实验报告数码管、串口-数码管显自己学号、单片机和电脑串口通信一 数码管 在学习板上用数码管来显示数字。在单片机中下载数码管程序如下:/*此程序可以实现,数码管显示0123的状态,用户可以自己根据前边的试验程序,自行编写按下某个按键时,数码管显示某个数字*/#include <reg52.h>#define uchar unsigned char sbit P2_0 = P20;sbit P2_1 = P21;sbit P2_2 = P22;sbit P2_3 = P23;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90;void delay(uchar i) uchar j,k; for(j=i;j>0;j-) for(k=125;k>0;k-);void display() P0=table0; P2_0 = 0; delay(5); P2_0 = 1; P0=table1; P2_1 = 0; delay(5); P2_1 = 1; P0=table2; P2_2 = 0; delay(5); P2_2 = 1; P0=table3; P2_3 = 0; delay(5); P2_3 = 1; /*演示主程序*/void main(void) unsigned int a; while(1) for(a=100;a>0;a-) display(); 学习板上会显示0123四个数字。如图所示更改程序,使其显示为自己的学号。本人的学号后四位为0248.修改程序如下:#include <reg52.h>#define uchar unsigned char sbit P2_0 = P20;sbit P2_1 = P21;sbit P2_2 = P22;sbit P2_3 = P23;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90;void delay(uchar i) uchar j,k; for(j=i;j>0;j-) for(k=125;k>0;k-);void display() P0=table0; P2_0 = 0; delay(5); P2_0 = 1; P0=table2; P2_1 = 0; delay(5); P2_1 = 1; P0=table5; P2_2 = 0; delay(5); P2_2 = 1; P0=table0; P2_3 = 0; delay(5); P2_3 = 1; /*演示主程序*/void main(void) unsigned int a; while(1) for(a=100;a>0;a-) display(); 学习板上会显示自己的学号后四位0250.本实验完成。二 串口通信串口通信,与电脑通信,用串口助手软件实验。在单片机中下载串口通信程序: ORG 0000H AJMP MAIN ORG 0023H AJMP RECEIVE ;跳转到接收中断入口 ORG 0030HMAIN: MOV TMOD,#20H ;T1工作方式2 MOV TH1,#0FDH ;波特率9600 MOV SCON,#50H ;传口工作方式1,允许中断接受 SETB EA ;打开总中断 SETB ES ;打开串口中断 SETB TR1 ;打开定时器1 AJMP $RECEIVE: CLR RI MOV A,SBUF ;串口接收数据 MOV R0,A MOV SBUF,A ;将接收的数据再传送给计算机 JNB TI,$ ;整体功能是:把收到的数据发回计算机的同时显示在单片机的数码管上 CLR TI MOV A,R0 ;本人实验: ANL A,#0FH ;程序上没有问题,回传数据仿真成功,数码管显示仿真不成功,何因?实物验证还有其他问题,还得找原因 MOV DPTR,#TAB ;查表显示 MOVC A,A+DPTR MOV P0,A MOV P2,#0FEH ;送LED显示,目前显示程序还有问题 RETITAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳字码表0-9 END在STC中的串口助手可以看到串口与电脑的通信,本人学号后两位为50,输入50,输出也为50如图。修改程序使输出结果加一,程序如下, ORG 0000H AJMP MAIN ORG 0023H AJMP RECEIVE ;跳转到接收中断入口 ORG 0030HMAIN: MOV TMOD,#20H ;T1工作方式2 MOV TH1,#0FDH ;波特率9600 MOV SCON,#50H ;传口工作方式1,允许中断接受 SETB EA ;打开总中断 SETB ES ;打开串口中断 SETB TR1 ;打开定时器1 AJMP $RECEIVE: CLR RI MOV A,SBUF INC A ;串口接收数据 MOV R0,A MOV SBUF,A ;将接收的数据再传送给计算机 JNB TI,$ ;整体功能是:把收到的数据发回计算机的同时显示在单片机的数码管上 CLR TI MOV A,R0 ;本人实验: ANL A,#0FH ;程序上没有问题,回传数据仿真成功,数码管显示仿真不成功,何因?实物验证还有其他问题,还得找原因 MOV DPTR,#TAB ;查表显示 MOVC A,A+DPTR MOV P0,A MOV P2,#0FEH ;送LED显示,目前显示程序还有问题 RETITAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳字码表0-9 END在STC中输入本人学号后两位50,输出51实验完成