MCS51单片机系统设计指导书Word下载.docx
《MCS51单片机系统设计指导书Word下载.docx》由会员分享,可在线阅读,更多相关《MCS51单片机系统设计指导书Word下载.docx(36页珍藏版)》请在冰豆网上搜索。
提示:
1.由于单片机芯片烧录时需用到P1口,故在烧录过程中P1.5、P1.6、P1.7口不应有导线连接,否则易引起实验台初始化失败等错误(烧录完成后可以进行连接)。
7.C语言编程:
#include<
AT89X51.H>
voidmain(void)
{
while
(1)
{
P0=0x0f;
}
}
二、基本控制语句应用
——简单广告牌霓虹灯设计
a.汇编语言控制语句应用。
b.程序的循环、子程序调用、程序跳转等。
c.单片机基本I/O口的驱动方式、特点等。
a.理解左移RL、右移RR概念。
b.延时程序DELAY的具体执行过程、延时量控制等。
c.掌握通过设置程序的跳转来实现程序循环的方法。
MOVP0,#00H
MOVA,#01H
LOOP:
MOVP0,A
RLA
JMPLOOP
a.读懂程序,分析程序中哪一句为控制语句,起到什么控制作用以及最终能实现何功能。
b.运行程序,观察结果是否与程序一致,分析出现问题的原因所在。
c.试着向源程序中加入延时语句,观察现象是否有所改变。
ACALLDELAY
;
*****延时子程序******;
DELAY:
MOVR2,#10H
LOOP1:
MOVR1,#0FFH
LOOP2:
DJNZR1,LOOP2
DJNZR2,LOOP1
RET
d.适当修改延时量,使LED闪烁更为明显,易于肉眼观察。
e.适当修改程序,使程序最终实现一只LED作流水状移动。
能自左向右——自右向左——自左向右反复循环来控制一只发光管如反弹状移动。
7.C语言编程:
#include<
unsignedchari,c,d,temp=0xfe;
voiddelay(void)
unsignedchara,b;
for(a=0;
a<
255;
a++)
for(b=0;
b<
200;
b++);
for(i=0;
i<
8;
i++)
c=temp<
<
i;
d=temp>
>
(8-i);
P0=c|d;
delay();
三、单片机I/O口输入
——独立按键识别
a.独立式按键的连接。
b.汇编语句对按键的是否按下的具体判断、按键按下后所执行的跳转等。
c.按键抖动对单片机所造成的影响以及如何消除抖动对单片机在执行程序上的影响。
a.掌握JB、CPL语句的具体使用方法。
b.延时程序的具体执行过程、延时量控制等。
c.掌握通过设置程序的跳转来执行相应语句的方法。
d.体会按键抖动对单片机系统所造成的影响,以及如何通过软件延时去抖动方法来消除按键抖动。
*****主程序*****;
MOVP0,#0FFH
MOVA,#0FFH
WAIT:
JBP3.0,WAIT
CPLA
JMPWAIT
a.运行以上程序,同时反复按下连接至P3.0口的独立式轻触开关(平时按键抬起时为高电平,按下按键时为低电平),观察LED发光情况。
由于按键抖动,使LED的亮灭情况无法通过按键准确控制,试着通过前面一节的实验,在程序适当的位置加入延时程序,实现软件去抖动。
(K2应接在P3.0)
sbitkey=P3^0;
unsignedchara=0;
{P0=a;
if(key==0)
a=~a;
四、外部中断应用
——按键计数器
a.单片机中断系统基本功能、中断控制字定义以及外中断触发方式等。
b.中断服务程序入口地址、中断断点及中断返回。
c.按键抖动对中断所造成的影响。
a.理解中断服务程序的入口地址及熟记各中断服务程序入口地址。
b.掌握中断控制字TCON、IE、IP的具体含义及正确定义等。
c.掌握中断服务程序的具体执行过程。
d.体会按键抖动对单片机系统所造成的影响及如何消除按键抖动。
ORG0003H
AJMPDEAL
SETBEA
SETBEX0
SETBIT0
MOVA,#00H
SJMPWAIT
DEAL:
INCA
RETI
a.阅读并理解程序,理解程序第三行的“ORG0003H”及“MAIN”程序中初始化部分的具体含义。
b.运行程序,通过反复按下P3.2独立式按键(INT0),观察LED显示结果。
通过以上实验结果得出:
由于按键抖动,导致P3.2/INT0口频繁出现高低变化的电平,致使单片机多次执行中断服务程序。
能否在程序的适当部分加入延时程序并更改触发方式,成功解决按键抖动问题?
voidint0(void)interrupt0using0
a++;
a=~a;
P0=a;
EA=1;
EX0=1;
IT0=1;
while
(1);
五、数码管显示基础
——数显按键计数器
a.数码管内部结构、引脚定义及驱动。
b.数码管段代码表具体含义。
c.变址寻址在单片机查表中的意义所在。
a.掌握数码管与单片机的连接方法。
b.掌握段代码表的推算及变址寻址的具体含义。
c.掌握判断语句的具体用法。
ORG0030H
SETBEA
MOVR0,#00H
MOVDPTR,#TAB
DISPLAY:
MOVA,R0
MOVCA,@A+DPTR
JMPDISPLAY
INCR0
TAB:
DB0FCH,60H,0DAH,0F2H,66H
DB0B6H,0BEH,0E0H,0FEH,0F6H
DB0EEH,3EH,9CH,7AH,9EH,8EH,00H
a.阅读并理解程序,重点掌握数码管“TAB”段代码表以及段代码表查表过程。
b.根据程序定义,将P0口通过8芯排线连接至静态二位数码管的其中一位(注意将拨码开关拨至断开状态,以免PO口与74LS164输出发生冲突),注意数据高位控制a笔段;
P3.2/INT0端仍接独立式按键。
c.运行以上程序,通过按下按键观察数码管显示情况。
d.解决按键抖动问题,同时分析数码管显示完“F”字符后为何会出现乱码。
使程序实现16进制计数,即按下按键时能从0~9~A~F~0循环显示。
//*************数码管代码表(共阳且高位接a笔段)*************//
unsignedcharTab[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,
0x01,0x09,0x11,0xC1,0x63,0x85,0x61,0x71,0xFF};
P0=Tab[a];
六、矩阵式键盘应用
——矩阵键盘识别
a.矩阵式键盘优点、具体结构、连接方式等。
b.单片机C语言基础编程应用。
a.掌握矩阵式键盘的内部构架以及键盘与单片机之间的连接方式。
b.掌握矩阵键盘扫描识别的编程方法。
c.掌握C语言常用语句如if、for、switch、while的具体用法等。
unsignedcharkey;
//按键延时程序
voidys()
{unsignedcharaaa,bbb;
for(aaa=200;
aaa>
0;
aaa--)
for(bbb=0;
bbb<
bbb++);
{key=0;
P3=0x7f;
if(P3!
=0x7f)
ys();
switch(P3)
{case0x77:
key=7;
break;
case0x7b:
key=4;
case0x7d:
key=1;
case0x7e:
key=0;
P0=~key;
P3=0xbf;
=0xbf)
{case0xb7:
key=8;
case0xbb:
key=5;
case0xbd:
key=2;
case0xbe:
key=13;
P3=0xdf;
=0xdf)
{case0xd7:
key=9;
case0xdb:
key=6;
case0xdd:
key=3;
case0xde:
key=14;
P3=0xef;
=0xef)
{case0xe7:
key=10;
case0xeb:
key=11;
case0xed:
key=12;
case0xee:
key=15;
}
a.理解矩阵键盘的结构及硬件连接。
b.运行程序,按下4×
4键盘上的按键,观察P0口的LED显示情况。
发挥部分:
通过加入数码管段代码表,使键值能通过数码管显示出来,依次对应0~9~A~F。
C语言中数码管段代码表可参考如下(共阴数码管,高位接a笔段):
unsignedcharTab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,
0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00};
如要将key值通过查表赋予P0,可直接定义为:
P0=Tab[key]。
6.电路原理图(实际电路板中的键盘行与列接P3口):
发挥部分原理图(实际电路板中的键盘行与列接P3口):
七、单片机定时/计数器
——秒脉冲定时器
a.定时/计数器控制字定义。
c.单片机定时时长计算方法、间接定时获取长时间定时方法。
b.掌握定时/计数控制字TMOD、TCON的具体含义及正确定义等。
c.掌握不同工作方式下定时时间初值的具体算法。
LJMPMAIN
ORG000BH
LJMPINTT0
MOVTMOD,#01H
MOVTL0,#0B0H
MOVTH0,#3CH
SETBET0
SETBTR0
SJMP$
INTT0:
MOVTL0,#0B0H
CPLP1.0
RETI
END
a.运行以上程序,观察P1.0口的LED闪烁情况。
精确定义一秒钟时间,并结合前面学过的知识,能通过数码管显示出秒钟的个位信息(注意秒钟个位为十进制)(结合实验五电路图连接)。
八、单片机显示初步
——数码管动态扫描
a.人眼有视觉暂留效应。
b.数码管动态扫描的硬件连接特点。
c.单片机C语言的具体应用。
a.通过实验体会人眼的视觉暂留效应,通过实践得出八位数码管动态扫描的时间间隔大于多少会产生闪烁问题。
b.掌握定时/计数控制字TMOD、TCON的具体含义;
不同工作方式下定时时间初值的具体算法等。
c.掌握数码管动态扫描的硬件连接。
3.实验源程序:
//******头文件*******//
unsignedcharmg=9,ms=8,fg=7,bitdisplay=0;
//***定义变量***//
//****************数码管段代码表****************//
0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00};
//*********定时中断服务程序**********//
voidtimer0(void)interrupt1using0
TH0=0x3c;
TL0=0xb0;
switch(bitdisplay)
case0:
P0=Tab[mg];
P2=0x7F;
case1:
P0=Tab[ms];
P2=0xBF;
case2:
P0=Tab[fg];
P2=0xDF;
bitdisplay++;
if(bitdisplay==3){bitdisplay=0;
//*********主程序**********//
TMOD=0x01;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
while
(1);
a.掌握数码管动态扫描的硬件连接方法。
弄清程序对动态扫描部分的定义,软件与硬件需相吻合,否则出现乱码或高低位对调。
b.运行以上程序,观察数码管显示情况,正常情况下应能以较慢速度(闪烁态)显示“789”。
在以上程序基础上,编写一程序,能正确稳定地显示出本人学号(8位数字,且显示时无闪烁问题)。
(仅画出三位数码管)
九、单片机串行口应用
——数码管并行静态显示
a.串行口基本定义;
RXD、TXD信号实现串行数据发送。
b.串行口控制寄存器SCON具体定义;
中断请求的标志位等。
c.74LS164芯片串行数据转换为并行数据的硬件连接。
a.掌握单片机串行口收发数据的全过程。
b.掌握串行口控制寄存器SCON的具体定义;
数据发送过程中中断请求标志位的相应变化;
欲发送的数据必须先送入缓冲区等。
c.掌握74LS164芯片的工作原理、连接方法等。
unsignedcharmg=5,ms=0,bittime=20;
//显示程序//
voiddisplay(void)
TI=0;
SBUF=Tab[ms];
while(!
TI);
SBUF=Tab[mg];
//定时中断服务程序
TH0=0x3c;
bittime--;
while(bittime==0)
bittime=20;
display();
//每经一秒调用一次显示程序
//主程序
TMOD=0x01;
SCON=0X00;
a.读懂并理解程序,掌握串行口控制字的定义及子程序调用等相关知识。
b.掌握串行数据转换为并行数据的连接方法及74LS164串并转换芯片的具体用法。
根据程序定义将单片机串行信号(P3.0/RXD、P3.1/TXD)通过两单芯导线对应连接至74LS164的RXD、TXD端(电路板内部已连接);
74LS164芯片输出的并行信号(Q1~Q8)通过拨码开关接至静态数码管笔段中(a~h,其中拨码开关的第8位对应a笔段)。
c.运行以上程序,观察两数码管显示情况,正常情况下应能显示“05”。
通过加入若干语句,对mg及ms变量进行控制,实现每当一秒钟到来时mg自动加1;
当mg=10(即经历10秒钟)时mg自动清零,同时ms自动加1;
当ms=6(即经历60秒)时ms自动清零,最终实现标准时间的秒信息显示(mg及ms变量通过串行口送出,经转换至数码管显示)。
十、单片机系统设计
(一)
——动态扫描数字钟
a.单片机软件系统设计。
b.单片机硬件接口系统设计。
c.单片机C语言的综合应用。
a.能够系统性地总结掌握的知识,将单元模块知识有机的结合在一起。
b.能够充分协调好硬件与软件之间的相互结合,合理设计硬件电路。
c.掌握单片机C语言判断语句、分支语句以及子程序调用等编程知识。
unsignedcharmg=0,ms=0,fg=0,bittime=0,bitdisplay=0;
//*定义变量*//
//***************数码管段代码表(共阴且高位对应a段)****************//
switch(bitdisplay)
case0:
case1:
case2:
bitdisplay++;
b