经常自己做板子,每次曝光用手机计时,这次闲着没事做了个定时器,技术含量不高,可以供大家玩玩。
制作出来的实物图如下:
工作状态
工作状态
装配好的样子
装配好的样子
自己感光法做的双面PCB
自己感光法做的双面PCB
外观,还没用螺丝固定
外观,还没用螺丝固定
protel画的原理图和PCB图如下:(51hei附件中可下载工程文件)
原理图
PCB
压缩包文件内容
/*曝光机定时器单片机源程序*/
/**********************************
** 程序名称:曝光机定时器程序 **
** 支持芯片:STC11F02E **
** 芯片主频:12M **
** 编写日期:2019年 **
** 编写人员 **
** 联系方式: **
** 著 作 权: 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;
}
}
}
全部资料51hei下载地址:
感光板曝光机定时器.rar
(274.46 KB, 下载次数: 108)
|