MCS-51单片机实验源程序
MCS-51单片机程序设计

+1
,当X>0
Y= 0
,当X=0
开始
-1
,当X<0
X=0
N
程序流程框图如图4.1所示。 Y
Y←0
X>0 Y
Y←1
N Y←-1
结束
程序如下: ORG
MOV CJNE MOV AJMP MP1: JB MOV LJMP MP2: MOV HERE: SJMP
1000H A,R0 A,#00H,MP1 R1,#00H HERE ACC.7 MP2 R1,#01H HERE R1,#0FFH HERE
1000H DPTR,#2000H DPL DPH DPTR,#3000H R2,DPL R3,DPH
;源数据区首地址 ;源首址暂存堆栈
;目的数据区首地址 ;目的首址暂存寄存器
LOOP:
POP POP MOVX INC PUSH PUSH MOV MOV MOVX MOV MOV DJNZ SJMP
;源数据区首地址 ;目的数据区首地址 ;循环次数 ;取数据 ;数据传送 ;源地址加1 ;目的地址加1 ;循环控制 ;结束
例4.8 外部RAM之间的数据传送程序。
把外部RAM 2000H开始单元中的数据传送到外部RAM 3000H开始的单 元中,数据个数在内部RAM的35H单元中。
START:
ORG MOV PUSH PUSH MOV MOV MOV
K=?
K=0
K=1
转向 0 分支 转向 1 分支
K= n-1
K=n
转向 n-1 分支 转向 n 分支
例4.5 设内部RAM的30H单元有一个数,根据该数值的不同 转移到不同的程序段进行处理,设数值的范围为0~10的 无符号数。
第三章 MCS-51系列单片机指令系统及汇编语言程序设计

加1指令(5条)
INC INC INC INC INC A direct @Ri Rn DPTR
减1指令(4条)
DEC DEC DEC DEC A direct @Ri Rn
十进制调整指令(1条)
DA A ; DA指令只能放在加法指令后应用,把A中按二进制 相加后的结果调整成按BCD数相加的结果 。
堆栈操作类指令(2条)
PUSH direct POP direct 例:SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入 08H地址单元,SP=08H。
交换指令(5条)
XCH A,Rn XCH A,@Ri XCH A,direct XCHD A,@Ri SWAP A 例:A=80H,R0=32H,(32H)=FFH,指令XCHD A,@R0执行 后,A=8FH,(32H)=F0H。
• 作业: • 计算 2B46H * 8AH ,将计算结果放在片内 • RAM 4FH、4EH、4DH单元,4DH放最低 位。
3. 逻辑操作类指令(共24条)
“与”操作指令(6条)
ANL ANL ANL ANL ANL ANL A,direct A,#data A,Rn A,@Ri direct,A direct,#data
逻辑操作类指令共有24条,主要包括“与”、“或”、“异或”、求反、 清0、左右移位等逻辑操作。
“或”操作指令(6条)
ORL A,direct ORL A,#data ORL A,Rn ORL A,@Ri ORL direct,A ORL direct,#data 例:(21H)=3AH,A=14H,指令ORL 21H,A执行后,(21H)=3EH。
CHENG: MOV A , R2 • MOV B , R3 • MUL AB • MOV R5 , A • MOV R6 , B • MOV A , R2 • MOV B , R4 • MUL AB • ADD A , R6 • MOV R6 , A • MOV A , B • ADDC A , #00H • MOV R7 , A • RET
MCS-51系列单片机的指令系统和汇编语言程序

3·1 汇编指令第3 章MCS 一51 系列单片机的指令系统和汇编语言程序3·1·1 请说明机器语言、汇编语言、高级语言三者的主要区分,进一步说明为什么这三种语言缺一不行。
3·1·2 请总结:(1)汇编语言程序的优缺点和适用场合。
(2)学习微机原理课程时,为什么肯定要学汇编语言程序?3·1·3MCS 一51 系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。
3·1·4 要访问片内RAM,可有哪几种寻址方式?3·1·5 要访问片外RAM,有哪几种寻址方式?3·1·6 要访问ROM,又有哪几种寻址方式?3·1·7 试按寻址方式对MCS 一51 系列单片机的各指令重进展归类(一般依据源操作数寻址方式归类,程序转移类指令例外)。
3·1·8 试分别针对51 子系列与52 子系列,说明MOV A,direct 指令与MOV A,@Rj 指令的访问范围。
3·1·9 传送类指令中哪几个小类是访问RAM 的?哪几个小类是访问ROM 的?为什么访问ROM 的指令那么少?CPU 访问ROM 多不多?什么时候需要访问ROM?3·1·10 试绘图示明MCS 一51 系列单片机数据传送类指令可满足的各种传送关系。
3·1·11 请选用指令,分别到达以下操作: (1)将累加器内容送工作存放器R6.(2)将累加器内容送片内RAM 的7BH 单元。
(3)将累加器内容送片外RAM 的7BH 单元。
(4)将累加器内容送片外RAM 的007BH 单元。
(5)将ROM007BH 单元内容送累加器。
3·1·12 区分以下指令的不同功能:(l)MOV A,#24H 与MOV A.24H(2)MOV A,R0 与MOV A,@R0(3)MOV A,@R0 与MOVX A,@R03·1·13 设片内RAM 30H 单元的内容为40H;片内RAM 40H 单元的内容为l0H;片内RAM l0H 单元的内容为00H;(Pl)=0CAH。
MCS-51单片机实验5-1外部中断实验1

【实验流程图】
主程序
外部中断0初 始化
点亮P1.0口 LED灯
等待中断
主程序结束
中断程序
P1.0取反
中断程序返 回
【实验O程RG序代码】
0LJ0M00PH M ORAGIN 0003H
INTER0:CPL P1.7
RETI MAIN:SETB EA
SETB EX0
SETB IT0 CLR P1.7 SJMP $
END
实验一、外部中断实验1
【实验步骤】
将程序补充完整,并添加注释 运行程序观察实验现象。
ORG
0LJ0M00PH
;主程序入口
;转置主程序
330
M ORAGIN 0003H;外中0断入口
INTER0:CPL P1.7 ;;LLDDEE灯灯灭亮
74ls0
RETI
为避免占;用返其回他等中断待的入
实验一、外部中断实验1
【实验目的】
掌握外部中断的初始化方法 熟悉中断的触发过程
【接线方式】
P1.0接1个LED灯 P3.2接一个单脉冲发生器。
实验一、外部中断实验1
【实验内容及要求】
编写程序,实现以下功能 上电LED灯亮,中断一次,小灯变灭,再次中断, 小灯再次点亮,如此反复,即每发生一次中断, 灯的亮灭状态改变一次。
ORG 0013H入口地址初始化
SETB EA SETB EX1 SETB IT1
允许总中断
允许外部中断0 设置外部中断1的触发方式 为边沿触发方式
口地址,我们通常将中断
7 P1.7
MAIN:SETB入E口A处;放允一许条总跳中转断指令,单脉
SETB
可EX以0把;程允序许修外改中如断下。0
MCS51单片机原理与应用-焊接实验

单片机开发板焊接实验
学习目标
熟悉电路板焊接基本流程 掌握电路板焊接基本技能
焊接准备
准备焊接工具
烙铁、焊锡丝、松香、镊子、放大镜等
准备电路装配图
电路装配图是电子元件的布局图
准备元件
元件清单
焊接原则
按功能模块焊接:
电源电路,振荡电路,UART电路(下载), 复位等
按器件高低大小焊接:
先焊接较低器件:电阻、电容、二极管、三极 管; 再焊接较高器件:连接器、IC插座、按键等
RS232电路焊接过程-2
• MAX232的焊接
– 注意1号脚的位置,芯 片上豁口的方向 – 在一个对角的焊盘上加 上焊锡,这里是8号脚 – 放上芯片,芯片上的1 号脚位置标志是一个凹 下去的圆点
RS232电路焊接过程-3
• 把芯片的引脚和焊盘 对齐,固定8号引脚 • 用电烙铁加热焊锡丝 固定16号引脚 • 一定要使芯片的引脚 和焊盘对齐
电源电路焊接过程-8
正常工作状态
焊接顺序
• • • • • • • • • • • 电源电路焊接 C11->C6->IC插座->晶振 RS232电路的焊接 LED:D1->D2 复位电路 Switch:SW1->SW2->SW3->SW4 电阻的焊接 三极管的焊接:Q1->..->Q8 排阻的焊接 LED点阵焊接 4*4键盘、限流电阻焊接
RS232电路的原理图
RS232电路PCB图
• 焊接顺序 • C8->C7->C10->C5->C4>C9->U2->J1
RS232电路焊接过程-1
• 按照电源电路部分电 阻电容的焊接方法, 焊接电容C10->C5->C4>C9->C8->C7 • 焊接顺序,按照上面 的顺序逐个焊接 • 焊接要保证焊接质量, 是焊点有光泽,没有 毛刺
MCS-51单片机实验

MCS-51单片机实验第一部分软件实验 (2)软件实验一求一组数据的最大(小)值 (2)软件实验二二进制数转换为BCD数 (3)软件实验三二进制数转换为ASCII码 (3)第二部分硬件实验 (5)硬件实验一并行口输入、输出实验 (5)硬件实验二外部中断实验 (6)硬件实验三定时计数器实验 (9)硬件实验四串行通信实验 (11)第三部分综合实验 (13)综合实验一电子时钟 (13)第一部分软件实验软件实验一求一组数据的最大(小)值一、实验目的1.熟悉Keil μVision3软件,掌握C51语言程序的调试方法。
2.理解并掌握数组的定义及初始化。
3.熟悉并学会分支程序、循环程序的安排与设计。
二、实验设备装有Keil μVision3的计算机 1台三、实验内容••••1.用数组定义一组数据(如10个带符号数,每个占2字节),并赋初值;••••2.编程找出这组数的最大值、最小值,分别存在max、min变量中;••••3.编译后单步调试,打开Watches窗口和Memory窗口,观察变量值的变化以及它们在单片机存储器中的实际位置。
四、实验步骤1、建立项目文件:用鼠标单击【Project—New Project…】菜单命令,在弹出的“Creat New Project”窗口中选择项目保存的位置,在“文件名”后的框中输入项目文件名(可以与源程序文件名相同),单击“保存”。
并在弹出的窗口中选择器件型号。
2、建立源程序文件并添加到项目中:用鼠标单击【File—New…】菜单命令(或Create a new file),进入编辑窗口,在该窗口中输入源程序,单击【File—Save】菜单命令(或保存文件快捷按钮)保存文件(必须带扩展名)。
注意:用汇编语言写的程序,文件的扩展名为.ASM(必须写);如用C语言则扩展名为.C。
然后将该文件添加到项目中。
必要时对单片机的晶振频率、编译输出文件(.hex)进行设置。
3、编译程序:用鼠标单击【Project—Build target或Rebuild all target files】菜单命令(或相应的快捷按钮),对源文件进行编译。
MCS-51汇编语言程序设计

01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
2
本章目录
4.2.1 顺序结构程序 4.2.2 分支结构程序 4.2.3 循环结构程序 4.2.4 查表程序 4.2.5 子程序 4.3 汇编语言程序设计实例 习题与思考题
4.1 程序设计概述 4.1.1 程序设计的步骤 4.1.2 程序设计的方法 4.1.3 汇编语言的规范 4.1.4 汇编语言程序编辑和 汇编 4.2 结构化程序设计方法
01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
15
4.1.3 汇编语言的规范
(5)定义字伪指令 )定义字伪指令DW
[标号:] 标号: DW 16位二进制数表 16位二进制数表
---伪指令 伪指令DW 伪指令
功能: DW 指令是在程序存储器 ( ROM ) 中 , 从指定的 指令是在程序存储器( 功能 : DW指令是在程序存储器 ROM) 地址单元开始,定义若干个16位数据 一个16位数 位数据。 地址单元开始,定义若干个16位数据。一个16位数 要占两个存储单元,其中高8位存入低地址单元, 要占两个存储单元, 其中高 8位存入低地址单元, 位存入高地址单元。 低8位存入高地址单元。 例如: 例如: ORG 1100H 1100H TAB : DW 1234H, 0ABH 10 1234H, 以上伪指令经汇编以后, 将对从1100H 以上伪指令经汇编以后 , 将对从 1100H 开始的若 干内存单元赋值。 干内存单元赋值。
01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
16
4.1.3 汇编语言的规范
例如:ORG 1100H 例如: TAB :DW 1234H, 0ABH 10 (1100H)=12H (1101H)=34H (1102H)=00H (1103H)=ABH (1104H)=00H (1105H)=0AH
MCS-51单片机应用实验教程课程设计

MCS-51单片机应用实验教程课程设计1. 简介MCS-51单片机是一种高性能、低功耗单片机,广泛应用于各个领域。
本文主要介绍MCS-51单片机应用实验教程课程设计内容,以帮助初学者了解MCS-51单片机的应用。
2. 实验环境•Keil C51编译器•STC89C52RC单片机•电路板和外围器件•PC3. 实验内容3.1 实验1:LED流水灯LED流水灯是MCS-51单片机入门实验,可以让学生熟悉MCS-51单片机基本指令和寄存器的使用,以及加深对位运算的理解。
实现方法:通过MCS-51单片机的IO口和位运算实现8个LED灯的流水效果。
3.2 实验2:数码管显示数码管是一种常见的数字显示器件,通过数码管的显示,可以实现对数字的显示和闪烁等效果。
该实验可以让学生了解MCS-51单片机的定时器和中断服务程序的使用,以及对数码管的控制。
实现方法:通过MCS-51单片机的定时器,按照一定的时间间隔对数码管进行显示和闪烁。
3.3 实验3:按键控制LED灯按键开关是电子产品常用的一种输入方式,通过按键的不同状态可以控制LED等输出设备的开关。
该实验可以让学生了解MCS-51单片机的IO口的输入状态读取和控制。
实现方法:通过MCS-51单片机的IO口读取按键输入状态,通过位运算控制LED灯的开关。
3.4 实验4:外部中断实现按钮控制LED灯外部中断是MCS-51单片机的一种重要功能,通过外部中断可以实现对按钮的响应,进而实现对LED等设备的控制。
该实验可以让学生进一步了解MCS-51单片机的外部中断服务程序的使用和IO口管理。
实现方法:通过MCS-51单片机的外部中断输入,响应按键状态,并通过位运算控制LED灯的开关。
3.5 实验5:定时器PWM控制LED灯亮度通过调节LED灯的亮度,可以达到调节电子产品亮度的效果。
该实验可以让学生了解MCS-51单片机的定时器的PWM输出功能,以及通过PWM实现对LED等设备的亮度调节。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MCS-51单片机实验源程序仅供参考。
没有最好,只有更好!希望大家设计出更好的程序来。
软件实验一求一组数据的最大(小)值/*软件实验的目的:熟悉单片机常用的基本程序(算法),调试时观察变量(含数组)值的变化,从而理解程序的功能,了解变量(含数组)在单片机存储器中的具体位置。
*/int a[]={-1,2,-30,40,-500,600,-7000,8000,-32750,32765}; //任意给出10个int型数(围:-32768~+32767),放在数组a中void main(){unsigned char i;int max,min;max=min=a[0]; //max,min先取该组数据的第一个for(i=1;i<10;i++){if(a[i]>max) max=a[i];if(a[i]<min) min=a[i];}while(1); //没有什么要做了,则用该语句作为main函数的结尾,无限循环}附调试截图:注意:由于是纯软件实验(单片机没有进行实际的输入与输出),有些变量要声明为全局会被Keil软件编译时优化掉(即:一些语句没有真正生变量(如上面的数组a),否则可能..成执行代码),导致无法观察到正确结果。
软件实验二二进制(十六进制)数转换为BCD数//按流程图,编写程序如下:#define uchar unsigned charvoid main(){uchar x=0xA5; //设二进制数为1010 0101,在Keil中只能用十六进制0xA5或十进制165(不能直接用二进制形式)uchar a[3];a[2]=x/100;x=x%100;a[1]=x/10;x=x%10;a[0]=x;while(1);}//或者用for循环语句,先取出个位#define uchar unsigned charvoid main(){uchar x=0xA5;uchar i,a[3];for(i=0;i<3;i++){a[i]=x%10;x=x/10;}while(1);}软件实验三二进制(十六进制)数转换为ASCII码//将0-9、A-F的ASCII码做成表格(数组)放到程序存储器ROM中#define uchar unsigned charuchar code ascii[]={"0123456789ABCDEF"}; //ASCII码表放ROM中/*上句赋值也可写成{0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39, 0x41,0x42,0x43,0x44,0x45,0x46} *//* 还可写成{48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70} *//* 还可写成{'0','1','2','3','4','5','6','7','8','9','A','B','C','D', 'E','F'} */void main(){uchar x=0x5A; //设二进制数为0101 1010,在Keil中只能用十六进制0x5A或十进制90(不能直接用二进制形式)uchar cc,a[2];cc=x & 0x0f; //取x的低4位1010(即A)a[0]=ascii[cc]; //查表,a[0]存x低4位对应十六进制数(即A)的ASCII码cc=(x>>4)& 0x0f; //取x的高4位0101(即5)a[1]=ascii[cc]; //查表,a[1]存x高4位对应十六进制数(即5)的ASCII码while(1);}硬件实验一并行口输入、输出//P2做输出口,接8只LED,编写程序,使LED循环点亮(流水灯)#include<reg51.h>#include<intrins.h> //部函数_crol_,_cror_等的头文件void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms {unsigned char i;while(x--)for(i=0;i<123;i++);}void main(){char a=0xfe;while(1){P2=a;Delay(500); //在12MHz晶振下,延时约500msa=_crol_(a,1); //循环左移,_cror_为循环右移}}//P3.2和P3.3做输入口,分别接两个拨动开关到GND;P2.7~P2.4做输出口,接4只LED,用来指示两个开关的闭合状态组合#include<reg51.h>void main(){char a;while(1){a=P3; //读入P3口状态a=a&0x0C; //a中只保留P3.3、P3.2的值,其余位清零if(a==0x0C) P2=0x7F; //P3.3=1开,P3.2=1开,则P2.7=0亮if(a==0x08) P2=0xbF; //P3.3=1开,P3.2=0合,则P2.6=0亮if(a==0x04) P2=0xdF; //P3.3=0合,P3.2=1开,则P2.5=0亮if(a==0x00) P2=0xEF; //P3.3=0合,P3.2=0合,则P2.4=0亮}}//用一个共阳七段数码管循环显示0-9和A-F,每个数显示0.5s#include<reg51.h>sbit P1_0=P1^0;char code TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳数码管段码(放在程序存储器ROM中)void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms{unsigned char i;while(x--)for(i=0;i<123;i++);}void main(){ char j;P1_0=0; //位选信号while(1){for(j=0;j<16;j++){P0=TABLE[j];Delay(500);}}}硬件实验二外部中断//通过外部中断0(下降沿触发),启动或关闭流水灯,即上电复位时不亮,按一次INT0(P3.2)引脚的按钮,流水灯开启,再按一次,灯熄灭#include<reg51.h>#include<intrins.h> //部函数_crol_,_cror_等的头文件bit LED=0; //位变量LED用于记录流水灯的状态,0为关闭,1为开启void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms{unsigned char i;while(x--)for(i=0;i<123;i++);}void INT0_srv(void) interrupt 0 //INT0中断号为0{Delay(10); //延时10ms,去抖动if(INT0==0) LED=!LED; //每次中断时切换LED开启或关闭}void main(){char a=0xfe;IT0=1; //下降沿触发EX0=1; //允许INT0中断EA=1;while(1){if(LED) //开启{P2=a;Delay(500); //在12MHz晶振下,延时约500msa=_crol_(a,1); //循环左移,_cror_为循环右移}else //关闭{P2=0xff;}}}//通过外部中断0(低电平触发),启动或关闭流水灯,即上电复位时不亮,按一次INT0(P3.2)引脚的按钮,流水灯开启,再按一次,灯熄灭#include<reg51.h>#include<intrins.h> //部函数_crol_,_cror_等的头文件bit LED=0; //位变量LED用于记录流水灯的状态,0为关闭,1为开启void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms {unsigned char i;while(x--)for(i=0;i<123;i++);}void INT0_srv(void) interrupt 0 //INT0中断号为0{Delay(10); //延时10ms,去抖动if(INT0==0) LED=!LED; //每次中断时切换LED开启或关闭while(INT0==0); //如P3.2(INT0)还是0,则等待,变为1后才从中断返回}void main(){char a=0xfe;IT0=0; //低电平触发EX0=1; //允许INT0中断EA=1;while(1){if(LED) //开启{P2=a;Delay(500); //在12MHz晶振下,延时约500msa=_crol_(a,1); //循环左移,_cror_为循环右移}else //关闭{P2=0xff;}}}硬件实验三定时计数器//用单片机部定时器方式计时,实现每一秒钟P2口输出状态发生一次反转。
//设置定时器溢出时间为50ms,溢出20次则为1s//12MHz晶振下,部每个计数脉冲为1 s,50ms则需要50000个脉冲//在定时器方式1下初值为65536-50000//中断法#include<reg51.h>unsigned char count=20; //定时溢出次数void T0_int(void) interrupt 1//T0中断号为1{TH0=(65536-50000)/256; //每次溢出重新置初值TL0=(65536-50000)%256;count--;if(count==0) //溢出20次,即1s{count=20;P2=~P2;}}void main(){TMOD=0x01; //T0部定时,方式1TH0=(65536-50000)/256; //置初值TL0=(65536-50000)%256;ET0=1; //允许T0中断EA=1;TR0=1; //启动T0while(1); //循环等待}//查询法#include<reg51.h>unsigned char count=20; //定时溢出次数void main(){TMOD=0x01; //T0部定时,方式1,由TR0启动TH0=(65536-50000)/256; //置初值TL0=(65536-50000)%256;TR0=1; //启动T0while(1){while(!TF0); //等待定时溢出TF0=0; //溢出标志清零TH0=(65536-50000)/256; //溢出重新置初值TL0=(65536-50000)%256;count--;if(count==0) //溢出20次,即1s{count=20;P2=~P2;}}}//单片机对从P3.4(T0)输入的脉冲信号计数,T0工作于方式1,将计数结果送至P2口显示(二进制形式)//由于输出低电平时LED亮,故需反转后输出#include<reg51.h>void main(){TMOD=0x05; //T0外部计数,方式1,由TR0启动TH0=TL0=0; //置初值(可省略)TR0=1; //启动T0while(1){P2=~TL0; //将计数值实时送P2口显示,未考虑TH0}}//单片机对从P3.4(T0)输入的脉冲信号计数,T0工作于方式1,将计数结果用4位共阳数码管动态扫描显示(P0口输出段码,P1.0~P1.3分别选择千、百、十、个位,参见实验板原理图)#include<reg51.h>char code SEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0~9的段码(放在程序存储器ROM中)char code bit_sel[]={0xf7,0xfb,0xfd,0xfe}; //个、十、百、千位选信号void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms{unsigned char i;while(x--)for(i=0;i<123;i++);}void main(){unsigned int count;unsigned char k;TMOD=0x05; //T0外部计数,方式1,由TR0启动TH0=TL0=0; //置初值(可省略)TR0=1; //启动T0while(1){count=TH0*256+TL0; //将计数值送countfor(k=0;k<4;k++) //动态扫描显示{P1=bit_sel[k]; //输出位选信号P0=SEG[count%10]; //输出段码Delay(5);count=count/10;}}}硬件实验四串行通信//单片机甲用于串行发送,单片机乙用于接收。