基于单片机报警器程序.docx
- 文档编号:4221486
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:7
- 大小:15.72KB
基于单片机报警器程序.docx
《基于单片机报警器程序.docx》由会员分享,可在线阅读,更多相关《基于单片机报警器程序.docx(7页珍藏版)》请在冰豆网上搜索。
基于单片机报警器程序
#include
unsignedchart,m,s,x,ior,cn;//电子表的各个位信号x显示字位置控制
unsignedintfoat,i;//6位有效数字eg:
4.56845
unsignedcharior;
unsignedchara[5]={0,0,0,0,0};//注意5个数数组内是5而不是4
sbitstart=P3^4;//启动AD
sbitOE=P3^7;//启动输出数据
sbitEOC=P3^3;//转换结束
sbitCLK=P3^6;//AD始终模拟
bitRecdat;
codeunsignedcharledcod[]={0x7e,0x12,0xbc,0xb6,0xd2,0xE6,0xee,0x32,0xfe,0xf6};
codeunsignedcharledcod1[]={0x7f,0x13,0xbd,0xb7,0xd3,0xE7,0xef,0x33,0xff,0xf7};//带小数点的字形码
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
voidInit_Timer0(void)
{
TMOD|=0x02;
TH0=0xd1;
TL0=0xd1;//定时0.05ms
EA=1;
ET0=1;
TR0=1;
}
/*------------------------------------------------
串口初始化子程序
------------------------------------------------*/
voidInitCom(void)//初始化串口
{
SCON|=0x50;//01010000B,工作方式1,8位UART,波特率可变,允许接收
TMOD|=0x20;//T1工作于方式2自动重装
TCON|=0x40;//定时器1开始计数TR1=1
TH1=250;//T1计数初值波特率为4800
TL1=250;
RI=0;TI=0;//清发送接收标志
ES=1;//开串口
}
/*--------------------------------------------------
显示子程序
---------------------------------------------------*/
voiddisplay(unsignedcharnum)
{
switch(num)
{
case0:
{
ior=foat/10000;//3
a[0]=ior;
P1=ledcod1[ior];
P0=0x7e;
x++;
}
break;
case1:
{
ior=(foat-10000*a[0])/1000;
P1=ledcod[ior];
a[1]=ior;//5
P0=0xfd;
x++;
}
break;
case2:
{
ior=(foat-10000*a[0]-1000*a[1])/100;
P1=ledcod[ior];
a[2]=ior;//3
P0=0xfb;
x++;
}
break;
case3:
{
ior=(foat-10000*a[0]-1000*a[1]-100*a[2])/10;
P1=ledcod[ior];
a[3]=ior;//1
P0=0xf7;
x++;
}
break;
case4:
{
ior=foat-10000*a[0]-1000*a[1]-100*a[2]-10*a[3];//6
P1=ledcod[ior];
a[4]=ior;
P0=0xef;
x++;
}
break;
case5:
{
ior=foat-10000*a[0]-1000*a[1]-100*a[2]-10*a[3];//6
P1=ledcod[ior];
P0=0xdf;
x++;
}
break;
default:
break;
}
}
/*------------------------------------------------
串口发送
-------------------------------------------------*/
voidComOut(void)//向串口发送数据
{unsignedchari;
for(i=0;i<5;i++)
{
SBUF=a[i];//发送数据t
while(!
TI);//等待发送完成
TI=0;
}
SBUF=0x0;
while(!
TI);//等待发送完成
TI=0;
SBUF=0x0;
while(!
TI);//等待发送完成
TI=0;
SBUF=0x0;
while(!
TI);//等待发送完成
TI=0;
}
/*-----------------------------------------------------
延时函数
------------------------------------------------------*/
voiddelay(unsignedinti)
{
while(i--);
}
/********************主函数************************/
main()
{
Recdat=0;
x=0;
P2=0xff;//P2口工作于读,所以先写1,阻断内部的cmos
EOC=1;//
Init_Timer0();
InitCom();
while
(1)
{
if(i==79)//开始的时候这里没加采样时间(79*0.05=3.94ms),导致始终无法采样到信号
{
delay(8000);//为了使数码管的数字让人眼能够分辨。
增加了这个延时
start=0;
start=1;//AD在上升沿复位,在下降沿开始转换(ST端给出一个至少有100ns宽的正脉冲信号)
start=0;
}
delay(8);//转换时间为20us
if(EOC==1)//查询高电平的到来。
转换完毕AD0809的EOC会输出一个高电平
{
OE=1;//打开--将数据发出到单片机的P2口
delay
(2);
foat=P2*196;
OE=0;//输出数据线呈高阻状态
}
if(Recdat)
{
Recdat=0;
ComOut();
}
}
}
/*****************************************************/
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
voidTimer0_isr(void)interrupt1using2
{
i++;
CLK=~CLK;//为AD转换提供时钟周期0.05ms20khz
if(i==80)//每0.05ms*50=2.5ms调用一次显示
{
i=0;
if(x==6)
{x=0;}
display(x);
}
}
/*---------------------------------------------------
串口中断接收
----------------------------------------------------*/
voidComINT()interrupt4using2//中断接收程序
{
if(RI)//判断是否接收完,接收完成后,由硬件置RI位
{
cn=SBUF;//读入缓冲区
RI=0;//清标志
Recdat=1;//有数据,建立标志
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 报警器 程序