0
点赞
收藏
分享

微信扫一扫

单片机案例之拨码开关控制报警器(持续更新...)

seuleyang 2022-02-12 阅读 56

单片机案例

结合proteus和keil

普通开关和拨码开关(报警器)

原理图

在这里插入图片描述

程序
/*
	名称:普通开关与拨码开关
	说明:SW1是普通开关,控制显示开关
		 SW2是拨码开关,控制报警器

*/
#include<reg51.h>
#include<intrins.h>
#define INT8U unsigned char
#define INT16U unsigned int 

//0-9的共阴极数码管段码表
code INT8U CC_Table[]=
{
	0x3F,0x06,
	0x5B,0x4F,
	0x66,0x6D,
	0x7D,0x07,
	0x7F,0x6F
};

INT8U show_buff[]={0,0,0};//显示缓冲
sbit BEEP=P3^3;//蜂鸣器
sbit SW1=P3^0;//控制显示
sbit SW2=P3^6;//控制报警器
sbit CE=P2^0;//74LS245的使能控制端


//延时
void delay_ms(INT16U x)
{
	INT8U t;
	while(x--)
	{
		for(t=0;t<120;t++);
	}
}

//报警声
void alarm(INT8U t)
{
	INT8U i,j;
	for(i=0;i<150;i++)
	{
		BEEP=~BEEP;//输出声音
		for(j=0;j<t;j++);//输出不同频率
	}	
}

//主程序
void main()
{
	INT8U i;
	CE=0;

	while(1)
	{
		if(SW1)//断开
		{
			CE=1;//不显示
		}
		else//闭合
		{
			CE=0;//显示
			//由P1端口读取的拨码开关值分解数位
			show_buff[0]=P1/100;
			show_buff[1]=P1/10%10;
			show_buff[2]=P1%10;
			//刷新显示
			for(i=0;i<3;i++)
			{
				P0=0x00;//暂时关闭段码
				P2=(~(0x20<<i))&0xF0;//发送位码
				P0=CC_Table[show_buff[i]];//发送段码
				delay_ms(5);
			}
		}
		if(SW2)//报警器发声
		{
			alarm(100);
			alarm(150);
		}
	}
}

举报

相关推荐

0 条评论