学生DIY单片机实验手册.docx
- 文档编号:23663071
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:24
- 大小:334.47KB
学生DIY单片机实验手册.docx
《学生DIY单片机实验手册.docx》由会员分享,可在线阅读,更多相关《学生DIY单片机实验手册.docx(24页珍藏版)》请在冰豆网上搜索。
学生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
实验五
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 DIY 单片机 实验 手册