PROTUES单片机实验.docx
- 文档编号:3618246
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:49
- 大小:239.28KB
PROTUES单片机实验.docx
《PROTUES单片机实验.docx》由会员分享,可在线阅读,更多相关《PROTUES单片机实验.docx(49页珍藏版)》请在冰豆网上搜索。
PROTUES单片机实验
按钮控制LED——51单片机的Proteus实验
实验原理
51单片机的一个I/O口接按钮,再通过另一个I/O口控制LED的亮、灭。
主要器件以及电路图
单片机——AT89C51,上拉电阻——pullup,按钮button,发光二极管——LED。
按钮控制LED汇编程序源码
ORG0
START:
MOVP1,#0;LED不亮
MOVP0,#0FFH;P0口准备读数
ST1:
JBP0.0,$;等待按钮抬起
JNBP0.0,$;等待按钮按下
;以上两句使得只有按一下按钮才可能执行下面的语句
CPLP1.0;LED状态改变
SJMPST1;返回
END
流水灯——51单片机的Proteus实验
实验原理
通过个51单片机的一个I/O口送不同的数字,实现8个LED的流水灯。
本实验为移动一个不亮的LED。
通过修改送给I/O口送的数字可以实现不同方式的流水灯。
主要器件以及电路图
单片机——AT89C51,8排电阻——RX8,发光二极管——LED。
流水灯汇编程序源码
org0
sjmpstart
org30h
start:
movP1,#1;P1.0为1,不亮
movP1,#2;P1.1为1,不亮
movP1,#4;以下原理同上
movP1,#8
movP1,#10h
movP1,#20h
movP1,#40h
movP1,#80h
sjmpstart
delay:
nop
nop
nop
nop
ret
end
数码显示管——51单片机的Proteus实验
实验原理
51单片机的一个I/O口接4个开关,再通过另一个I/O口控制7段数码显示管显示想要的数字。
主要器件以及电路图
单片机——AT89C51,共地的7段数码显示管——7SEG-COM-AN-GRN,开关——SW-SPST。
汇编程序源码
汇编后139字节。
org0
sjmpSTART
org30h
START:
movP1,#0FFh;LED不亮
st1:
movP2,#0FFh;准备读数(开关状态)
movA,P2;读数
anlA,#0Fh;取低四位
acallSEG7;调用显示码子程序
movP1,A;将得到的显示码送数显管显示
sjmpst1;循环
SEG7:
incA;该子程序实现将数字转换为显示码
movcA,@A+pc
ret
DB0c0h,0F9h,0a4h,0b0h
DB99h,92h,82h,0F8h
DB80h,90h,88h,83h
DB0c6h,0a1h,86h,8eh
end
C语言程序源码
用C语言写了一下实现同样功能的程序,编译后1.39K,代码如下:
#include
intmain(){
P1=0xff;
while
(1){
P2=0xff;
ACC=P2;
ACC&=0xf;
switch(ACC){
case0:
P1=0xc0;break;
case1:
P1=0xf9;break;
case2:
P1=0xa4;break;
case3:
P1=0xb0;break;
case4:
P1=0x99;break;
case5:
P1=0x92;break;
case6:
P1=0x82;break;
case7:
P1=0xf8;break;
case8:
P1=0x80;break;
case9:
P1=0x90;break;
case10:
P1=0x88;break;
case11:
P1=0x83;break;
case12:
P1=0xc6;break;
case13:
P1=0xa1;break;
case14:
P1=0x86;break;
case15:
P1=0x8e;break;
}
}
while
(1);
}
用数组实现,更大(1.51K),代码如下:
#include
intmain(){
intledNum[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
P1=0xff;
while
(1){
P2=0xff;
ACC=P2;
ACC&=0xf;
P1=ledNum[ACC];
}
while
(1);
}
蜂鸣器——51单片机的Proteus实验
实验原理
51单片机的一个I/O口接7个按钮,再通过另一个I/O口控制蜂鸣器发出声音。
主要器件以及电路图
单片机——AT89C51,蜂鸣器——speaker,按钮button。
汇编程序源码
晶振12M,已在Proteus下测试,听起来声音差不多。
ORG0
SJMPSTART
DLY:
MOVR2,#20;延时程序
D1:
MOVR3,#248
DJNZR3,$
DJNZR2,D1
RET
ORG30H
START:
MOVTMOD,#1;定时器0方式1
MOVP3,#0FFH;P3准备读数
JNBP3.0,DODO
ACALLDLY
JNBP3.1,RERE
ACALLDLY
JNBP3.2,MIMI
ACALLDLY
JNBP3.3,FAFA
ACALLDLY
JNBP3.4,SOSO
ACALLDLY
JNBP3.5,LALA
ACALLDLY
JNBP3.6,XIXI
ACALLDLY
JNBP3.7,DO2DO2
ACALLDLY
SJMPSTART
DODO:
LJMPDO
RERE:
LJMPRE
MIMI:
LJMPMI
FAFA:
LJMPFA
SOSO:
LJMPSO
LALA:
LJMPLA
XIXI:
LJMPXI
DO2DO2:
LJMPDO2
DO:
MOVTH0,#0FBH
MOVTL0,#44H
SETBTR0;开启定时器
JNBTF0,$;等待定时到
CLRTF0;清除中断
CPLP2.7;喇叭
JNBP3.0,DO
CLRTF0
SJMPSTART
RE:
MOVTH0,#0FBH
MOVTL0,#88H
SETBTR0
JNBTF0,$
CLRTF0
CPLP2.7
JNBP3.1,RE
CLRTF0
SJMPSTART
MI:
MOVTH0,#0FBH
MOVTL0,#0CCH
SETBTR0
JNBTF0,$
CLRTF0
CPLP2.7
JNBP3.2,MI
CLRTF0
SJMPSTART
FA:
MOVTH0,#0FCH
MOVTL0,#00H
SETBTR0
JNBTF0,$
CLRTF0
CPLP2.7
JNBP3.3,FA
CLRTF0
LJMPSTART
SO:
MOVTH0,#0FCH
MOVTL0,#44H
SETBTR0
JNBTF0,$
CLRTF0
CPLP2.7
JNBP3.4,SO
CLRTF0
LJMPSTART
LA:
MOVTH0,#0FCH
MOVTL0,#88H
SETBTR0
JNBTF0,$
CLRTF0
CPLP2.7
JNBP3.5,LA
CLRTF0
LJMPSTART
XI:
MOVTH0,#0FCH
MOVTL0,#0CCH
SETBTR0
JNBTF0,$
CLRTF0
CPLP2.7
JNBP3.6,XI
CLRTF0
LJMPSTART
DO2:
MOVTH0,#0FDH
MOVTL0,#00H
SETBTR0
JNBTF0,$
CLRTF0
CPLP2.7
JNBP3.7,DO2
CLRTF0
LJMPSTART
END
附上蜂鸣器发声的简单程序
1.汇编
ORG0
START:
CPLP2.7;蜂鸣器
LCALLDELAY
LJMPSTART
DELAY:
MOVR7,#0FFH
DJNZR7,$
RET
END
2.C语言
#include
voiddelay(unsignedintz);//声明延时函数
sbitbeep=P2^7;
voidmain()数
{
while
(1){
beep=0;//蜂鸣器响
delay
(1);//调用1ms延时
beep=1;//蜂鸣器不响
delay
(1);//调用1ms延时
}
}
voiddelay(unsignedintz)//1ms延时,通过z值改变延时
{
unsignedintx;
for(;z>0;z--)
for(x=110;x>0;x--);
}
蜂鸣器演奏祝你平安——51单片机的Proteus实验
实验原理
51单片机的一个I/O口控制speaker发声,演唱祝你平安歌曲。
主要器件以及电路图
单片机——AT89C51,蜂鸣器——speaker。
汇编程序源码
晶振12M,已在Proteus下测试,好像有点失真。
程序是从网上照的,感觉不是很对劲,删除了一部分之后还是没有变化。
部分注释是我后加上去的。
;------------------------------------
;蜂鸣器演奏--祝你平安
;功能:
蜂鸣器-蜂鸣器奏乐-祝你平安
;------------------------------------
SPKbitP2.7;以后SPK就是speaker了
ORG0000H
LJMPSTART
ORG000BH
INC20H;T0中断服务,中断计数器加1
MOVTH0,#0D8H
MOVTL0,#0EFH;12M晶振,形成10毫秒中断
RETI
START:
MOVTH0,#0D8H
MOVTL0,#0EFH
MOVTMOD,#01H
MOVIE,#82H;10000010B——开T0中断
MUSIC0:
NOP
MOVDPTR,#DAT;表头地址送DPTR
MOV20H,#00H;中断计数器清0
MUSIC1:
NOP
CLRA
MOVCA,@A+DPTR;查表取代码
JZEND0;是00H,则结束
CJNEA,#0FFH,MUSIC5;只要A不等于FF,一直执行MUSIC5
LJMPMUSIC3;当A到FF的时候,执行MUSIC3
MUSIC5:
NOP
MOVR6,A;代码送R6
INCDPTR
MOVCA,@A+DPTR;取节拍代码送R7
MOVR7,A
SETBTR0;启动计数
MUSIC2:
NOP
CPLSPK
MOVA,R6;按R6(代码)延时
MOVR3,A;
LCALLDEL;利用代码(R6)来调用延时
CJNEA,20H,MUSIC2;中断计数器(20H)=R7否?
不等,则继续循环
MOV20H,#00H;等于,则取下一代码
INCDPTR
LJMPMUSIC1
MUSIC3:
NOP
CLRTR0;休止100毫秒
MOVR2,#0DH
MUSIC4:
NOP
MOVR3,#0FFH
LCALLDEL
DJNZR2,MUSIC4
INCDPTR
LJMPMUSIC1
END0:
NOP
MOVR2,#64H;歌曲结束,延时1秒后继续
MUSIC6:
MOVR3,#00H
LCALLDEL
DJNZR2,MUSIC6
LJMPMUSIC0
DEL:
;DEL子程序利用R3来延时一定时间
NOP
DEL3:
MOVR4,#02H
DEL4:
NOP
DJNZR4,DEL4
NOP
DJNZR3,DEL3
RET
NOP
DAT:
;祝你平安
db26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h
db30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h
db20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h
db30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h
db30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h
db2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h
db20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
db20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
db20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
db20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
db18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
db30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h
db39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h
db20h,10h,2bh,10h,26h,30h,30h,80h,00H
END;程序结束
蜂鸣器演奏兰花草——51单片机的Proteus实验
实验原理
51单片机的一个I/O口控制speaker发声,演奏兰花草。
主要器件以及电路图
单片机——AT89C51,蜂鸣器——speaker。
汇编程序源码
SPKEQUP2.7;位定义
ORG0
LJMPSTART
ORG0030H;伪指令,指定程序从0030H开始存放
START:
MOVR3,#00H;R3清零(作为查表偏移)
NEXT:
MOVA,R3
MOVDPTR,#TABLE;查表
MOVCA,@A+DPTR
JZSTART;如果A是0就重来
MOVR7,A;R7是查表的来的代码字节
INCR3;读下一个代码字节
MOVA,R3
MOVCA,@A+DPTR
MOVR2,A
ACALLSONG
INCR3
SJMPNEXT
;歌曲播放子程序
SONG:
MOVA,R2;取出节拍
RLA;左移节拍
JNZKEEP;如果节拍为0就让它等于1
MOVA,#01H
KEEP:
MOVR2,A
REPEAT:
ACALLEIGHTH
DJNZR2,REPEAT
RET
;产生1/8拍延时子程序
EIGHTH:
MOVA,R7;查表取出廷时参数,保存到R4
MOVDPTR,#DELAY_T
MOVCA,@A+DPTR
MOVR4,A
MOVA,R7;查表取出1/8拍周期数,保存到R5
MOVDPTR,#S_PARA
MOVCA,@A+DPTR
MOVR5,A
NEXTCYC:
ACALLSOUND
DJNZR5,NEXTCYC
RET
;===发声子程序===
SOUND:
SETBSPK
ACALLSDELAY
CLRSPK
ACALLSDELAY
RET
;延时子程序
SDELAY:
MOVA,R4;廷时值在R4内
MOVR0,A
XL2:
MOVR1,#03H
DL1:
NOP
DJNZR1,DL1
DJNZR0,XL2
RET
;1/8拍周期表
S_PARA:
DS1DH
DB15H,16H,00
DB19H,00H,1CH,00H,1FH,21H,00H,25H
DB00H,29H,2CH,00H,31H,34H,37H,00H
DB3EH,41H,00H,49H,00H,52H,57H,00H
DB62H
;延时参数表
DELAY_T:
DS1DH
DB7EH,77H,00H
DB6AH,00H,5EH,00H,54H,4FH,00H,46H
DB00H,3FH,3BH,00H,35H,32H,2FH,00H
DB2AH,27H,00H,23H,00H,1FH,1DH,0C0H
DB1AH
;歌曲表
TABLE:
DW2202H,2902H,2902H,2902H,2906H,2702H;我从山中来
DW2502H,2702H,2502H,2402H,2208H;带着兰花草
DW2E02H,2E02H,2E02H,2E02H,2E06H,2C02H;种在小园中
DW2902H,2C02H,2D02H,2A02H,2908H;祈祷花开早
DW2902H,2E02H,2E02H,2C02H,2906H,2702H;一日看三回
DW2502H,2702H,2502H,2402H,2206H,1D02H;看得花时过
DW1D02H,2502H,2502H,2402H,2206H,2902H;兰花却依然
DW2702H,2502H,2402H,2002H,2208H;苞也无一个
DW0000H
END
蜂鸣器演奏老鼠爱大米——51单片机的Proteus实验
实验原理
51单片机的一个I/O口控制speaker发声,演奏老鼠爱大米。
主要器件以及电路图
单片机——AT89C51,蜂鸣器——speaker。
C语言程序源码
C语言的程序代码更好读一些,相比较前面两个汇编的蜂鸣器程序,这个程序比较好理解。
/*蜂鸣器--蜂鸣器奏乐-老鼠爱大米*/
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineulongunsignedlong
sbitbeep=P2^7;//蜂鸣器输出引脚
ucharth0_f;//中断装载T0高8位
uchartl0_f;//T0低8位
ucharcodefreq[36*2]={//音阶码表
0xf7,0xd8,//440hz,1//0
0xf8,0x50,//466hz,1#//1
0xf8,0xbc,//494hz,2//2
0xf9,0x26,//524hz,2#//3
0xf9,0x85,//554hz,3//4
0xf9,0xe5,//588hz,4//5
0xfa,0x3d,//622hz,4#//6
0xfa,0x92,//660hz,5//7
0xfa,0xdd,//698hz,5#//8
0xfb,0x29,//740hz,6//9
0xfb,0x70,//784hz,6#//10
0xfb,0xb0,//830hz,7//11
0xfb,0xef,//880hz,1//12
0xfc,0x29,//932hz,1#//13
0xfc,0x62,//988hz,2//14
0xfc,0x95,//1046hz,2#//15
0xfc,0xc7,//1108hz,3//16
0xfc,0xf5,//1174hz,4//17
0xfd,0x20,//1244hz,4#//18
0xfd,0x4c,//1318hz,5//19
0xfd,0x72,//1396hz,5#//20
0xfd,0x97,//1480hz,6//21
0xfd,0xbb,//1568hz,6#//22
0xfd,0xdc,//1662hz,7//23
0xfd,0xfb,//1769hz,`1//24
0xfe,0x18,//1864hz,`1#//25
0xfe,0x34,//1976hz,`2//26
0xfe,0x4e,//2092hz,`2#//27
0xfe,0x67,//2218hz,`3//28
0xfe,0x7d,//2350hz,`4//29
0xfe,0x94,//2488hz,`4#//30
0xfe,0xa8,//2639hz,`5//31
0xfe,0xbc,//2794hz,`5#//32
0xfe,0xcf,//2960hz,`6//33
0xfe,0xe0,//3136hz,`6#//34
0xfe,0xf1,//3322hz,`7//35
};
ucharcodediaodata[30]={//音调代码
0x10,0x0e,0x0c,0x10,0x0e,0x0c,
0x10,0x0e,0x10,0x0c,0x10,0x15
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PROTUES 单片机 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)