1、89C52 控制外部 I0 接口程序:ORG 0 START: MOV R2,#8 MOV A,#0FEH SETB C LOOP: MOV P1,A LCALL DELAY RLC A DJNZ R2,LOOP MOV R2,#8 LOOP1: MOV P1,A LCALL DELAY RRC A DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#20 ; D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END 89C52 控制 LED 显示电路及蜂鸣器报警电路程序:/ 利用定
2、时器控制产生占空比可变的 PWM 波/ 按 K1,PWM 值增加,则占空比减小,LED 灯渐暗。/ 按 K2,PWM 值减小,则占空比增加,LED 灯渐亮。/ 当 PWM 值增加到最大值或减小到最小值时,蜂鸣器将报警。#include #include sbit K1 =P10 ; /增加键sbit K2 =P11 ; /减少键sbit BEEP =P21 ; /蜂鸣器unsigned char PWM=0x7f ; /赋初值void Beep();void delayms(unsigned char ms);void delay(unsigned char t);void main() P0
3、=0xff;TMOD=0x21 ;TH0=0xfc ; /1ms 延时常数 12MTL0=0x18 ; /频率调节TH1=PWM ; /脉宽调节TL1=0 ;EA=1;ET0=1;ET1=1;TR0=1 ;while(1)doif(PWM!=0xff)PWM+ ;delayms(10);else Beep() ;while(K1=0);doif(PWM!=0x02)PWM- ;delayms(10);else Beep() ;while(K2=0);/ 定时器 0 中断服务程序.void timer0() interrupt 1 /控制低电平 TR1=0 ;TH0=0xfc ;TL0=0x66
4、 ;TH1=PWM ;TR1=1 ;P0=0x00 ; /启动输出/ 定时器 1 中断服务程序void timer1() interrupt 3 /控制高电平TR1=0 ;P0=0xff ; /结束输出/蜂鸣器子程序void Beep() unsigned char i ;for (i=0 ;i100 ;i+)delay(100) ;BEEP=!BEEP ; /Beep 取反BEEP=1 ; /关闭蜂鸣器delayms(100);/ 延时子程序void delay(unsigned char t)while(t-) ;/ 延时子程序void delayms(unsigned char ms) /延时 1msunsigned char i ;while(ms-)for(i = 0 ; i 120 ; i+) ;