单片机实验报告简易报警器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简易报警器

一、本次根据单片机课程设计题目与要求,我选择的是设计一个简易报警器。

二、课程设计要求:自制一个单片机最小系统,包括串口下载、复位电路,采用两路外部中断输入门禁和红外探测两路信号(采用两个小按键模拟),中断信号输入后能将报警信息在四位一体数码管上显示,并输出声光报警信号。

三、设计所需的硬件:的无极性电容五个;10uF的极性电容两个;发光二极管两个;三极管9013四个;千欧的排阻一个;100,1k,10k 的电阻若干;芯片插座若干;的晶振一个;单片机STC89C54RD芯片一块;MAX232串口芯片一块;导线若干;

四、课程设计要求是用按键红外探测和输入门禁。但是由于实验室设备的条件,我采用的是红绿两个二极管代替红外探测的发光显示和输入门禁的报警装置。

五、总体设计思想

六、晶振电路

振荡器是数字钟的核心。振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。石英晶体振荡器的作用是产生时间标准信号。因此,一般采用石英晶体振荡器经过分频得到这一时间脉冲信号。

七、按键模块

鉴于使用中断电路会增加硬件电路的复杂度,本电路采用独立按键的方法,只需在程序中加入扫描程序即可。其中接按键光标移位,接按键时间加数,接按键时间减数,接按键模拟红外探测,接按键模拟输入门禁,。

九、SPEAKER电路

报警器装置的原理就是利用出来的高低电平交换使得扬声器发出声音。但是由于实验室的器材有限,所以我们改用了发光二极管来代替SPEAKER电路。

十、实验仿真程序如下:

#include <>

#include <>

#define uchar unsigned char

#define uint unsigned int

uchar code table_data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x00};

uchar code table_select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar table_buffer[]={0,0};

uchar count0,count1;

sbit LEDREDCON=P0^0;

sbit LEDGREENCON=P0^1;

sbit spe=P0^2;

sbit Kint0=P3^2;

sbit Kint1=P3^3;

sbit RS=P3^7;

sbit RW=P3^6;

sbit E=P3^5;

uchar FRQ=0x00;

void delay(uint ms)

{

uchar i;

while(ms--)

{

for(i=0;i<120;i++);

}

}

void check_busy() //判断LCD忙,要不停的检测,所以需要有个大循环

{

while(1)

{

E=0; //当RS=0和RW=1时,可以读忙信号。

delay(3);

RS=0;

delay(3);

RW=1;

delay(3);

E=1;

delay(3);

if((P1&0x80)==0)

{

break;

}

E=0;

}

}

void write_command(uchar tempdata)

{

E=0; //当RS=0和RW=0时,可以写入指令或者显示地址。

delay(3);

RS=0;

delay(3);

RW=0;

P1=tempdata;

E=1; //此处高电平是将数据锁存起来

delay(3);

E=0;

check_busy();

}

void init_1602() //LCD1602的初始化子函数

{

write_command(0x38);//写指令

write_command(0x0c);//显示开和光标位置

write_command(0x01);//显示清屏

write_command(0x06);//显示光标移动设置

}

void write_data(uint j) //向LCD1602液晶显示器写数据

{

E=0; //当RS=1和RW=0时,可以写入数据。

delay(3);

RS=1;

RW=0;

P1=j;

delay(3);

E=1; //此处高电平是将数据锁存起来delay(3);

E=0;

check_busy();

}

void init() //初始化子函数

{

TMOD = 0x11;

TH0 = 0x00;

TL0 = 0xff;

IT0 = 1;

IT1 = 1;

IE = 0x8f;//EA=1;ET1=1;EX1=0;ET0=1;EX0=1;

IP = 0x05;

TR0 = 0;

TR1 = 0;

}

void main()

{

init();

init_1602();

while(1)

{

FRQ++;

delay(10);

}

}

void external_int0() interrupt 0 {

write_command(0x01);

LEDGREENCON=1;

count1++;

if(count1==1)

{

if(LEDREDCON==1)

相关文档
最新文档