1、 while(1)/无限循环等待查询 while(TF0=0) ; TF0=0; P2=P2; /实例43:用定时器T1查询方式控制单片机发出1KHz音频sbit sound=P37; /将sound位定义为P3.7引脚 TMOD=0x10; /使用定时器T1的模式1 TH1=(65536-921)/256; /定时器T1的高8位赋初值 TL1=(65536-921)%256; TR1=1; /启动定时器T1 TF1=0; while(TF1=0) TF1=0; sound=sound; /将P3.7引脚输出电平取反/实例44:将计数器T0计数的结果送P1口8位LED显示sbit S=P34;
2、 /将S位定义为P3.4引脚 TMOD=0x02; /使用定时器T0的模式2 TH0=256-156; TL0=256-156; while(TF0=0) /如果未计满就等待 if(S=0) /按键S按下接地,电平为0 P1=TL0; /计数器TL0加1后送P1口显示 /计数器溢出后,将TF0清0 /实例45:用定时器T0的中断控制1位LED闪烁sbit D1=P20; /将D1位定义为P2.0引脚 EA=1; ET0=1; while(1)/无限循环等待中断 ;定时器T0的中断服务程序void Time0(void) interrupt 1 using 0 /“interrupt”声明函数为
3、中断服务函数 /其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器 D1=D1; /按位取反操作,将P2.0引脚输出电平取反 TH0=(65536-46083)/256; /定时器T0的高8位重新赋初值/实例46:用定时器T0的中断实现长时间定时unsigned char Countor; /设置全局变量,储存定时器T0中断次数 Countor=0; /从0开始累计中断次数 Countor+; /中断次数自加1 if(Countor=20) /若累计满20次,即计时满1s Countor=0; /将Countor清0,重新从0开始计数/实例47:用定时器T1中断控制两个LED以不同周期
4、闪烁sbit D2=P21; /将D2位定义为P2.1引脚unsigned char Countor1; /设置全局变量,储存定时器T1中断次数unsigned char Countor2; ET1=1; /定时器T1中断允许 TH1=(65536-46083)/256; TL1=(65536-46083)%256; Countor1=0; Countor2=0; /从0开始累计中断次数 定时器T1的中断服务程序void Time1(void) interrupt 3 using 0 /“interrupt”声明函数为中断服务函数 /其后的3为定时器T1的中断编号; Countor1+; /C
5、ountor1自加1 Countor2+; /Countor2自加1 if(Countor1=2) /若累计满2次,即计时满100ms D1=D1; Countor1=0; /将Countor1清0,重新从0开始计数 if(Countor2=8) /若累计满8次,即计时满400ms D2=D2; /按位取反操作,将P2.1引脚输出电平取反 Countor2=0; TH1=(65536-46083)/256; /定时器T1的高8位重新赋初值/实例50-1:输出50个矩形脉冲 /包含51单片机寄存器定义的头文件sbit u=P14; /将u位定义为P1.4/*延时约30ms (3*100*100=
6、30 000s =30m*/void delay30ms(void) unsigned char m,n; for(m=0;m100;m+) for(n=0;nn+)/*/ unsigned char i; u=1; /初始化输出高电平 for(i=0;i /包含函数_nop_()定义的头文件unsigned char code Tab=0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F;/流水灯控制码,该数组被定义为全局变量sbit P17=P17;延时约150ms void delay(void) 200;250;n+) 发送一个字节的数据void Send(unsigned char dat) P17=0; /P1.7引脚输出清0信号,对74LS164清0 _nop_(); /延时一个机器周期 /延时一个机器周期,保证清0完成 P17=1; /结束对74LS164的清0 SBUF=dat; /将数据写入发送缓冲器,启动发送 while(TI=0) /若没有发送完毕,等待 TI=0; /发送完毕,TI被置“1”,需将其清0 SCON=0x00; /SCON=0000 0000B,使串行口工作于方式0 8;i+) Send(Tabi); /发送数据 delay(); /延时