|
本帖最后由 rsx9583 于 2019-6-7 21:10 编辑
发不了图片,哎——————————————————————
/*曝光机定时器程序*/
/**********************************
** 程序名称:曝光机定时器程序 **
** 支持芯片:STC11F02E **
** 芯片主频:12M **
** 编写日期:2019年3月26日 **
** 编写人员:
** 联系方式: **
** 著 作 权: CXDZ **
** 版 本: V1.0 **
** 备注说明: **
**********************************/
#include"reg51.h"
#include"intrins.h" //包含_nop_()函数
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit JQX=P3^7;//继电器
sbit ALAM=P3^0; //蜂鸣器
u8 ALAM_FLG;
u8 SEC_FLG;
sbit LSA=P3^5;
sbit LSB=P3^4;
sbit LSC=P3^3;
sbit LSD=P3^2;
u8 code smgduan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xC7,0xFF};//显示0~F的值
u8 n=0;
u16 s_val;
u16 a,b,c,t;
void delayms(u16 xms) // xms代表需要延时的毫秒数(可能不准)
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
void disp(void)
{
LSA=1;LSB=0;LSC=0;LSD=0; //显示第0位
P1=smgduan[a%10/1];
delayms(5);
LSA=0;
P1=0xFF;
delayms(5);
LSA=0;
LSA=0;LSB=1;LSC=0;LSD=0; //显示第1位
P1=smgduan[(a%100/10)];
delayms(5);
LSB=0;
P1=0xFF;
delayms(5);
LSB=0;
LSA=0;LSB=0;LSC=1;LSD=0; //显示第2位
P1=smgduan[a%1000/100];
delayms(5);
LSC=0;
P1=0xFF;
delayms(5);
LSC=0;
LSA=0;LSB=0;LSC=0;LSD=1; //显示第3位
P1=smgduan[a%10000/1000];
delayms(5);
LSD=0;
P1=0xFF;
delayms(5);
LSD=0;
}
//**********************
void be_be()
{u8 d;
ALAM=1;
for(d=70;d>0;d--)
{ disp();}
ALAM=0;
for(d=70;d>0;d--)
{ disp();}
ALAM=1;
for(d=70;d>0;d--)
{ disp();}
ALAM=0;}
/*******************************************************************************
* 函 数 名 :
* 函数功能 :
* 输 入 :
* 输 出 :
*******************************************************************************/
void InitTimer0(void)
{
TMOD=0x01;
TH0=0xFC;
TL0=0xBD;
EA=1;
ET0=1;
TR0=1;
}
void Timer0Interrupt(void) interrupt 1
{
TH0=0xFC; /**慢慢试出来的数据,基本准确,可以自己修改,提高计时精度*/
TL0=0xBD;
s_val++;
if(s_val>=500)
{
SEC_FLG=0xFF;
s_val=0;
}
if(t==0) {TR0=0;
JQX=0;
ALAM_FLG=0xFF;
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
ALAM_FLG=0x00;
SEC_FLG=0x00;
s_val=0x00;
ALAM=0;
JQX=1; //继电器初始状态为开
t=150; //定时150秒,改变t值,可以改变显示,最大四位,小于四位前几位为0显示。
InitTimer0();
while(1)
{
if(SEC_FLG==0xFF)
{SEC_FLG=0x00;
t--;}
a=t;
disp();
if(ALAM_FLG==0xFF)
{be_be();
be_be();
be_be();
be_be();
be_be();
ALAM_FLG=0;
}
}
}
|
|