1、MCS-51单片机系统设计指导书1一、 单片机开发系统应用初步基本 I/O 口赋值1.内容提要:aKEIL C 软件对程序进行编译调试及烧录软件的使用方法。b单片机基本 I/O 口的驱动方式、特点等。c汇编语句的基本用法;对基本 I/O 口的赋值方法;程序的具体流程等。2实验目的及要求:a课前预习好编程的基本知识。程序的基本概念、*.asm、*.c、*.hex、*.uv2所表示的文件类型等。b熟练掌握不同数据类型之间的相互转换,不同类型的数据在程序中的表示方法等。c课前弄清楚单片机 I/O 口的基本驱动方式,理解何谓上拉及下拉方式,单片机驱动电流、灌入电流等概念。d复习数码管的相关知识,弄清数
2、码管需显示某个字符应如何对其进行控制等。3实验源程序及流程图:ORG 0000HAJMP MAINMAIN: MOV P0,#0FH ; 00001111JMP MAINEND4实验步骤:a. 通过读程序,弄懂程序对哪个口进行赋初值,通过发光管亮或灭的情况反映出单片机输出数据的情况(注意区分数据的高低位)。b. 通过 KEIL C 软件对以上程序进行编译,正确后生成*.HEX 机器语言文件,随即打开烧录软件,将生成的*.HEX 文件烧录到单片机芯片中,完成后点击运行按钮便可脱机运行编写好的程序。c. 观察发光管亮灭情况,最终得出硬件的实际连接情况。d. 修改程序中的输出数据,重复以上编译烧录步
3、骤,再次观察 LED 发光情况是否与数据对应。例:对 P0 口赋值跳转至主程序开始结束MCS-51单片机系统设计指导书2ORG 0000HAJMP MAINMAIN: MOV P0,#65H ; 01100101JMP MAINENDe. 修改单片机输出数据的 I/O 口(如改为 P2 口输出),观察其余口是否能正确输出数据。例:ORG 0000HAJMP MAINMAIN: MOV P2,#0FHJMP MAINEND5发挥部分:将 I/O 口通过 8 芯排线接至独立两位数码管处,通过 I/O 口赋值能使数码管显示出本人学号最后一位(注意数据高位统一用来控制数码管的 a 笔段,低位控制 h
4、笔段)。6.电路原理图: 2 3 5 7 7 8 0 j4 1 D E e 2 1 0 1 1 K Z C C D 0 0 “ 0 0 0 MCS-51单片机系统设计指导书3提示:1. 由于单片机芯片烧录时需用到 P1 口,故在烧录过程中 P1.5、P1.6、P1.7 口不应有导线连接,否则易引起实验台初始化失败等错误(烧录完成后可以进行连接) 。7C 语言编程:#include void main(void)while(1)P0=0x0f;MCS-51单片机系统设计指导书4二、基本控制语句应用简单广告牌霓虹灯设计1.内容提要:a 汇编语言控制语句应用。b 程序的循环、子程序调用、程序跳转等。
5、c 单片机基本 I/O 口的驱动方式、特点等。2实验目的及要求:a 理解左移 RL、右移 RR 概念。b 延时程序 DELAY 的具体执行过程、延时量控制等。c 掌握通过设置程序的跳转来实现程序循环的方法。3实验源程序及流程图:ORG 0000HAJMP MAINMAIN: MOV P0,#00HMOV A,#01HLOOP: MOV P0,ARL AJMP LOOPEND4实验步骤:a. 读懂程序,分析程序中哪一句为控制语句,起到什么控制作用以及最终能实现何功能。b. 运行程序,观察结果是否与程序一致,分析出现问题的原因所在。c. 试着向源程序中加入延时语句,观察现象是否有所改变。ORG 0
6、000HAJMP MAIN开始P0 及累加器 A 初始化化A 内容赋予 P0A 内容左移跳转至 LOOP结束MCS-51单片机系统设计指导书5MAIN: MOV P0,#00HMOV A,#01HLOOP: MOV P0,ARL AACALL DELAYJMP LOOP;*延时子程序*;DELAY:MOV R2,#10HLOOP1:MOV R1,#0FFHLOOP2:DJNZ R1,LOOP2 ;对 R1 进行减 1,然后判断是否等于 0,不等就继续,等于 0 就往下执行;DJNZ R2,LOOP1RETENDd. 适当修改延时量,使 LED 闪烁更为明显,易于肉眼观察。e. 适当修改程序,使
7、程序最终实现一只 LED 作流水状移动。5发挥部分:能自左向右自右向左自左向右反复循环来控制一只发光管如反弹状移动。6.电路原理图:MCS-51单片机系统设计指导书6 2 3 5 7 7 8 0 j4 1 D E e 2 1 0 1 1 K Z C C D 0 0 “ 0 0 0 7.C 语言编程:#include unsigned char i,c,d,temp=0xfe; 11111110void delay(void)unsigned char a,b;for(a=0;a(8-i);;?P0=c|d;MCS-51单片机系统设计指导书7delay();三、 单片机 I/O 口输入独立按键识
8、别1. 内容提要:a 独立式按键的连接。b 汇编语句对按键的是否按下的具体判断、按键按下后所执行的跳转等。c 按键抖动对单片机所造成的影响以及如何消除抖动对单片机在执行程序上的影响。2实验目的及要求:a 掌握 JB、CPL 语句的具体使用方法。b 延时程序的具体执行过程、延时量控制等。c 掌握通过设置程序的跳转来执行相应语句的方法。d 体会按键抖动对单片机系统所造成的影响,以及如何通过软件延时去抖动方法来消除按键抖动。开始P0 及累加器 A 初始化化A 内容赋予 P0判断是否有键按下结束对 A 取反NYMCS-51单片机系统设计指导书83实验源程序及流程图:ORG 0000HAJMP MAIN
9、;*主程序*;MAIN: MOV P0,#0FFHMOV A,#0FFHWAIT: MOV P0,AJB P3.0,WAITCPL A ;。 。 。 。 。 。对 A 取反。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 ;ACALL DELAYJMP WAIT ;*延时子程序*;DELAY:MOV R2,#0FFHLOOP1:MOV R1,#0FFHLOOP2:DJNZ R1,LOOP2 ;对 R1 进行减 1,然后判断是否等于 0,不等就继续,等于 0 就往下执行;DJNZ R2,LOOP1RETEND4实验步骤:a. 运行以上程序,同时反复按下连
10、接至 P3.0 口的独立式轻触开关(平时按键抬起时为高电平,按下按键时为低电平),观察 LED 发光情况。5发挥部分:由于按键抖动,使 LED 的亮灭情况无法通过按键准确控制,试着通过前面一节的实验,在程序适当的位置加入延时程序,实现软件去抖动。6.电路原理图:(K2 应接在 P3.0)MCS-51单片机系统设计指导书9 2 3 0 h i3 r4 1 1 K 0 7.C 语言编程:#include sbit key=P30;unsigned char a=0;void main(void)while(1)P0=a;if(key=0)a=a;MCS-51单片机系统设计指导书10四、外部中断应用
11、按键计数器1. 内容提要:a 单片机中断系统基本功能、中断控制字定义以及外中断触发方式等。b 中断服务程序入口地址、中断断点及中断返回。c 按键抖动对中断所造成的影响。2实验目的及要求:a 理解中断服务程序的入口地址及熟记各中断服务程序入口地址。b 掌握中断控制字 TCON、IE、IP 的具体含义及正确定义等。c 掌握中断服务程序的具体执行过程。d 体会按键抖动对单片机系统所造成的影响及如何消除按键抖动。3实验源程序及流程图:ORG 0000HAJMP MAINORG 0003HAJMP DEALMAIN:SETB EASETB EX0SETB IT0MOV A,#00HMOV P0,#0FF
12、HWAIT:SJMP WAITDEAL:INC ACPL AMOV P0,ACPL ARETIEND4实验步骤:a. 阅读并理解程序,理解程序第三行的“ORG 0003H”及“MAIN”程序中初始化部分的具体含义。b. 运行程序,通过反复按下 P3.2 独立式按键(INT0) ,观察 LED 显示结果。开始外中断及数据初始化化死循环判断是否有中断结束对 A 累加计数NYMCS-51单片机系统设计指导书115发挥部分:通过以上实验结果得出:由于按键抖动,导致 P3.2/INT0 口频繁出现高低变化的电平,致使单片机多次执行中断服务程序。能否在程序的适当部分加入延时程序并更改触发方式,成功解决按键
13、抖动问题?6.电路原理图:0 1 1 22 3 3 44 5 5 1 D E C 7 6 5 4 K xZ D 0 0 w 0 0 0 C 0 T T 7.C 语言编程:#include unsigned char a=0;void int0(void) interrupt 0 using 0a+;a=a;P0=a;a=a;void main(void)EA=1;EX0=1;IT0=1;while(1);MCS-51单片机系统设计指导书12五、数码管显示基础数显按键计数器1. 内容提要:a 数码管内部结构、引脚定义及驱动。b 数码管段代码表具体含义。c 变址寻址在单片机查表中的意义所在。2实验
14、目的及要求:a 掌握数码管与单片机的连接方法。b 掌握段代码表的推算及变址寻址的具体含义。c 掌握判断语句的具体用法。3实验源程序及流程图:ORG 0000HAJMP MAINORG 0003HAJMP DEALORG 0030HMAIN: SETB EA 系统总中断SETB EX0SETB IT0 外部中断 0MOV P0,#00HMOV R0,#00HMOV DPTR,#TABDISPLAY:MOV A,R0 MOVC A,A+DPTRMOV P0,AJMP DISPLAYDEAL: INC R0RETITAB: DB 0FCH,60H,0DAH,0F2H,66H 0B 定时计数器0DB
15、0B6H,0BEH,0E0H,0FEH,0F6H 13 外部中断 1DB 0EEH,3EH,9CH,7AH,9EH,8EH,00H 1B 定时计数器1END 23 串口中断开始外中断及数据初始化化循环显示 R0 内容判断是否有中断结束对 R0 累加计数NYMCS-51单片机系统设计指导书134实验步骤:a. 阅读并理解程序,重点掌握数码管“TAB”段代码表以及段代码表查表过程。b. 根据程序定义,将 P0 口通过 8 芯排线连接至静态二位数码管的其中一位(注意将拨码开关拨至断开状态,以免 PO 口与 74LS164 输出发生冲突),注意数据高位控制 a 笔段;P3.2/INT0 端仍接独立式按
16、键。c. 运行以上程序,通过按下按键观察数码管显示情况。d. 解决按键抖动问题,同时分析数码管显示完“F”字符后为何会出现乱码。5发挥部分:使程序实现 16 进制计数,即按下按键时能从 09AF0 循环显示。6.电路原理图:0 1 22 3 3 4 D D 0 1 2 x3 6 92 1 D E C 7 6 4 3 2 C D C D 0 0 70 0 0 0 C T T C bcdeghm m G D D MCS-51单片机系统设计指导书147.C 语言编程:#include unsigned char a=0;/*数码管代码表(共阳且高位接 a 笔段)*/unsigned char Tab
17、=0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x11,0xC1,0x63,0x85,0x61,0x71,0xFF;void int0(void) interrupt 0 using 0a+;P0=Taba;void main(void)EA=1;EX0=1;IT0=1;while(1);MCS-51单片机系统设计指导书15六、矩阵式键盘应用矩阵键盘识别1. 内容提要:a 矩阵式键盘优点、具体结构、连接方式等。b 单片机 C 语言基础编程应用。2实验目的及要求:a 掌握矩阵式键盘的内部构架以及键盘与单片机之间的连接方式。b 掌握矩阵键盘扫
18、描识别的编程方法。c 掌握 C 语言常用语句如 if、for、switch、while 的具体用法等。3实验源程序及流程图:#include unsigned char key;/按键延时程序void ys()unsigned char aaa,bbb;for(aaa=200;aaa0;aaa-)for(bbb=0;bbb /*头文件*/unsigned char mg=9,ms=8,fg=7,bitdisplay=0; /*定义变量*/*数码管段代码表*/unsigned char Tab=0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0
19、xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00;/*定时中断服务程序*/void timer0 (void) interrupt 1 using 0TH0=0x3c; TL0=0xb0;switch(bitdisplay)case 0:P0=Tabmg;P2=0x7F;break;case 1:P0=Tabms;P2=0xBF;break;case 2:P0=Tabfg;P2=0xDF;break;MCS-51单片机系统设计指导书22bitdisplay+;if(bitdisplay=3)bitdisplay=0;/*主程序*/void main(void)TMOD=0x0
20、1;TH0=0x3c;TL0=0xb0;EA=1; ET0=1; TR0=1;while(1);end4实验步骤:a. 掌握数码管动态扫描的硬件连接方法。弄清程序对动态扫描部分的定义,软件与硬件需相吻合,否则出现乱码或高低位对调。b. 运行以上程序,观察数码管显示情况,正常情况下应能以较慢速度(闪烁态)显示“789” 。5发挥部分:在以上程序基础上,编写一程序,能正确稳定地显示出本人学号(8 位数字,且显示时无闪烁问题)。6.电路原理图:(仅画出三位数码管)0 1 2 5 x T C 7 2 D 0 C e G dm m G MCS-51单片机系统设计指导书23九、单片机串行口应用数码管并行静
21、态显示1. 内容提要:a 串行口基本定义;RXD、TXD 信号实现串行数据发送。b 串行口控制寄存器 SCON 具体定义;中断请求的标志位等。c 74LS164 芯片串行数据转换为并行数据的硬件连接。2实验目的及要求:a 掌握单片机串行口收发数据的全过程。b 掌握串行口控制寄存器 SCON 的具体定义;数据发送过程中中断请求标志位的相应变化;欲发送的数据必须先送入缓冲区等。c 掌握 74LS164 芯片的工作原理、连接方法等。3实验源程序:#include /*数码管代码表(共阳且高位接 a 笔段)*/unsigned char Tab=0x03,0x9F,0x25,0x0D,0x99,0x4
22、9,0x41,0x1F,0x01,0x09,0x11,0xC1,0x63,0x85,0x61,0x71,0xFF;unsigned char mg=5,ms=0,bittime=20;/显示程序/void display(void)TI=0; SBUF=Tabms; while(!TI); TI=0; SBUF=Tabmg; while(!TI);/定时中断服务程序void timer0 (void) interrupt 1 using 0MCS-51单片机系统设计指导书24TH0=0x3c; TL0=0xb0; bittime-;while(bittime=0)bittime=20;disp
23、lay(); /每经一秒调用一次显示程序/主程序void main(void)TMOD=0x01;SCON=0X00;TH0=0x3c;TL0=0xb0;EA=1; ET0=1; TR0=1;while(1);4实验步骤:a. 读懂并理解程序,掌握串行口控制字的定义及子程序调用等相关知识。b. 掌握串行数据转换为并行数据的连接方法及 74LS164 串并转换芯片的具体用法。根据程序定义将单片机串行信号(P3.0/RXD、P3.1/TXD)通过两单芯导线对应连接至 74LS164 的 RXD、TXD 端(电路板内部已连接) ;74LS164 芯片输出的并行信号(Q1Q8)通过拨码开关接至静态数码
24、管笔段中(ah,其中拨码开关的第 8位对应 a 笔段)。c. 运行以上程序,观察两数码管显示情况,正常情况下应能显示“05” 。5发挥部分:通过加入若干语句,对 mg 及 ms 变量进行控制,实现每当一秒钟到来时 mg自动加 1;当 mg10(即经历 10 秒钟)时 mg 自动清零,同时 ms 自动加 1;当ms6(即经历 60 秒)时 ms 自动清零,最终实现标准时间的秒信息显示(mg 及 ms变量通过串行口送出,经转换至数码管显示)。6.电路原理图:0 1 1 22 3 3 44 5 66 7 7 1 2 3 5 6 7 92 1 D E 2 $ 14 h MCS-51单片机系统设计指导书
25、25十、单片机系统设计(一)动态扫描数字钟1. 内容提要:a 单片机软件系统设计。b 单片机硬件接口系统设计。c 单片机 C 语言的综合应用。2实验目的及要求:a 能够系统性地总结掌握的知识,将单元模块知识有机的结合在一起。b 能够充分协调好硬件与软件之间的相互结合,合理设计硬件电路。c 掌握单片机 C 语言判断语句、分支语句以及子程序调用等编程知识。3实验源程序:#include /*头文件*/unsigned char mg=0,ms=0,fg=0,bittime=0,bitdisplay=0; /*定义变量*/*数码管段代码表(共阴且高位对应 a 段)*/unsigned char Ta
26、b=0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00;/*定时中断服务程序*/void timer0 (void) interrupt 1 using 0TH0=0x3c; TL0=0xb0; switch(bitdisplay)case 0:P0=Tabmg;P2=0x7F;break;case 1:P0=Tabms;P2=0xBF;break;case 2:P0=Tabfg;P2=0xDF;break;bitdisplay+;bittime+;if(bitdisplay=
27、3)bitdisplay=0;MCS-51单片机系统设计指导书26/*主程序*/void main(void)TMOD=0x01; TH0=0x3c;TL0=0xb0;EA=1; ET0=1; TR0=1;while(1)if(bittime=20)bittime=0;mg+;4实验步骤:a. 根据程序定义将 P0 口通过 8 芯排线接至数码管动态扫描笔段控制端;P2 口接至位地址端(电路内部已连接,无需连线) 。b. 运行以上程序,观察数码管显示情况,应能以闪烁状显示“000” 、 “001”,直至秒个位出现乱码(由于秒个位 mg 一直在不断地累加,超过 16 后在段代码表中无代码与之对应,
28、故出现乱码)。c. 针对以上情况,请修改程序,最终实现正确稳定地显示小时(两位数)、分钟(两位数)、秒钟(两位数),同时数码管应无闪烁问题。5.电路原理图:(仅画出三位数码管)0 1 2 5 x T C 7 2 D 0 C e G dm m G MCS-51单片机系统设计指导书27十一、单片机系统设计(二)16 路数显竞赛抢答器1. 内容提要:a 单片机软件系统设计。b 单片机硬件接口系统设计。c 单片机 C 语言的综合应用。2实验目的及要求:a 能够系统性地总结掌握的知识,将单元模块知识有机的结合在一起。b 能够充分协调好硬件与软件之间的相互结合,合理设计硬件电路。c 掌握单片机 C 语言判
29、断语句、分支语句以及子程序调用等编程知识。3实验源程序:#include unsigned char key;void main(void)key=0;while(1)P3=0x7f;if(P3!=0x7f)switch(P3)case 0x77:key=7;break;case 0x7b:key=4;break;case 0x7d:key=1;break;case 0x7e:key=0;break;P0=key;MCS-51单片机系统设计指导书28P3=0xbf;if(P3!=0xbf)switch(P3)case 0xb7:key=8;break;case 0xbb:key=5;break
30、;case 0xbd:key=2;break;case 0xbe:key=13;break;P0=key;P3=0xdf;if(P3!=0xdf)switch(P3)case 0xd7:key=9;break;case 0xdb:key=6;break;case 0xdd:key=3;break;case 0xde:key=14;break;P0=key;P3=0xef;if(P3!=0xef)switch(P3)case 0xe7:key=10;break;case 0xeb:key=11;break;case 0xed:key=12;break;case 0xee:key=15;break
31、;P0=key; MCS-51单片机系统设计指导书294实验步骤:a. 弄清 44 矩阵键盘的电路连接。b. 设计程序,使之能够同时为 16 支参赛队提供抢答功能,抢答成功后应能通过数码管显示出参赛队号数,同时点亮发光二极管示意抢答成功。c 加入独立开关,可启动 10 秒倒计时功能,通过数码管显示出倒计时时间(倒计时状态下抢答功能不起作用,反之亦然)。5.电路原理图: 6 D 1 2 3 4 7 2 1 D C 7 6 5 4 3 1 1 K Z 1 3 7 6 0 0 0 0 0 bdefghm D MCS-51单片机系统设计指导书30十二、单片机系统设计(三)数字频率计1. 内容提要:a
32、单片机软件系统设计。b 单片机硬件接口系统设计。c 单片机 C 语言的综合应用。2实验目的及要求:a 能够系统性地总结掌握的知识,将单元模块知识有机的结合在一起。b 能够充分协调好硬件与软件之间的相互结合,合理设计硬件电路。c 掌握单片机 C 语言判断语句、分支语句、子程序调用、定时/计数器应用等编程知识。3实验源程序:#include unsigned char a=0,b=0,c=0,bitdisplay=0,bittime=0;unsigned long digit=0;unsigned char Tab=0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00;void timer0 (void) interrupt 1 using 0TH0=0x3c;TL0=0xb0;bittime+;switch(bitdisplay)case 0:P0=Taba;P2=0x7F;break;case 1:P0=Tabb;P2=0xBF;break;case 2:P0=Tabc;P2=0xDF;break;bitdisplay+;if(bitdisplay=3)bitdisplay=0;