学生DIY单片机实验手册.docx

上传人:b****8 文档编号:23663071 上传时间:2023-05-19 格式:DOCX 页数:24 大小:334.47KB
下载 相关 举报
学生DIY单片机实验手册.docx_第1页
第1页 / 共24页
学生DIY单片机实验手册.docx_第2页
第2页 / 共24页
学生DIY单片机实验手册.docx_第3页
第3页 / 共24页
学生DIY单片机实验手册.docx_第4页
第4页 / 共24页
学生DIY单片机实验手册.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

学生DIY单片机实验手册.docx

《学生DIY单片机实验手册.docx》由会员分享,可在线阅读,更多相关《学生DIY单片机实验手册.docx(24页珍藏版)》请在冰豆网上搜索。

学生DIY单片机实验手册.docx

学生DIY单片机实验手册

一.STC89C51单片机实验开发板套件元件清单

元件个数

元件名称

原理图上的标号

单价

1

DIP40插座

U1

0.5

1

DIP16插座

U2

0.5

9

1K电阻

R10(8个),R1

0.5

2

三极管PNP(8550)

Q1,Q2

0.6

1

10uf电解电容(有正负之分)

C3

0.3

2

30PF陶瓷电容

C1,C2

0.2

1

发光二极管(有正负之分)

L1

0.4

1

晶振(11.0592MHZ)

11.0592

1

1

电源开关

S1

1

1

电源座

+5V输入

1

1

10K9脚排阻

R20

1

19

10K电阻

R4,R3,,R30(8个)R5R6

1

4

104陶瓷电容

C4,C5,C6,C7

1

1

DS18B20(温度传感器)

9

18

按键

KEY1到KEY17,REST

5

1

串口下载线

5

1

5v开关电源

14

1

面包板

12

1

STC89C51

U1

12

2

7段数码管(共阳极)

LED1,LED2,LED3

4.5

1

MAX232

U2

4..5

注意:

在焊板子时,由于我们采用的是面包板,元件的焊接位置需要大家自己布局,在焊元件时,先看一下原理图上有那些几元件,在脑海里有一个大体上的布局,避免将来放的元件太密,或者说放的太运,导致了无法连线,或者有些元件在面包板上放不下.

第一步先焊接单片机最小系统:

什么是单片机最小系统?

单片机最小系统就是:

有单片机,晶振,复位电路,EA引脚接高电平,即组成单片机最小系统

1、电源:

这当然是必不可少的了。

单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。

(如下图所示)

2、振蒎电路:

单片机是一种时序电路,必须提供脉冲信号才能正常工作,将晶体振荡器,接单片机18、19脚。

(如下图所示)

3、复位引脚:

按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。

4、EA引脚:

EA引脚接到正电源端。

至此,一个单片机就接好,通上电,单片机就开始工作了。

 

按照原理图,

1).将DIP40座焊好,DIP40座是用来插51单片机,焊它方便将来的调试和维修,这个元件尽可能的放在面包板的中央.

2)再焊晶振,和C1,C2,这是单片机的振荡电路,也是单片机的心脏,只它的可靠的启振,单片机才能工作。

焊接晶振时,其位置尽可能的靠近单片机,不要离的太远,否则单片机容易收到干扰有可能工作的不可靠。

3)焊接复位电路,就是C3,RST,R5组成,焊接时要注意C3是一个10UF的电解电容,有正负之分,电解的长脚为正,短脚为负。

4)焊接电源座和电源开关,并单片机的20脚的地和电源座连好,单片机40脚连到+5V上,同样复位电路也要连接+5V,地;振荡电路有个地要连。

程序

实验一闪烁灯

1).实验任务

学习一下,如何用单片机通过程序来控制一个端口!

从P2.7端口经过了一个限流电阻接一个发光二极管L1,使L1不停地一亮一灭,一亮一灭的时间间隔为0.2秒。

重点是学习程序的编写思路,看一下程序是如何将课堂上所学到的指令综合运用起来。

2).电路原理图

程序设计内容

在编程序以前先给大家讲一下延时程序:

(1).延时程序的设计方法

作为单片机的指令的执行的时间是很短,一条指令的运行速度能达到微秒级,(所谓指令运行速度与外接晶振有关)因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?

下面具体介绍其原理:

如下图所示,我们实际用的石英晶体为11。

0592MHz,(之所以用它是为了方便串口波特率计算准确)但为了计算方便我们暂且按12M晶振来计算,因些,1个机器周期为1微秒

因此,上面的延时程序时间为10.002ms。

由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。

如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:

DELAY:

MOVR5,#20

D1:

MOVR6,#20

D2:

MOVR7,#248

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

(2).输出控制

如原理图所示,当P2.7端口输出低电平,即P2.7=0时,根据发光二极管的单向导电性可知,这时发光二极管LED1亮;当P2.7端口输出高电平,即P2.7=1时,发光二极管LED1熄灭;我们可以使用SETBP1.0指令使P1.0端口输出高电平,使用CLRP1.0指令使P1.0端口输出低电平。

5).程序框图

图4.1.2

6).汇编源程序

ORG0000H

AJMPSTART

START:

CLRP2.7;关闭P2.7,使P2.7=0;

LCALLDELAY;延时子程序,延时0.2秒

SETBP0.0;开启P2.7,使P2.7=1;

LCALLDELAY

LJMPSTART

DELAY:

MOVR5,#20;延时子程序,延时0.2秒

D1:

MOVR6,#20

D2:

MOVR7,#248

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

END

7).C语言源程序

#include

#include

#defineport_P2P2

sbitL1=P2^7;

/*延时t毫秒*/

voiddelay02s(unsignedintt)//***精典模块,建议日后开发直接引用

{

unsignedinti;

while(t--)

{

/*对于12M时钟,约延时1ms*/

for(i=0;i<125;i++)

{}

}

}

voidmain(void)

{

port_P2=0;

while

(1)

{

port_P2=0;;关闭P2.7,使P2.7=0;

delay02s(200);;延时子程序,延时0.2秒

L1=1;;开启P2.7,使P2.7=1;

delay02s(200);;延时子程序,延时0.2秒

}

}

实验二LED共阳极数码管静态显示驱动

1.实验任务

利用51单片机的P0端口的P0.0-P0.7连接到一个共阳极数码管的a-g的笔段上,数码管的公共端经三极管接到+5V。

在数码管上循环显示0-9数字,时间间隔0.2秒。

学习重点是程序的编写思路和7段数码驱动原理。

希望通过这个程序大家能理解MOVCA,@A+DPTR,怎么样使用!

2.电路原理图

3.系统板上硬件连线

1)在实验一的基础上,先焊排阻,排阻就将8个电阻电绑定在一个陶瓷片中,引出了9个脚,一个共公脚,和8个电阻脚。

再焊8个限流电阻.后焊七段LED数码

4.程序设计内容

1)LED数码显示原理

七段LED数码内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。

LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码,下面给出共阳极的字形码见下表

“0”0C0H;

“1”0F9H,

“2”0A4H,

“3”0B0H,

“4”99H,

“5”92H,

“6”82H,

“7”0F8H,

“8”80H,

“9”90H

由于显示的数字0-9的字形码没有规律可循,只能采用查表的方式来完成我们所需的要求了。

这样我们按着数字0-9的顺序,把每个数字的笔段代码按顺序排好!

建立的表格如下所示:

TABLE:

DB0C0H;0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

2)在七段LED数码的COM口(也称为公共口),接了一个PNP三极管Q1,当PNP三极管Q1的基极加高电时,则PNP三极管Q1,CE结是不导通的;当PNP三极管Q1的基极加低电时,则PNP三极管Q1,CE结是导通的.

5.程序框图

图5.2

6.汇编源程序

ORG0

START:

MOVR1,#00H

CLRP2.0;将控制LED1的三极管Q1打开,也就是使其导通

NEXT:

MOVA,R1

MOVDPTR,#TABLE;将表格的首地址送到DPTR指钟中,

MOVCA,@A+DPTR;表格的首地址+累加器的内容,得到了一地址,然后从这个地址取出

MOVP0,A;将取出的数送到P0口上,也就是送到了LED显示

LCALLDELAY

INCR1;地址加1

CJNER1,#10,NEXT;判断0----9字形码是否送完,不完继续从表中取数/

LJMPSTART

DELAY:

MOVR5,#20

D2:

MOVR6,#20

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

DJNZR5,D2

RET

TABLE:

DB0C0H;0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

7.C语言源程序

#include

unsignedcharcodetable[]=

{0XC0H;0XF9H,0XA4H,0XB0H,0X99H,0X92H,0X82H,0XF8H,0X80H,0X90H};

unsignedchardispcount;

sbitled1_bit=p2^2;

voiddelay02s(void)

{

unsignedchari,j,k;

for(i=20;i>0;i--)

for(j=20;j>0;j--)

for(k=248;k>0;k--);

}

voidmain(void)

{

led1_bit=0;

while

(1)

{

for(dispcount=0;dispcount<10;dispcount++)

{

P0=table[dispcount];

delay02s();

}

}

}

实验三00-99计数器(LED数码管动态显示技术)

1.实验任务

利用51单片机来制作一个手动计数器,在51单片机的P2.3管脚接一个按键,作为手动计数的按钮,用单片机的P2.0控制一个共阳数码管,作为00-99计数的个位数显示,用单片机的P2.1控制一个共阳数码管,作为00-99计数的十位数显示;

学习重点是什么是动态显示?

什么是静态显示?

如何检测按键?

2.电路原理图

3.系统板上硬件连线

4.程序设计内容

(1.单片机对按键的识别的过程处理

(2.单片机对正确识别的按键进行计数,计数满时,又从零开始计数;

在此了解一下按键为什么要去抖动。

(3.单片机对计的数值要进行数码显示,计得的数是十进数,含有十位和个位,我们要把十位和个位

拆开分别送出这样的十位和个位数值到对应的数码管上显示。

如何拆开十位和个位我们可以把所

计得的数值对10求余,即可个位数字,对10整除,即可得到十位数字了。

(4.通过查表方式,分别显示出个位和十位数字。

5.程序框图

图8.2

6.汇编源程序

ORG00H

AJMPMAIN

ORG30H

MAIN:

MOVr0,#0

LOOP1:

MOVR3,#50;设置循环次数

LOOP2:

MOVA,R0

MOVB,#10

DIVAB;A除B将R0的数据折分成两个字节的BCD码

SETBP2.0;开启数码管LED1的段选

CLRP2.1;关闭数码管LED2的段选

MOVDPTR,#TABLE;装入表头

MOVCA,@A+DPTR;从表中取十位要显示的数据

MOVP0,A

LCALLDELAY10MS;调用10MS延时

LOOP3:

SETBP2.1;开启数码管LED2的段选

CLRP2.0;关闭数码管LED1的段选

MOVA,B

MOVDPTR,#TABLE;装入表头

MOVCA,@A+DPTR;从表中取个位要显示的数据

MOVP0,A

LCALLDELAY10MS

LOOP4:

DJNZR3,LOOP2

JBP2.3LOOP5;判断P2。

3是否按下,没有按下,继续显示上一次数据

LCALLDELAY10MS;按下,延时一段时,做按键去抖动,防干扰

JBP2.3LOOP5;再次判断P2。

3是否按下.

INCR0;按下,将要显示的数据+1

LOOP5:

CJNER0,#100,LOOP1

SJMPMAIN

DELAY10MS:

MOVR6,#20

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

TABLE:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

 

实验四4×4矩阵式键盘识别技术

1.实验任务

用89C51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7

作输出线;在数码管上显示每个按键的“0-F”序号。

对应的按键的序号排列如图9.1所示

2.硬件电路原理图

3.系统板上硬件连线

4.程序设计内容

(1.4×4矩阵键盘识别处理。

(2.每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。

矩阵的行线和列线分别通过两并行接口和CPU通信。

每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。

键盘处理程序的任务是:

确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。

两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。

5.程序框图

图9.3

注意:

P1=0XFF;是将上一个行扫描引脚电位,拉成高电平,每一次扫描只能有一行(即一个引脚)是低电平。

6.汇编源程序

KEYBUFEQU30H;设定一个变量存放按键码

ORG00H

START:

MOVKEYBUF,#2

WAIT:

MOVP1,#0FFH

CLRP1.0;扫描第一行,将第一行的引脚拉低

MOVA,P1

ANLA,#0F0H;取低4位引脚电平状态

XRLA,#0F0H;异或判断,低4位是否有按键按下

JZNOKEY1;没按键按下,则跳转到无按键按下程序

LCALLDELY10MS;延时10MS,做为软件去抖动

MOVA,P1;再次取出按键状态

ANLA,#0F0H;取低4位引脚电平状态

XRLA,#0F0H;异或判断,低4位是否有按键按下

JZNOKEY1;没按键按下,则跳转到无按键按下程序,做为一次干扰

MOVA,P1

ANLA,#0F0H

CJNEA,#0E0H,NK1;将ACC中数据和00001110相比较,相等则表明,K4被按下

MOVKEYBUF,#3

LJMPDK1

NK1:

CJNEA,#0D0H,NK2;将ACC中数据和00001101相比较,相等则表明,K3被按下

MOVKEYBUF,#2

LJMPDK1

NK2:

CJNEA,#0B0H,NK3;将ACC中数据和00001011相比较,相等则表明,K2被按下

MOVKEYBUF,#1

LJMPDK1

NK3:

CJNEA,#70H,NK4;将ACC中数据和00001101相比较,相等则表明,K1被按下

MOVKEYBUF,#0

LJMPDK1

NK4:

NOP

DK1:

MOVA,KEYBUF;将键码送到数码管显示

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

CLRP2.2;允许LED6显示

DK1A:

MOVA,P1

ANLA,#0F0H

XRLA,#0F0H

JNZDK1A;等待按键松开,不停取出P1口的状态,不为0,继续读出P1口状态

NOKEY1:

MOVP1,#0FFH;在扫描第二行以前,将第一行的引脚电平拉高

CLRP1.1;扫描第二行,将第二行的引脚拉低

MOVA,P1

ANLA,#0F0H

XRLA,#0F0H

JZNOKEY2

LCALLDELY10MS

MOVA,P1

ANLA,#0F0H

XRLA,#0F0H

JZNOKEY2

MOVA,P1

ANLA,#0F0H

CJNEA,#0E0H,NK5;将ACC中数据和00001110相比较,相等则表明,K8被按下

MOVKEYBUF,#7

LJMPDK2

NK5:

CJNEA,#0D0H,NK6;将ACC中数据和00001101相比较,相等则表明,K7被按下

MOVKEYBUF,#6

LJMPDK2

NK6:

CJNEA,#0B0H,NK7;将ACC中数据和00001011相比较,相等则表明,K6被按下

MOVKEYBUF,#5

LJMPDK2

NK7:

CJNEA,#70H,NK8;将ACC中数据和00000111相比较,相等则表明,K5被按下

MOVKEYBUF,#4

LJMPDK2

NK8:

NOP

DK2:

MOVA,KEYBUF;将键码送到数码管显示

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

CLRP2.2;允许LED6显示

DK2A:

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JNZDK2A;等待按键松开,不停取出P1口的状态,不为0,继续读出P1口状态

NOKEY2:

MOVP1,#0FFH;在扫描第三行以前,将第二行的引脚电平拉高

CLRP1.2;扫描第三行,将第三行的引脚拉低

MOVA,P1

ANLA,#0F0H

XRLA,#0F0H

JZNOKEY3

LCALLDELY10MS

MOVA,P1

ANLA,#0F0H

XRLA,#0F0H

JZNOKEY3

MOVA,P1

ANLA,#0F0H

CJNEA,#0EH,NK9;将ACC中数据和00001110相比较,相等则表明,K12被按下

MOVKEYBUF,#8

LJMPDK3

NK9:

CJNEA,#0DH,NK10;将ACC中数据和00001101相比较,相等则表明,K11被按下

MOVKEYBUF,#9

LJMPDK3

NK10:

CJNEA,#0BH,NK11;将ACC中数据和00001011相比较,相等则表明,K10被按下

MOVKEYBUF,#10

LJMPDK3

NK11:

CJNEA,#07H,NK12;将ACC中数据和00000111相比较,相等则表明,K9被按下

MOVKEYBUF,#11

LJMPDK3

NK12:

NOP

DK3:

MOVA,KEYBUF;将键码送到数码管显示

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

CLRP2.2;允许LED6显示

DK3A:

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JNZDK3A;等待按键松开,不停取出P1口的状态,不为0,继续读出P1口状态

NOKEY3:

MOVP1,#0FFH;在扫描第四行以前,将第三行的引脚电平拉高

CLRP1.3;扫描第三行,将第三行的引脚拉低

MOVA,P1

ANLA,#0F0H

XRLA,#0F0H

JZNOKEY4

LCALLDELY10MS

MOVA,P1

ANLA,#0F0H

XRLA,#0F0H

JZNOKEY4

MOVA,P1

ANLA,#0F0H

CJNEA,#0EH,NK13;将ACC中数据和00001110相比较,相等则表明,K16被按下

MOVKEYBUF,#12

LJMPDK4

NK13:

CJNEA,#0DH,NK14;将ACC中数据和00001101相比较,相等则表明,K15被按下

MOVKEYBUF,#13

LJMPDK4

NK14:

CJNEA,#0BH,NK15;将ACC中数据和00001011相比较,相等则表明,K14被按下

MOVKEYBUF,#14

LJMPDK4

NK15:

CJNEA,#07H,NK16;将ACC中数据和00000111相比较,相等则表明,K13被按下

MOVKEYBUF,#15

LJMPDK4

NK16:

NOP

DK4:

MOVA,KEYBUF;将键码送到数码管显示

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

CLRP2.2;允许LED6显示

DK4A:

MOVA,P1

ANLA,#0F0H

XRLA,#0F0H

JNZDK4A;等待按键松开,不停取出P1口的状态,不为0,继续读出P1口状态

NOKEY4:

LJMPWAIT;继续扫、描按键

DELY10MS:

MOVR6,#10

D1:

MOVR7,#248;延时一段时间

DJNZR7,$

DJNZR6,D1

RET

TABLE:

END

 

实验五

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1