标题:
51单片机做的带数码显示定时器源码
[打印本页]
作者:
zhou12306
时间:
2018-1-27 11:06
标题:
51单片机做的带数码显示定时器源码
可调延时关断时间
单片机源程序如下:
/*****************************************************************************************************************************
1.开机,外接触摸开关K1为高电平,定时器正常倒计时,继电器吸合接通LED点亮,如中途无操作,定时40分钟后断开继电器, LED熄灭。
2.如果开机正常倒计时过程中,用户不需要LED点亮,则按下触摸开关K1,K1为低电平,定时器停止工作并恢复初始定时状态,继电器断开
等待下次K1出现高电平时,再正常倒计时工作。
*******************************************************************************************************************************/
#include<reg52.h>
unsigned int time; //中断次数变量
unsigned char second10, second1,minute10,minute1; //定义十分、个分、十秒、个秒
unsigned char min=40,sec=59; //设置倒计时时间
sbit jdq=P1^4; //继电器为P1.4口
sbit fmq=P1^3; //蜂鸣器为P1.3口
sbit K0=P3^2; //定义外中断INT0为P3.2口
sbit min10=P1^0;
sbit min1=P1^1;
unsigned char code duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管0至9段码
//unsigned char code wiema[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //8位共阳数码管 0x7f为最右侧的数码管
/********************************************
延时子程序0.25MS
******************************************/
void delay(unsigned int i)
{
unsigned char j;
while(i--)
{
for(j=25;j>0;j--);
}
}
/***********************************************
数码管显示子程序
**********************************************/
void display(minute10,minute1,second10, second1)
{
min10=1;
min1=1;
P0=duanma[minute10];
min10=0;
delay(6);
min10=1;
min1=1;
P0=duanma[minute1];
min1=0;
delay(6);
}
/****************************************************
蜂鸣器发声函数,每1次大约响1秒
****************************************************/
void beep(unsigned char a) //
{
unsigned int b;
while(a--)
{
for(b=0;b<1000;b++)
{
fmq=0;
delay(1);
fmq=1;
delay(1);
}
}
}
/**********************************************/
main()
{
TMOD=0x01; //T0工作模式是方式1
TH0=0x49; //定义初始值为50ms 此初值用11.0592MHZ晶振,实测40分钟误差3秒
TL0=0x44;
EA=1; //开总中断
ET0=1; //允许定时器T0中断
TR0=1; //开启T0计时
EX0=1;
IT0=1;
delay(800);
while(1)
{
if(K0==1)
{
TR0=1;
jdq=0;
if(K0==1&&min==0)
{TR0=0;min=0;sec=0;jdq=1;
}
}
display(min/10,min%10,sec/10,sec%10);
}
}
/****************************************************/
void int0() interrupt 0 //外中断0
{
if(K0==0)
{
delay(500);
if(K0==0)
{
TR0=0;
jdq=1;
beep(1);
min=40;sec=59;
}
}
}
/*********************************************/
void timer0() interrupt 1 //T0中断
{
TH0=0x49;
TL0=0x44;
time++;
if(time==20) //50ms*20=1秒
{
time=0;
sec--;
if(sec==0)
{
sec=59;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
yskz.rar
(1.36 KB, 下载次数: 18)
2018-1-27 11:05 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1