找回密码
 立即注册
查看: 628|回复: 5

TM1640超大声闹铃20230415时间更准确修复BUG11.0592(带立创PCB源文件)

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:378
  • 最近打卡:2025-05-01 07:48:27

43

主题

336

回帖

591

积分

高级会员

积分
591
发表于 2024-3-19 12:33:59 | 显示全部楼层 |阅读模式
TM1640超大声闹铃20230415时间更准确修复BUG11.0592(带立创PCB源文件)   stc15w408AS 204都可以


153937tdpv7qhvbgdkkd1v.jpg

PCB

PCB




//采用stc15w204s单片机tm1640芯片 DIN=P1^0;        15  CLK=P1^1; 16
//CODE[7]=CODE[7] | 10000000;//显示小数点
/*****************************************************************************
*版权信息:深圳天微电子有限公司
*文 件 名:TM1640-V1.0
*当前版本:V1.0
*MCU 型号:STC12C5608AD
*开发环境:Keil uVision4
*晶震频率:11.0592MHZ      
*完成日期:2013-07-18
*程序功能:数码管驱动:驱动8段16位LED共阴数码管显示0123456789AbCdEF;
*免责声明:1.此程序为TM1640驱动LED数码管演示程序,仅作参考之用。
            2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任            
********************************************************************************/
           //头文件
#include "intrins.h"                   //包含_nop_()指令头文件
#include <STC15F2K60S2.H>



/********************定义控制端口**********************/
sbit DIN=P1^5;                                   //定义DIN数据端口 stc15w204s 15
sbit CLK=P1^4;                                   //定义CLK数据端口 stc15w204s 16
//需要显示的数据
unsigned int temptime=0;//秒计算
unsigned int xsbl;
//需要显示的数据
/********************定义数据*************************/
//unsigned char code CODE[16]={0xBB,0x81,0xEA,0xE3,0xD1,0x73,0x7B,0xA1,0xFB,0xF3,0xF9,0x5B,0x3A,0xCB,0x7A,0x78,};  //共阴数码管0~F字型码,需根据硬件接法定义               
unsigned int  CODE[16]={0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,};  //共阴数码管0~F字型码,需根据硬件接法定义               

/********************延时函数,延时nms******************/
void delay_nms(unsigned int n)
{
unsigned int i;
while(n--)
for(i=0;i<550;i++);
}



/********************读秒计算******************/
void dumiao()
{
        temptime=temptime+1;
        if (temptime>=10 && xsbl>0)
        {xsbl=xsbl-1;
                temptime=0;
        }
               

}


/********************Start函数*************************/
void I2CStart()
{
    DIN=1;
    CLK=1;
        _nop_();
        _nop_();
        DIN=1;
        _nop_();
        _nop_();
        DIN=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        CLK=0;
        _nop_();
        _nop_();
}
/********************Stop函数*************************/
void I2CStop()
{
        CLK=1;
        _nop_();
        _nop_();
        DIN=0;
        _nop_();
        _nop_();
        DIN=1;
        _nop_();
        _nop_();
        CLK=0;
        DIN=0;

}

/***************发送8bit数据,从低位开始**************/
void I2CWritebyte(unsigned char oneByte)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
    CLK=0;
        if(oneByte&0x01)
          DIN=1;
        else
          DIN=0;
        _nop_();
        _nop_();
        _nop_();
        CLK=1;
        oneByte=oneByte>>1;
        }
        CLK=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        DIN=0;
        _nop_();
        _nop_();
}

/************显示函数,数码管1~16位显示0~F************/
void disp()
{
unsigned char i;

I2CStart();
I2CWritebyte(0x40);        //数据命令设置:普通模式,地址自动加一
I2CStop();

I2CStart();
I2CWritebyte(0xc0);        //地址命令设置:初始地址00H
for(i=0;i<16;i++)                //发送16位显示数据
{
   I2CWritebyte(CODE);
}
I2CStop();

I2CStart();
I2CWritebyte(0x8c);        //显示控制:显示开,脉冲宽度设为11/16
I2CStop();
}








void Timer0Init(void)                //1毫秒@12.000MHz
{
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;                //设置定时器模式
        TL0 = 0x65;                //设置定时初值
        TH0 = 0xFC;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
        ET0=1;//打开定时器0中断允许
        EA=1;//打开总中断
}



/*******************************************************************************
* 函 数 名         : void Timer0() interrupt 1
* 函数功能                   : 定时器0中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer0() interrupt 1
{
        static unsigned int i;
        TH0=0XFC;        //给定时器赋初值,定时1ms    因是110592  TL0=0x65这里数大中断的快//https://zhuanlan.zhihu.com/p/529743808?utm_id=0
        TL0=0X65;
        i++;
        if(i==1000)
        {
                i=0;
                if(xsbl>0)
                {xsbl=xsbl-1;
                        if (xsbl == 1 )
        {
        P37=1;//打开报警
        }
                }
               
        }       
}





void main()
{                Timer0Init();  //定时器0初始化

    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0xf0;
    P3M1 = 0x00;
        P37=0;//关闭报警
//看门狗程序
    WDT_CONTR |= 0x20;      //启动看门狗
//看门狗程序
       
                xsbl=0000;
while(1)
{
               
        if (P10 == 0)               
        {delay_nms(100);
                if (P10 == 0)               
                {xsbl=xsbl+10;}//P10按下计数器加10
        }       
        if (P11 == 0)
        {delay_nms(100);
        if (P11 == 0)
        {        xsbl=xsbl+100;}//P11按下计数器加100
        }
       
        if (P13 == 0)
        {delay_nms(500);
        if (P13 == 0)
        {                P37=1;}//光耦打开报警
        }
       
       
       
       
       
       
        if (P12 == 0)
        {xsbl=0;//P12按下计数器归0
        P37=0;//关闭报警
        }

       
       
       
       
       
        WDT_CONTR=0xfc;//喂狗(常用)

//重新定义数码管显示的数据
        /*
                0x3F,  //"0"
    0x06,  //"1"
    0x5B,  //"2"
    0x4F,  //"3"
    0x66,  //"4"
    0x6D,  //"5"
    0x7D,  //"6"
    0x07,  //"7"
    0x7F,  //"8"
    0x6F,  //"9"
    0x77,  //"A"
    0x7C,  //"B"
    0x39,  //"C"
    0x5E,  //"D"
    0x79,  //"E"
    0x71,  //"F"
    0x76,  //"H"
    0x38,  //"L"
    0x37,  //"n"
    0x3E,  //"u"
    0x73,  //"P"
    0x5C,  //"o"
    0x40,  //"-"
    0x00  //熄灭
*/
//取数据
CODE[0]=xsbl % 10000/1000;
CODE[1]=xsbl % 1000/100;
CODE[2]=xsbl % 100/10;
CODE[3]=xsbl % 10;

CODE[4]=xsbl % 10000/1000;
CODE[5]=xsbl % 1000/100;
CODE[6]=xsbl % 100/10;
CODE[7]=xsbl % 10;


//取数据
//取数据
//CODE[0]=7;
//CODE[1]=7;
//CODE[2]=9;
//CODE[3]=9;
//取数据
//数据比较
//第1位
switch(CODE[0]){       
        case 0: CODE[0]=0x3F; break;
        case 1: CODE[0]=0x06; break;
        case 2: CODE[0]=0x5B; break;
        case 3: CODE[0]=0x4F; break;       
        case 4: CODE[0]=0x66; break;
        case 5: CODE[0]=0x6D; break;
        case 6: CODE[0]=0x7D; break;
        case 7: CODE[0]=0x07; break;
        case 8: CODE[0]=0x7F; break;
        case 9: CODE[0]=0x6F; break;       
}
//第1位
//第2位
switch(CODE[1]){       
        case 0: CODE[1]=0x3F; break;
        case 1: CODE[1]=0x06; break;
        case 2: CODE[1]=0x5B; break;
        case 3: CODE[1]=0x4F; break;       
        case 4: CODE[1]=0x66; break;
        case 5: CODE[1]=0x6D; break;
        case 6: CODE[1]=0x7D; break;
        case 7: CODE[1]=0x07; break;
        case 8: CODE[1]=0x7F; break;
        case 9: CODE[1]=0x6F; break;       
}
//第2位
//第3位
switch(CODE[2]){       
        case 0: CODE[2]=0x3F; break;
        case 1: CODE[2]=0x06; break;
        case 2: CODE[2]=0x5B; break;
        case 3: CODE[2]=0x4F; break;       
        case 4: CODE[2]=0x66; break;
        case 5: CODE[2]=0x6D; break;
        case 6: CODE[2]=0x7D; break;
        case 7: CODE[2]=0x07; break;
        case 8: CODE[2]=0x7F; break;
        case 9: CODE[2]=0x6F; break;       
}
//第3位
//第4位
switch(CODE[3]){       
        case 0: CODE[3]=0x3F; break;
        case 1: CODE[3]=0x06; break;
        case 2: CODE[3]=0x5B; break;
        case 3: CODE[3]=0x4F; break;       
        case 4: CODE[3]=0x66; break;
        case 5: CODE[3]=0x6D; break;
        case 6: CODE[3]=0x7D; break;
        case 7: CODE[3]=0x07; break;
        case 8: CODE[3]=0x7F; break;
        case 9: CODE[3]=0x6F; break;       
}
//第4位
//第5位
switch(CODE[4]){       
        case 0: CODE[4]=0x3F; break;
        case 1: CODE[4]=0x06; break;
        case 2: CODE[4]=0x5B; break;
        case 3: CODE[4]=0x4F; break;       
        case 4: CODE[4]=0x66; break;
        case 5: CODE[4]=0x6D; break;
        case 6: CODE[4]=0x7D; break;
        case 7: CODE[4]=0x07; break;
        case 8: CODE[4]=0x7F; break;
        case 9: CODE[4]=0x6F; break;       
}
//第5位
//第6位
switch(CODE[5]){       
        case 0: CODE[5]=0x3F; break;
        case 1: CODE[5]=0x06; break;
        case 2: CODE[5]=0x5B; break;
        case 3: CODE[5]=0x4F; break;       
        case 4: CODE[5]=0x66; break;
        case 5: CODE[5]=0x6D; break;
        case 6: CODE[5]=0x7D; break;
        case 7: CODE[5]=0x07; break;
        case 8: CODE[5]=0x7F; break;
        case 9: CODE[5]=0x6F; break;       
}
//第6位
//第7位
switch(CODE[6]){       
        case 0: CODE[6]=0x3F; break;
        case 1: CODE[6]=0x06; break;
        case 2: CODE[6]=0x5B; break;
        case 3: CODE[6]=0x4F; break;       
        case 4: CODE[6]=0x66; break;
        case 5: CODE[6]=0x6D; break;
        case 6: CODE[6]=0x7D; break;
        case 7: CODE[6]=0x07; break;
        case 8: CODE[6]=0x7F; break;
        case 9: CODE[6]=0x6F; break;       
}
//第7位
//第8位
switch(CODE[7]){       
        case 0: CODE[7]=0x3F; break;
        case 1: CODE[7]=0x06; break;
        case 2: CODE[7]=0x5B; break;
        case 3: CODE[7]=0x4F; break;       
        case 4: CODE[7]=0x66; break;
        case 5: CODE[7]=0x6D; break;
        case 6: CODE[7]=0x7D; break;
        case 7: CODE[7]=0x07; break;
        case 8: CODE[7]=0x7F; break;
        case 9: CODE[7]=0x6F; break;       
}
//第8位

/*
if (xsbl<10)
        CODE[2]=0x00;
if (xsbl<100)
CODE[1]=0x00;
if (xsbl<1000)
        CODE[0]=0x00;
*/


//if (xsbl>10 && xsbl<100)
//        CODE[2]=CODE[2] | 10000000;//显示小数点
//if (xsbl>100 && xsbl<1000)
//CODE[1]=CODE[1] | 10000000;//显示小数点
//if (xsbl>1000  && xsbl<10000)
//        CODE[0]=CODE[0] | 10000000;//显示小数点
//数据比较//

//CODE[3]=0x6F;

disp();                         //显示
if (xsbl>=10000)
{xsbl=0;
        WDT_CONTR=0x21;//喂狗(常用)
        delay_nms(1000);
}


}
}


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-3-23 17:14:35 | 显示全部楼层
都上鸣笛喇叭了,何不来一对双音蜗牛?
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:378
  • 最近打卡:2025-05-01 07:48:27

43

主题

336

回帖

591

积分

高级会员

积分
591
发表于 2024-3-24 13:23:06 | 显示全部楼层
晓*** 发表于 2024-3-23 17:14
都上鸣笛喇叭了,何不来一对双音蜗牛?

这个需要4块多就可以了。便宜也不占地方。主要就是用来做闹铃。目前就用这个。有需要用哪种都可以。这个里面没有电路也是很耐用的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-3-24 21:02:20 | 显示全部楼层
qepu*** 发表于 2024-3-24 13:23
这个需要4块多就可以了。便宜也不占地方。主要就是用来做闹铃。目前就用这个。有需要用哪种都可以。这个 ...

喇叭负极回路是不是底层这一根线,感觉太细了,能扛得住一两安的电流吗?
QQ截图20240324210049.png

睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:378
  • 最近打卡:2025-05-01 07:48:27

43

主题

336

回帖

591

积分

高级会员

积分
591
发表于 2024-3-29 16:12:38 来自手机 | 显示全部楼层
晓飛飛 发表于 2024-3-24 21:02
喇叭负极回路是不是底层这一根线,感觉太细了,能扛得住一两安的电流吗?



就是这很线。还真是太细了。一般持续的时间不超过10秒。所以在用一直没问题。感谢提醒。下次做改掉这个问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:503
  • 最近打卡:2025-05-02 08:06:55
已绑定手机

1

主题

834

回帖

1447

积分

金牌会员

积分
1447
发表于 2024-4-6 08:28:55 | 显示全部楼层
感谢分享
靡不有初,鲜克有终
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 08:41 , Processed in 0.137916 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表