开始定时器初始化开中断,启动定时器检测P1.0是否为高电平等T0,T1中断请求 P1.0是高?否是向P1.1发送2秒的高电平脉冲,进行报警图3-1 程序流程图
13
开始定时器T0初始化开中断,启动定时器T0硬件定时等中断TF0定时100ms到?是到000BH执行中断服务程序T0赋初值,向T1的计数端P3.5发送脉冲图3-2 T0中断程序流程图
14
否
开始定时器T1初始化开中断,启动定时器T1硬件计数等中断TF1否计数30000次是否到?是到0013H执行中断服务程序P3.3发出一个脉冲触发报警电路图3-3 T1中断程序流程图
3.2 主要程序介绍
本设计采用c语言编写。c语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。
各个主要程序段介绍如下:
1.设计要求满足定时50分钟后报警,其初值计算如下:
15
50min*60=3000s=30000*100ms
100ms用T0定时设置T0工作方式1,30000次用T2计数,设T2工作方式为11。 T0的定时初值为:2^16-100ms/2us=15536=C3B0H; T1的计数初值为65536-30000=35536=8AD0H 2.程序为:
//***********液晶lcd显示****************//
#include
#define uchar unsigned char #define uint unsigned int
sbit trig=P2^0; sbit echo=P3^2; sbit baojing=P3^3;
sbit lcdrs=P1^2; sbit lcdrw=P1^1; sbit lcden=P1^0;
bit succeed_flag; //测量成功标志
uchar tH,tL; long xx;
void lcd_delay(uchar x);
void trig_delay() { uchar i; for(i=100;i>1;i--); }
void write_com(uchar com) //写命令函数 { lcdrs=0; P0=com; lcd_delay(20); lcden=1;
16
lcd_delay(20); lcden=0; }
void write_date(uchar date) //写数据函数 { lcdrs=1; P0=date; lcd_delay(20); lcden=1; lcd_delay(20); lcden=0; }
void init_lcd() //初始化函数 { lcden=0; //默认开始状态为关使能端,见时序图 lcdrw=0; //选择状态为 写 write_com(0x0f); write_com(0x38); //显示模式设置,默认为0x38,不用变。 write_com(0x01); //显示清屏,将上次的内容清除,默认为0x01. write_com(0x0c); //显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪 write_com(0x06); //设置光标状态默认0x06,为读一个字符光标加1. write_com(0x80); //设置初始化数据指针,是在读指令的操作里进行的 }
void display() //显示函数 { uchar bai=0,shi=0,ge=0,xiao=0; bai=xx/1000; shi=xx00/100; ge=xx0/10; xiao=xx; write_com(0x80); write_date('l'); write_date('o'); write_date('n'); write_date('g'); write_date('='); write_date('0'+bai); write_date('0'+shi); write_date('0'+ge); write_date('.'); write_date('0'+xiao);
17