1、数码显示管51单片机的Proteus实验51单片机的一个I/O口接4个开关,再通过另一个I/O口控制7段数码显示管显示想要的数字。单片机AT89C51,共地的7段数码显示管7SEG-COM-AN-GRN,开关SW-SPST。汇编程序源码汇编后139字节。 sjmp STARTorg 30h mov P1,#0FFh ;st1: mov P2,#0FFh ;准备读数(开关状态) mov A,P2 ;读数 anl A,#0Fh ;取低四位 acall SEG7 ;调用显示码子程序 mov P1,A ;将得到的显示码送数显管显示 sjmp st1 ;循环SEG7: inc A ;该子程序实现将数字转
2、换为显示码 movc A,A+pcret DB 0c0h,0F9h,0a4h,0b0h DB 99h,92h,82h,0F8h DB 80h,90h,88h,83h DB 0c6h,0a1h,86h,8ehC语言程序源码用C语言写了一下实现同样功能的程序,编译后1.39K,代码如下:#includeint main() P1 = 0xff; while(1) P2 = 0xff; ACC = P2; ACC &= 0xf; switch(ACC) case 0: P1 = 0xc0; break; case 1: P1 = 0xf9; case 2: P1 = 0xa4; case 3: P1
3、 = 0xb0; case 4: P1 = 0x99; case 5: P1 = 0x92; case 6: P1 = 0x82; case 7: P1 = 0xf8; case 8: P1 = 0x80; case 9: P1 = 0x90; case 10: P1 = 0x88; case 11: P1 = 0x83; case 12: P1 = 0xc6; case 13: P1 = 0xa1; case 14: P1 = 0x86; case 15: P1 = 0x8e; while(1);用数组实现,更大(1.51K),代码如下: int ledNum16 = 0xc0,0xf9,0
4、xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; P1 = ledNumACC;蜂鸣器51单片机的Proteus实验51单片机的一个I/O口接7个按钮,再通过另一个I/O口控制蜂鸣器发出声音。单片机AT89C51,蜂鸣器speaker,按钮button。晶振12M,已在Proteus下测试,听起来声音差不多。 ORG 0 SJMP STARTDLY: MOV R2,#20 ;延时程序D1: MOV R3,#248 DJNZ R3,$ DJNZ R2,D1 RET ORG 30H MOV TMOD,#1 ;
5、定时器0方式1 MOV P3,#0FFH ;P3准备读数 JNB P3.0,DODO ACALL DLY JNB P3.1,RERE JNB P3.2,MIMI JNB P3.3,FAFA JNB P3.4,SOSO JNB P3.5,LALA JNB P3.6,XIXI JNB P3.7,DO2DO2DODO: LJMP DORERE: LJMP REMIMI: LJMP MIFAFA: LJMP FASOSO: LJMP SO LALA: LJMP LAXIXI: LJMP XIDO2DO2: LJMP DO2DO: MOV TH0,#0FBH MOV TL0,#44H SETB TR0
6、;开启定时器 JNB TF0,$ ;等待定时到 CLR TF0 ;清除中断 CPL P2.7 ;喇叭 JNB P3.0,DO CLR TF0RE: MOV TL0,#88H SETB TR0 JNB TF0,$ CPL P2.7 JNB P3.1,REMI: MOV TL0,#0CCH JNB P3.2,MIFA: MOV TH0,#0FCH MOV TL0,#00H JNB P3.3,FA LJMP STARTSO: JNB P3.4,SOLA: JNB P3.5,LAXI: JNB P3.6,XIDO2: MOV TH0,#0FDH JNB P3.7,DO2 CLR TF0 附上蜂鸣器发声
7、的简单程序1.汇编 ORG 0 CPL P2.7 ;蜂鸣器 LCALL DELAY LJMP STARTDELAY: MOV R7,#0FFH DJNZ R7, $2.C语言void delay(unsigned int z);/声明延时函数sbit beep=P27;void main()数 beep=0;/蜂鸣器响 delay(1);/调用1ms延时 beep=1;/蜂鸣器不响/调用1ms延时 void delay(unsigned int z)/1ms延时,通过z值改变延时 unsigned int x; for(;z0;z-) for(x=110;xx-);蜂鸣器演奏祝你平安51单片机
8、的Proteus实验51单片机的一个I/O口控制speaker发声,演唱祝你平安歌曲。单片机AT89C51,蜂鸣器speaker。晶振12M,已在Proteus下测试,好像有点失真。程序是从网上照的,感觉不是很对劲,删除了一部分之后还是没有变化。部分注释是我后加上去的。;- 蜂鸣器演奏-祝你平安 功能:蜂鸣器-蜂鸣器奏乐-祝你平安 SPK bit P2.7 ;以后SPK就是speaker了 ORG 0000H ORG 000BH INC 20H ;T0中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH ;12M晶振,形成10毫秒中断 RETI MOV TL0,#0
9、EFH MOV TMOD,#01H MOV IE,#82H ;10000010B开T0中断MUSIC0: NOP MOV DPTR,#DAT ;表头地址送DPTR MOV 20H,#00H ;中断计数器清0MUSIC1: CLR A MOVC A,A+DPTR ;查表取代码 JZ END0 ;是00H,则结束 CJNE A,#0FFH,MUSIC5 ;只要A不等于FF,一直执行MUSIC5 LJMP MUSIC3 ;当A到FF的时候,执行MUSIC3MUSIC5: MOV R6,A ;代码送R6 INC DPTR取节拍代码送R7 MOV R7,A SETB TR0 ;启动计数MUSIC2: C
10、PL SPK MOV A,R6 ;按R6(代码)延时 MOV R3,A ; LCALL DEL ;利用代码(R6)来调用延时 CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?不等,则继续循环 MOV 20H,#00H ;等于,则取下一代码 INC DPTR LJMP MUSIC1MUSIC3: CLR TR0 ;休止100毫秒 MOV R2,#0DHMUSIC4: MOV R3,#0FFH LCALL DEL DJNZ R2,MUSIC4END0: MOV R2,#64H ;歌曲结束,延时1秒后继续MUSIC6: MOV R3,#00H DJNZ R2,MUSIC6 LJM
11、P MUSIC0DEL: ;DEL子程序利用R3来延时一定时间 DEL3: MOV R4,#02HDEL4: DJNZ R4,DEL4 DJNZ R3,DEL3DAT:祝你平安db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20hdb 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20hdb 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20hdb 30h,20h,30h
12、,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20hdb 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10hdb 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20hdb 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20hdb 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h
13、,1ch,20h,20h,20hdb 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10hdb 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80hdb 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20hdb 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20hdb 39h,20h,26h,10h,2
14、bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10hdb 20h,10h,2bh,10h,26h,30h,30h,80h,00H END ;程序结束蜂鸣器演奏兰花草51单片机的Proteus实验51单片机的一个I/O口控制speaker发声,演奏兰花草。 SPK EQU P2.7 ;位定义 ORG 0 ORG 0030H ;伪指令,指定程序从0030H开始存放 MOV R3,#00H ;R3清零(作为查表偏移)NEXT: MOV A,R3 MOV DPTR,#TABLE ;查表 MOVC A,A+DPTR JZ START ;如果A是0就重来 MOV R
15、7,A ;R7是查表的来的代码字节 INC R3 ;读下一个代码字节 MOV A,R3 MOVC A,A+DPTR MOV R2,A ACALL SONG INC R3 SJMP NEXT歌曲播放子程序SONG: MOV A,R2 ;取出节拍 RL A ;左移节拍 JNZ KEEP ;如果节拍为0就让它等于1 MOV A,#01HKEEP:REPEAT: ACALL EIGHTH DJNZ R2,REPEAT产生1/8拍延时子程序EIGHTH: MOV A,R7 ;查表取出廷时参数,保存到R4 MOV DPTR,#DELAY_T MOV R4,A查表取出1/8拍周期数,保存到R5 MOV DP
16、TR,#S_PARA MOV R5,ANEXTCYC: ACALL SOUND DJNZ R5,NEXTCYC= 发声子程序 =SOUND: SETB SPK ACALL SDELAY CLR SPK延时子程序SDELAY: MOV A,R4 ; 廷时值在R4内 MOV R0,AXL2: MOV R1,#03HDL1: DJNZ R1,DL1 DJNZ R0,XL21/8拍周期表S_PARA:DS 1DHDB 15H,16H,00DB 19H,00H,1CH,00H,1FH,21H,00H,25HDB 00H,29H,2CH,00H,31H,34H,37H,00HDB 3EH,41H,00H,
17、49H,00H,52H,57H,00HDB 62H延时参数表DELAY_T:DB 7EH,77H,00HDB 6AH,00H,5EH,00H,54H,4FH,00H,46HDB 00H,3FH,3BH,00H,35H,32H,2FH,00HDB 2AH,27H,00H,23H,00H,1FH,1DH,0C0HDB 1AH歌曲表TABLE:DW 2202H,2902H,2902H,2902H,2906H,2702H ;我从山中来DW 2502H,2702H,2502H,2402H,2208H ;带着兰花草DW 2E02H,2E02H,2E02H,2E02H,2E06H,2C02H ;种在小园中D
18、W 2902H,2C02H,2D02H,2A02H,2908H ;祈祷花开早DW 2902H,2E02H,2E02H,2C02H,2906H,2702H ;一日看三回DW 2502H,2702H,2502H,2402H,2206H,1D02H ;看得花时过DW 1D02H,2502H,2502H,2402H,2206H,2902H ;兰花却依然DW 2702H,2502H,2402H,2002H,2208H ;苞也无一个DW 0000HEND蜂鸣器演奏老鼠爱大米51单片机的Proteus实验51单片机的一个I/O口控制speaker发声,演奏老鼠爱大米。C语言的程序代码更好读一些,相比较前面两
19、个汇编的蜂鸣器程序,这个程序比较好理解。/* 蜂鸣器-蜂鸣器奏乐-老鼠爱大米*/#include#define uint unsigned int#define uchar unsigned char#define ulong unsigned long /蜂鸣器输出引脚uchar th0_f; /中断装载T0高8位uchar tl0_f; /T0低8位uchar code freq36*2= /音阶码表0xf7,0xd8, /440hz , 1 /00xf8,0x50, /466hz , 1# /10xf8,0xbc, /494hz , 2 /20xf9,0x26, /524hz , 2#
20、/30xf9,0x85, /554hz , 3 /40xf9,0xe5, /588hz , 4 /50xfa,0x3d, /622hz , 4# /60xfa,0x92, /660hz , 5 /70xfa,0xdd, /698hz , 5# /80xfb,0x29, /740hz , 6 /90xfb,0x70, /784hz , 6# /100xfb,0xb0, /830hz , 7 /110xfb,0xef, /880hz , 1 /120xfc,0x29, /932hz , 1# /130xfc,0x62, /988hz , 2 /140xfc,0x95, /1046hz, 2# /1
21、50xfc,0xc7, /1108hz, 3 /160xfc,0xf5, /1174hz, 4 /170xfd,0x20, /1244hz, 4# /180xfd,0x4c, /1318hz, 5 /190xfd,0x72, /1396hz, 5# /200xfd,0x97, /1480hz, 6 /210xfd,0xbb, /1568hz, 6# /220xfd,0xdc, /1662hz, 7 /230xfd,0xfb, /1769hz, 1 /240xfe,0x18, /1864hz, 1# /250xfe,0x34, /1976hz, 2 /260xfe,0x4e, /2092hz, 2# /270xfe,0x67, /2218hz, 3 /280xfe,0x7d, /2350hz, 4 /290xfe,0x94, /2488hz, 4# /300xfe,0xa8, /2639hz, 5 /310xfe,0xbc, /2794hz, 5# /320xfe,0xcf, /2960hz, 6 /330xfe,0xe0, /3136hz, 6# /340xfe,0xf1, /3322hz, 7 /35;uchar code diaodata30= /音调代码0x10,0x0e,0x0c,0x10,0x0e,0x0c,0x10,0x0e,0x10,0x0c,0x10,0x15
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1