
原理图,仿真图
程序
代码:
- #include <reg51.h>
- #include <intrins.h>
- char code str_warning[] = "Warning of illegal entry into vehicles!\n\r";
- bit warning_enable = 0;
- sbit K1 = P2^0;
- sbit LED = P2^1;
- void uart_init(void)
- {
- TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
- TH1 = 0xFD; // 波特率[url=mailto:9600@11.0592MHz]9600@11.0592MHz[/url]
- TL1 = 0xFD;
- SCON = 0x50; // 设定串行口工作方式
- PCON&= 0xef; // 波特率不倍增
- TR1 = 1; // 启动定时器1
- }
- void send_warning()
- {
- unsigned char i = 0;
- while(str_warning[i] != '\0')
- {
- SBUF = str_warning[i];
- while(!TI); // 等特数据传送
- TI = 0; // 清除数据传送标志
- i++; // 下一个字符
- }
- }
- void delay_ms(unsigned int ms)
- {
- unsigned char i;
- while(ms--)
- {
- for(i = 0; i < 120; i++);
- }
- }
- void main()
- {
- uart_init();
- LED = !warning_enable;
- EX0 = 0;
- IT0 = 1;
- EA = 1;
- while(1)
- {
- if(K1 == 0) // 扫描按键
- {
- delay_ms(10); // 延时去抖动
- if(K1 == 0) // 再次扫描
- {
- while(K1 == 0);
- warning_enable = !warning_enable; // 报警使能标志
- LED = !warning_enable; // led指示灯
- IE0 = 0; // 清除中断标志
- EX0 = warning_enable; // 使能或禁止外部中断
- }
- }
- }
- }
- void exit0() interrupt 0
- {
- send_warning(); // 触发中断则发送报警信息
- }