#include <reg52.h> #define SYS_MCLK (11059200/12) unsigned char T1RH ; unsigned char T1RL; unsigned int code reload = 65536 - (11059200/12)/(4000*2); bit staBuzzer = 0; sbit BUZZER = P1^6; void Waring(); void Waring2(); bit buti = 0; bit buSta = 0; unsigned char bucnout = 0; unsigned char butimes = 0; void Waring2(); void main() { /*T0¶¨Ê±Æ÷ÖжÏ*/ TMOD = 0x11; TH0 = 0xFC; TL0 = 0x67; EA = 1; ET0 = 1; TR0 = 1; /*T1¶¨Ê±Æ÷ÖжÏ*/ T1RH = (unsigned char)(reload >> 8); //16λÖØÔØÖµ·Ö½âΪ¸ßµÍÁ½¸ö×Ö½Ú T1RL = (unsigned char)reload; TH1 = T1RH ; TL1 = T1RL; ET1 = 1; PT1 = 1; TR1 = 1; staBuzzer = 1; Waring2(); } void Waring2() { if(staBuzzer == 1) { butimes = 6; staBuzzer = 0; buti = 1; } if(butimes) { if(bucnout>127) { buSta = 0; }else{ buSta = 1; } } } void buzzTime() { if(buti == 1) { bucnout++; if(bucnout>254) { bucnout = 0; if(butimes == 0) { buti = 0; }else{ butimes--; } } } } void InterruptTimer0() interrupt 1 { TH0 = 0xfc; TL0 = 0x67; buzzTime(); } /* T2 */ void InterruptTimer2() interrupt 3 //1ms { TF1 = 0; TH1 = T1RH; TL1 = T1RL; if (buSta == 1) { BUZZER = ~BUZZER; } else BUZZER = 1; }
时间: 2024-04-23 18:23:07 浏览: 116
#indef 与#define 区别于用法
这是一段 8051 单片机的 C 语言代码,主要实现了一个蜂鸣器的控制功能。具体来说,代码中使用了定时器 0 和定时器 1 来控制蜂鸣器的鸣叫,其中定时器 0 的中断函数 buzzTime() 负责计时,当需要鸣叫时,将状态标志 buti 置为 1,然后在定时器 2 的中断函数 InterruptTimer2() 中根据状态标志 buSta 控制蜂鸣器的输出。
代码中还涉及到了一些定时器的参数配置,比如 T1RH 和 T1RL 用于设置定时器 1 的重载值,reload 用于计算该重载值,TH0 和 TL0 用于设置定时器 0 的初值,以及定时器 0 和定时器 2 的开启和中断使能等操作。
阅读全文