单片机案例
结合proteus和keil
普通开关和拨码开关(报警器)
原理图

程序
#include<reg51.h>
#include<intrins.h>
#define INT8U unsigned char
#define INT16U unsigned int
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;
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;
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);
}
}
}