1、 一、 单片机开发系统应用初步 ——基础I/O口赋值 1. 内容提要: a. KEIL C软件对程序进行编译调试及烧录软件使用方法。 b. 单片机基础I/O口驱动方法、特点等。 c. 汇编语句基础使用方法;对基础I/O口赋值方法;程序具体步骤等。 2.试验目标及要求: a. 课前预习好编程基础知识。程序基础概念、*.asm、*.c、*.hex、*.uv2所表示文件类型等。 b. 熟练掌握不一样数据类型之间相互转换,不一样类型数据在程序中表示方法等。 c. 课前搞清楚单片机I/O口基础驱动方法,了解
2、何谓上拉及下拉方法,单片机驱动电流、灌入电流等概念。 d. 复习数码管相关知识,搞清数码管需显示某个字符应怎样对其进行控制等。 对P0口赋值 跳转至主程序 开始 结束 3.试验源程序及步骤图: ORG 0000H AJMP MAIN MAIN: MOV P0,#0FH JMP MAIN END 4.试验步骤: a. 经过读程序,弄懂程序对哪个口进行赋初值,经过发光管亮或灭情况反应出单片机输出数据情况(注意区分数据高低位)。 b. 经过KEIL C软件对以上程序进行编译,正确后生成*.HEX机器语言文件,随即
3、打开烧录软件,将生成*.HEX文件烧录到单片机芯片中,完成后点击运行按钮便可脱机运行编写好程序。 c. 观察发光管亮灭情况,最终得出硬件实际连接情况。 d. 修改程序中输出数据,反复以上编译烧录步骤,再次观察LED发光情况是 否和数据对应。例: ORG 0000H AJMP MAIN MAIN: MOV P0,#65H JMP MAIN END e. 修改单片机输出数据I/O口(如改为P2口输出),观察其它口是否能正确输出数据。例: ORG 0000H AJMP MAIN MA
4、IN: MOV P2,#0FH
JMP MAIN
END
5.发挥部分:
将I/O口经过8芯排线接至独立两位数码管处,经过I/O口赋值能使数码管显示出本人学号最终一位(注意数据高位统一用来控制数码管a笔段,低位控制h笔段)。
6. 电路原理图:
提醒:
1. 因为单片机芯片烧录时需用到P1口,故在烧录过程中P1.5、P1.6、P1.7口不应有导线连接,不然易引发试验台初始化失败等错误(烧录完成后能够进行连接)。
7.C语言编程:
#include
5、1) { P0=0x0f; } } 二、基础控制语句应用 ——简单广告牌霓虹灯设计 1. 内容提要: a. 汇编语言控制语句应用。 b. 程序循环、子程序调用、程序跳转等。 c. 单片机基础I/O口驱动方法、特点等。 2.试验目标及要求: a. 了解左移RL、右移RR概念。 b. 延时程序DELAY具体实施过程、延时量控制等。 c. 掌握经过设置程序跳转来实现程序循环方法。 开始 P0及累
6、加器A初始化化 A内容给予P0 A内容左移 跳转至LOOP 结束 3.试验源程序及步骤图: ORG 0000H AJMP MAIN MAIN: MOV P0,#00H MOV A,#01H LOOP: MOV P0,A RL A JMP LOOP END 4.试验步骤: a. 读懂程序,分析程序中哪一句为控制语句,起到什么控制作用和最终能实现何功效。 b. 运行程序,观察结果是否和程序一致,分析出现问题原因所在。 c. 试着向源程序中加入延时语句,观察现象是否有所改变。
7、 ORG 0000H AJMP MAIN MAIN: MOV P0,#00H MOV A,#01H LOOP: MOV P0,A RL A ACALL DELAY JMP LOOP ;*****延时子程序******; DELAY:MOV R2,#10H LOOP1:MOV R1,#0FFH LOOP2:DJNZ R1,LOOP2 DJNZ R2,LOOP1 RET END d. 合适修改延时量,使LED闪烁更为显著,易于肉眼观察。 e. 合适修改程序,使
8、程序最终实现一只LED作流水状移动。
5.发挥部分:
能自左向右——自右向左——自左向右反复循环来控制一只发光管如反弹状移动。
6. 电路原理图:
7. C语言编程:
#include
9、i<8;i++) { c=temp<>(8-i); P0=c|d; delay(); } } } 三、单片机I/O口输入 ——独立按键识别 1. 内容提要: a. 独立式按键连接。 b. 汇编语句对按键是否按下具体判定、按键按下后所实施跳转等。 c. 按键抖动对单片机所造成影响和怎样消除抖动
10、对单片机在实施程序上影响。 2.试验目标及要求: a. 掌握JB、CPL语句具体使用方法。 b. 延时程序具体实施过程、延时量控制等。 c. 掌握经过设置程序跳转来实施对应语句方法。 开始 P0及累加器A初始化化 A内容给予P0 判定是否有键按下 结束 对A取反 N Y d. 体会按键抖动对单片机系统所造成影响,和怎样经过软件延时去抖动方法来消除按键抖动。 3.试验源程序及步骤图: ORG 0000H AJMP MAIN ;*****主程序*****; MAIN: MOV P0,#0FFH MOV A,#0FFH WA
11、IT: MOV P0,A
JB P3.0,WAIT
CPL A
JMP WAIT
END
4.试验步骤:
a. 运行以上程序,同时反复按下连接至P3.0口独立式轻触开关(平时按键抬起时为高电平,按下按键时为低电平),观察LED发光情况。
5.发挥部分:
因为按键抖动,使LED亮灭情况无法经过按键正确控制,试着经过前面一节试验,在程序合适位置加入延时程序,实现软件去抖动。
6. 电路原理图:(K2应接在P3.0)
7. C语言编程:
#include
12、P3^0; unsigned char a=0; void main(void) { while(1) {P0=a; if(key==0) { a=~a; } } } 四、外部中止应用 ——按键计数器 1. 内容提要: a. 单片机中止系统基础功效、中止控制字定义和外中止触发方法等。 b. 中止服务程序入口地址、中止断点及中止返回。 c. 按键抖动对中止所造成影响。 2.试验目标及要求: a. 了解中止服务程序入口地址及熟记各中止服务程序
13、入口地址。 b. 掌握中止控制字TCON、IE、IP具体含义及正确定义等。 c. 掌握中止服务程序具体实施过程。 d. 体会按键抖动对单片机系统所造成影响及怎样消除按键抖动。 开始 外中止及数据初始化化 死循环 判定是否有中止 结束 对A累加计数 N Y 3.试验源程序及步骤图: ORG 0000H AJMP MAIN ORG 0003H AJMP DEAL MAIN:SETB EA SETB EX0 SETB IT0 MOV A,#00H MOV P0,#0FFH W
14、AIT:SJMP WAIT DEAL:INC A CPL A MOV P0,A CPL A RETI END 4.试验步骤: a. 阅读并了解程序,了解程序第三行“ORG 0003H”及“MAIN”程序中初始化部分具体含义。 b. 运行程序,经过反复按下P3.2独立式按键(INT0),观察LED显示结果。 5.发挥部分: 经过以上试验结果得出:因为按键抖动,造成P3.2/INT0口频繁出现高低改变电平,致使单片机数次实施中止服务程序。能否在程序合适部分加入延时程序并更改触发方法,成功处理按键抖动问题?
15、
6. 电路原理图:
7. C语言编程:
#include
16、体含义。 c. 变址寻址在单片机查表中意义所在。 2.试验目标及要求: a. 掌握数码管和单片机连接方法。 b. 掌握段代码表推算及变址寻址具体含义。 c. 掌握判定语句具体使用方法。 开始 外中止及数据初始化化 循环显示R0内容 判定是否有中止 结束 对R0累加计数 N Y 3.试验源程序及步骤图: ORG 0000H AJMP MAIN ORG 0003H AJMP DEAL ORG 0030H MAIN: SETB EA SETB EX0
17、 SETB IT0 MOV P0,#00H MOV R0,#00H MOV DPTR,#TAB DISPLAY:MOV A,R0 MOVC A,@A+DPTR MOV P0,A JMP DISPLAY DEAL: INC R0 RETI TAB: DB 0FCH,60H,0DAH,0F2H,66H DB 0B6H,0BEH,0E0H,0FEH,0F6H DB 0EEH,3EH,9CH,7AH,9
18、EH,8EH,00H END 4.试验步骤: a. 阅读并了解程序,关键掌握数码管“TAB”段代码表和段代码表查表过程。 b. 依据程序定义,将P0口经过8芯排线连接至静态二位数码管其中一位(注意将拨码开关拨至断开状态,以免PO口和74LS164输出发生冲突),注意数据高位控制a笔段;P3.2/INT0端仍接独立式按键。 c. 运行以上程序,经过按下按键观察数码管显示情况。 d. 处理按键抖动问题,同时分析数码管显示完“F”字符后为何会出现乱码。 5.发挥部分: 使程序实现16进制计数,即按下按键时能从0~9~A~F~0循环显示。 6. 电
19、路原理图:
7. C语言编程:
#include
20、P0=Tab[a]; } void main(void) { EA=1;EX0=1;IT0=1; while(1); } 六、矩阵式键盘应用 ——矩阵键盘识别 1. 内容提要: a. 矩阵式键盘优点、具体结构、连接方法等。 b. 单片机C语言基础编程应用。 2.试验目标及要求: a. 掌握矩阵式键盘内部构架和键盘和单片机之间连接方法。 b. 掌握矩阵键盘扫描识别编程方法。 c. 掌握C语
21、言常见语句如if、for、switch、while具体使用方法等。
开始
初始化
各列线循环置低电平
判定P3口数据是否改变
结束
进入Switch得出最终键值
N
Y
3.试验源程序及步骤图:
#include
22、e(1) { P3=0x7f; if(P3!=0x7f) { ys(); 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; } } P3=0xbf; if(P3!=0xbf) { ys(); if(P
23、3!=0xbf) { switch(P3) {case 0xb7:key=8;break; case 0xbb:key=5;break; case 0xbd:key=2;break; case 0xbe:key=13;break; } P0=~key; } } P3=0xdf; if(P3!=0xdf) { ys(); if(P3!=0xdf) { switch(P3) {case 0xd7:key=9;break;
24、 case 0xdb:key=6;break; case 0xdd:key=3;break; case 0xde:key=14;break; } P0=~key; } } P3=0xef; if(P3!=0xef) { ys(); if(P3!=0xef) { switch(P3) {case 0xe7:key=10;break; case 0xeb:key=11;break; case 0xed:key=12
25、break; case 0xee:key=15;break; } P0=~key; } } } } 4.试验步骤: a. 了解矩阵键盘结构及硬件连接。 b. 运行程序,按下4×4键盘上按键,观察P0口LED显示情况。 5.发挥部分: 发挥部分:经过加入数码管段代码表,使键值能经过数码管显示出来,依次对应0~9~A~F。C语言中数码管段代码表可参考以下(共阴数码管,高位接a笔段): unsigned char Tab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0
26、xE0, 0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00}; 如要将key值经过查表给予P0,可直接定义为:P0=Tab[key]。 6. 电路原理图(实际电路板中键盘行和列接P3口): 发挥部分原理图(实际电路板中键盘行和列接P3口): 七、单片机定时/计数器 ——秒脉冲定时器 1. 内容提要: a. 定时/计数器控制字定义。 b. 中止服务程序入口
27、地址、中止断点及中止返回。 c. 单片机定时时长计算方法、间接定时获取长时间定时方法。 2.试验目标及要求: a. 了解中止服务程序入口地址及熟记各中止服务程序入口地址。 b. 掌握定时/计数控制字TMOD、TCON具体含义及正确定义等。 c. 掌握不一样工作方法下定时时间初值具体算法。 开始 系统初始化 进入死循环 有没有定时中止请求 结束 进入中止重装值并对P1.0取反 N Y 3.试验源程序及步骤图: ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 MAIN: MOV TMOD,#01H
28、 MOV TL0,#0B0H MOV TH0,#3CH SETB EA SETB ET0 SETB TR0 SJMP $ INTT0: MOV TL0,#0B0H MOV TH0,#3CH CPL P1.0 RETI END 4.试验步骤: a. 运行以上程序,观察P1.0口LED闪烁情况。 5.发挥部分: 正确定义一秒钟时间,并结合前面学过知识,能经过数码管显示出秒钟个位信息(注意秒钟个位为十进制)(结合试验五电路图连接)。 6. 电路原理图: 八、
29、单片机显示初步
——数码管动态扫描
1. 内容提要:
a. 人眼有视觉暂留效应。
b. 数码管动态扫描硬件连接特点。
c. 单片机C语言具体应用。
2.试验目标及要求:
a. 经过试验体会人眼视觉暂留效应,经过实践得出八位数码管动态扫描时间间隔大于多少会产生闪烁问题。
b. 掌握定时/计数控制字TMOD、TCON具体含义;不一样工作方法下定时时间初值具体算法等。
c. 掌握数码管动态扫描硬件连接。
3.试验源程序:
#include
30、// unsigned char mg=9,ms=8,fg=7,bitdisplay=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 usin
31、g 0 { TH0=0x3c; TL0=0xb0; switch(bitdisplay) { case 0:P0=Tab[mg];P2=0x7F;break; case 1:P0=Tab[ms];P2=0xBF;break; case 2:P0=Tab[fg];P2=0xDF;break; } bitdisplay++; if(bitdisplay==3){bitdisplay=0;} } //*********主程序**********// void main(void) { TMOD=0x01;TH0=0x3c;TL0=0xb0; EA=1; ET0=1;
32、TR0=1; while(1); } 4.试验步骤: a. 掌握数码管动态扫描硬件连接方法。搞清程序对动态扫描部分定义,软件和硬件需相吻合,不然出现乱码或高低位对调。 b. 运行以上程序,观察数码管显示情况,正常情况下应能以较慢速度(闪烁态)显示“789”。 5.发挥部分: 在以上程序基础上,编写一程序,能正确稳定地显示出本人学号(8位数字,且显示时无闪烁问题)。 6. 电路原理图:(仅画出三位数码管) 九、单片机串行口应用 ——数码管并行静态显示 1. 内容提
33、要:
a. 串行口基础定义;RXD、TXD信号实现串行数据发送。
b. 串行口控制寄存器SCON具体定义;中止请求标志位等。
c. 74LS164芯片串行数据转换为并行数据硬件连接。
2.试验目标及要求:
a. 掌握单片机串行口收发数据全过程。
b. 掌握串行口控制寄存器SCON具体定义;数据发送过程中中止请求标志位对应改变;欲发送数据必需先送入缓冲区等。
c. 掌握74LS164芯片工作原理、连接方法等。
3.试验源程序:
#include
34、 unsigned char Tab[]={0x03,0x9F,0x25,0x0D,0x99,0x49,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=Tab[ms]; while(!TI); TI=0; SBUF=Tab[mg]; while(!TI); } //定时中止服务程序 void
35、timer0 (void) interrupt 1 using 0 { TH0=0x3c; TL0=0xb0; bittime--; while(bittime==0) { bittime=20;display(); //每经一秒调用一次显示程序 } } //主程序 void main(void) { TMOD=0x01;SCON=0X00; TH0=0x3c;TL0=0xb0; EA=1; ET0=1; TR0=1; while(1); } 4.试验步骤: a. 读懂并了解程序,掌握串行口控制字定义及子程序调用等相关知识。 b.
36、 掌握串行数据转换为并行数据连接方法及74LS164串并转换芯片具体使用方法。依据程序定义将单片机串行信号(P3.0/RXD、P3.1/TXD)经过两单芯导线对应连接至74LS164RXD、TXD端(电路板内部已连接);74LS164芯片输出并行信号(Q1~Q8)经过拨码开关接至静态数码管笔段中(a~h,其中拨码开关第8位对应a笔段)。 c. 运行以上程序,观察两数码管显示情况,正常情况下应能显示“05”。 5.发挥部分: 经过加入若干语句,对mg及ms变量进行控制,实现每当一秒钟到来时mg自动加1;当mg=10(即经历10秒钟)时mg自动清零,同时ms自动加1;当ms=6(即经历
37、60秒)时ms自动清零,最终实现标按时间秒信息显示(mg及ms变量经过串行口送出,经转换至数码管显示)。 6. 电路原理图: 十、单片机系统设计(一) ——动态扫描数字钟 1. 内容提要: a. 单片机软件系统设计。 b. 单片机硬件接口系统设计。 c. 单片机C语言综合应用。 2.试验目标及要求: a. 能够系统性地总结掌握知识,将单元模块知识有机结合在一起。 b. 能够充足协调好硬件和软件之间相互结合,合理设计硬件电路。 c. 掌握单片机C语言判定语句、分支语句和子程序调用等编程知识
38、
3.试验源程序:
#include
39、0x9E,0x8E,0x00}; //*********定时中止服务程序**********// void timer0 (void) interrupt 1 using 0 { TH0=0x3c; TL0=0xb0; switch(bitdisplay) { case 0:P0=Tab[mg];P2=0x7F;break; case 1:P0=Tab[ms];P2=0xBF;break; case 2:P0=Tab[fg];P2=0xDF;break; } bitdisplay++;bittime++; if(bitdisplay==3
40、){bitdisplay=0;} } //*********主程序**********// 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”,直至秒个
41、位出现乱码(因为秒个位mg一直在不停地累加,超出16后在段代码表中无代码和之对应,故出现乱码)。 c. 针对以上情况,请修改程序,最终实现正确稳定地显示小时(两位数)、分钟(两位数)、秒钟(两位数),同时数码管应无闪烁问题。 5. 电路原理图:(仅画出三位数码管) 十一、单片机系统设计(二) ——16路数显竞赛抢答器 1. 内容提要: a. 单片机软件系统设计。 b. 单片机硬件接口系统设计。 c. 单片机C语言综合应用。 2.试验目标及要求: a. 能够系统性地总结掌握知识
42、将单元模块知识有机结合在一起。
b. 能够充足协调好硬件和软件之间相互结合,合理设计硬件电路。
c. 掌握单片机C语言判定语句、分支语句和子程序调用等编程知识。
3.试验源程序:
#include
43、 case 0x7d:key=1;break; case 0x7e:key=0;break; } P0=~key; } P3=0xbf; if(P3!=0xbf) { switch(P3) {case 0xb7:key=8;break; case 0xbb:key=5;break; case 0xbd:key=2;break; case 0xbe:key=13;break; } P0=~key; } P
44、3=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:k
45、ey=11;break; case 0xed:key=12;break; case 0xee:key=15;break; } P0=~key; } } } 4.试验步骤: a. 搞清4×4矩阵键盘电路连接。 b. 设计程序,使之能够同时为16支参赛队提供抢答功效,抢答成功后应能经过数码管显示出参赛队号数,同时点亮发光二极管示意抢答成功。 c. 加入独立开关,可开启10秒倒计时功效,经过数码管显示出倒计时时间(倒计时状态下抢答功效不起作用,反之亦然)。 5. 电路原理图:
46、
十二、单片机系统设计(三)
——数字频率计
1. 内容提要:
a. 单片机软件系统设计。
b. 单片机硬件接口系统设计。
c. 单片机C语言综合应用。
2.试验目标及要求:
a. 能够系统性地总结掌握知识,将单元模块知识有机结合在一起。
b. 能够充足协调好硬件和软件之间相互结合,合理设计硬件电路。
c. 掌握单片机C语言判定语句、分支语句、子程序调用、定时/计数器应用等编程知识。
3.试验源程序:
#include 47、9X51.H>
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 0
{
TH0=0x3c;TL0=0xb0;bittime++;
s 48、witch(bitdisplay)
{
case 0:P0=Tab[a];P2=0x7F;break;
case 1:P0=Tab[b];P2=0xBF;break;
case 2:P0=Tab[c];P2=0xDF;break;
}
bitdisplay++;
if(bitdisplay==3){bitdisplay=0;}
}
void main(void)
{
TMOD=0x51;TH0=0x3c;TL0=0xb0;
IP=0x02; //定时器0优先级高
EA=1;TR0=1;TR1=1;ET0=1;ET1=1;TH1=0;T 49、L1=0;
while(1)
{
if(bittime==20)
{
digit=TH1*256+TL1;
c=digit/100;
b=digit%100/10;
a=digit%10;
TH1=0;TL1=0;bittime=0;
}
}
}
4.试验步骤:
a. 读懂程序,依据程序定义将频率产生器跳线接通,从而将方波引至单片机计数器T1输入端P3.5/T1。
b. 运行以上程序,正常情况下数码管应有三位数显示,此显示值便是目前输入方波频率低三位,其中百位为乱码(已超出段代码表范围)。
c. 依据 50、以上情况,编写一完整程序,能够正确显示出5位数频率值(需处理数码管闪烁问题)。
5. 电路原理图:
十三、单片机系统设计(四)
——16音电子琴
1. 内容提要:
a. 单片机软件系统设计。
b. 单片机键盘硬件接口系统设计。
c. 单片机C语言综合应用。
2.试验目标及要求:
a. 能够系统性地总结掌握知识,将单元模块知识有机结合在一起。
b. 能够充足协调好硬件和软件之间相互结合,合理设计硬件电路。
c. 掌握单片机C语言判定语句、分支语句、子程序调用、定时/






