(Proteus入门教程) - 图文

#include int main(){ P1 = 0xff; while(1){ P2 = 0xff; ACC = P2; ACC &= 0xf; switch(ACC){ case 0: P1 = 0xc0; break; case 1: P1 = 0xf9; break; case 2: P1 = 0xa4; break; case 3: P1 = 0xb0; break; case 4: P1 = 0x99; break; case 5: P1 = 0x92; break; case 6: P1 = 0x82; break; case 7: P1 = 0xf8; break; case 8: P1 = 0x80; break; case 9: P1 = 0x90; break; case 10: P1 = 0x88; break; case 11: P1 = 0x83; break; case 12: P1 = 0xc6; break; case 13: P1 = 0xa1; break; case 14: P1 = 0x86; break; case 15: P1 = 0x8e; break; } } while(1); }

用数组实现,更大(1.51K),代码如下:

#include int main(){ int ledNum[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];

29

}

}

while(1);

蜂鸣器——51单片机的Proteus实验

实验原理

51单片机的一个I/O口接7个按钮,再通过另一个I/O口控制蜂鸣器发出声音。 主要器件以及电路图

单片机——AT89C51,蜂鸣器——speaker,按钮button。

汇编程序源码

晶振12M,已在Proteus下测试,听起来声音差不多。

ORG 0 SJMP START DLY: MOV R2,#20

;延时程序

30

D1: MOV R3,#248 DJNZ R3,$ DJNZ R2,D1 RET ORG 30H START: MOV TMOD,#1 ;定时器0方式1 MOV P3,#0FFH ;P3准备读数 JNB P3.0,DODO ACALL DLY JNB P3.1,RERE ACALL DLY JNB P3.2,MIMI ACALL DLY JNB P3.3,FAFA ACALL DLY JNB P3.4,SOSO ACALL DLY JNB P3.5,LALA ACALL DLY JNB P3.6,XIXI ACALL DLY JNB P3.7,DO2DO2 ACALL DLY SJMP START DODO: LJMP DO RERE: LJMP RE MIMI: LJMP MI FAFA: LJMP FA SOSO: LJMP SO LALA: LJMP LA XIXI: LJMP XI DO2DO2: LJMP DO2 DO: MOV TH0,#0FBH MOV TL0,#44H

31

RE: MI: FA: SO:

SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7 JNB P3.0,DO CLR TF0 SJMP START MOV TH0,#0FBH MOV TL0,#88H SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7 JNB P3.1,RE CLR TF0 SJMP START MOV TH0,#0FBH MOV TL0,#0CCH SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7 JNB P3.2,MI CLR TF0 SJMP START MOV TH0,#0FCH MOV TL0,#00H SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7 JNB P3.3,FA CLR TF0 LJMP START MOV TH0,#0FCH MOV TL0,#44H SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7

;喇叭

;开启定时器 ;等待定时到 ;清除中断

32

联系客服:779662525#qq.com(#替换为@)