找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2437|回复: 6
收起左侧

51单片机在倒计时的时候蜂鸣器不响,倒计为0时蜂鸣器响

[复制链接]
ID:992665 发表于 2021-12-15 17:59 | 显示全部楼层 |阅读模式
1黑币
#include <reg52.h>

sbit DGT0=P2^3;//数码管控制位
sbit DGT1=P2^2;
sbit DGT2=P2^1;
sbit DGT3=P2^0;
sbit BEEP=P2^5;


unsigned char code  LedChar[]={
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char LedBuff[4]={0xF9,0xC0,0xC0,0xC0};//显示数据储存空间
unsigned char  flagls=0;//工作表示
unsigned int cnt=0;//计数器
unsigned char i=0;//循环变量
void main()
{
        unsigned int sec=1000;//定义变量,倒计时起始数据
        
        TMOD=0x01;//MOV TMOD,#01H//12M晶振产生1ms定时
        TH0=0xFC;//定时器初置
        TL0=0x18;
          TR0=1;//启动定时计数
        EA=1;//允许中断
        ET0=1;//允许定时器0中断
        while(1)
        {         
                LedBuff[0]=LedChar[sec%10];//计数值个位存入
                        LedBuff[1]=LedChar[sec%100/10];//十位
                        LedBuff[2]=LedChar[sec%1000/100];//百位
                        LedBuff[3]=LedChar[sec/1000];//千位

                if(flagls==1)//判断1秒时间到,工作表示有效
                {
                        flagls=0;//等等下一秒,清零
                        sec--;
                        
               
                }
        }
         
        
}
void InterruptTime0() interrupt 1//定时中断
{
        TH0=0xFC;//重赋初始值
        TL0=0x18;
        cnt++;//计数器加1
        if (cnt>=200)//时间
        {
                cnt=0;//准备下一秒记时
                flagls=1;//1秒时间到
              
        }
        P0=0xFF;//熄灭,P0高电平

         switch (i)
        {
                case 0:DGT3=0;DGT2=0;DGT1=0;DGT0=1;i++;P0=LedBuff[0];break;//个位
                case 1:DGT3=0;DGT2=0;DGT1=1;DGT0=0;i++;P0=LedBuff[1];break;//十位
                case 2:DGT3=0;DGT2=1;DGT1=0;DGT0=0;i++;P0=LedBuff[2];break;//百位
                case 3:DGT3=1;DGT2=0;DGT1=0;DGT0=0;i=0;P0=LedBuff[3];break;//千位
        }
}





  如何把修改程序加进去?

最佳答案

回复

使用道具 举报

ID:213173 发表于 2021-12-15 17:59 | 显示全部楼层
无标题.jpg
  1. #include <reg52.h>

  2. sbit DGT0=P2^3;//数码管控制位
  3. sbit DGT1=P2^2;
  4. sbit DGT2=P2^1;
  5. sbit DGT3=P2^0;
  6. sbit KEY0=P2^4;
  7. sbit BEEP=P2^5;
  8. sbit KEY1=P2^6;
  9. sbit KEY2=P2^7;

  10. unsigned char code  LedChar[]={
  11. 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  12. unsigned char LedBuff[4]={0xF9,0xC0,0xC0,0xC0};//显示数据储存空间
  13. bit sign,flag,B_flag;//工作表示
  14. unsigned int cnt=0;//计数器
  15. unsigned char i=0;//循环变量
  16. unsigned int sec,sec1=500;//定义变量,倒计时起始数据

  17. void main()
  18. {
  19.         unsigned int t1,t2,t3;
  20.         TMOD=0x01;//MOV TMOD,#01H//12M晶振产生1ms定时
  21.         TH0=0xFC;//定时器初置
  22.         TL0=0x18;
  23.         TR0=1;//启动定时计数
  24.         EA=1;//允许中断
  25.         ET0=1;//允许定时器0中断
  26.         while(1)
  27.         {         
  28.                 if(!KEY0 && !flag)
  29.                 {
  30.                         flag=1;//启动倒计时并自锁按键
  31.                         sec=sec1;//倒计时赋初值
  32.                         cnt=0;//定时器计数复位
  33.                         t2=0;//蜂鸣器计数复位
  34.                         BEEP=1;//蜂鸣器复位
  35.                         B_flag=0;//蜂鸣器工作标志复位
  36.                 }
  37.                 if(!KEY1 || !KEY2)//预置时间
  38.                 {
  39.                         if(++t1>=200 && !flag)
  40.                         {
  41.                                 t1=0;
  42.                                 sign=1;
  43.                                 if(!KEY1){if(sec1<1000)sec1++;}
  44.                                 if(!KEY2){if(sec1>10)sec1--;}
  45.                                 t3=3000;//显示切换保持时间
  46.                         }
  47.                 }
  48.                 else
  49.                 {                       
  50.                         if(sign)
  51.                         {
  52.                                 if(--t3==0)sign=0;
  53.                         }               
  54.                         t1=0;
  55.                 }
  56.                 if(sign)//预置显存
  57.                 {
  58.                         LedBuff[0]=LedChar[sec1%10];//计数值个位存入
  59.                         LedBuff[1]=LedChar[sec1%100/10];//十位
  60.                         LedBuff[2]=LedChar[sec1%1000/100];//百位
  61.                         LedBuff[3]=LedChar[sec1/1000];//千位
  62.                 }
  63.                 else//正常显存
  64.                 {
  65.                         LedBuff[0]=LedChar[sec%10];//计数值个位存入
  66.                         LedBuff[1]=LedChar[sec%100/10];//十位
  67.                         LedBuff[2]=LedChar[sec%1000/100];//百位
  68.                         LedBuff[3]=LedChar[sec/1000];//千位
  69.                 }
  70.                 if(B_flag)//判断蜂鸣器允许标志
  71.                 {
  72.                         BEEP=0;//蜂鸣器工作
  73.                         if(++t2>=5000)//蜂鸣器工作时长
  74.                         {
  75.                                 t2=0;//蜂鸣器计数复位
  76.                                 BEEP=1;//蜂鸣器复位
  77.                                 B_flag=0;//蜂鸣器工作标志复位
  78.                         }
  79.                 }
  80.         }
  81. }

  82. void InterruptTime0() interrupt 1//定时中断
  83. {
  84.         TH0=0xFC;//重赋初始值
  85.         TL0=0x18;
  86.         if(flag)
  87.         {
  88.                 cnt++;//计数器加1
  89.                 if (cnt>=1000)//时间
  90.                 {
  91.                         cnt=0;//准备下一秒记时
  92.                         sec--;
  93.                         if(sec==0)
  94.                         {
  95.                                 flag=0;//停止倒计时
  96.                                 B_flag=1;//允许蜂鸣器工作
  97.                         }
  98.                 }
  99.         }
  100.         P0=0xFF;//熄灭,P0高电平       
  101.         switch (i)
  102.         {
  103.                 case 0:DGT3=0;DGT2=0;DGT1=0;DGT0=1;i++;P0=LedBuff[0];break;//个位
  104.                 case 1:DGT3=0;DGT2=0;DGT1=1;DGT0=0;i++;P0=LedBuff[1];break;//十位
  105.                 case 2:DGT3=0;DGT2=1;DGT1=0;DGT0=0;i++;P0=LedBuff[2];break;//百位
  106.                 case 3:DGT3=1;DGT2=0;DGT1=0;DGT0=0;i=0;P0=LedBuff[3];break;//千位
  107.         }
  108. }
复制代码



回复

使用道具 举报

ID:993066 发表于 2021-12-17 22:14 | 显示全部楼层
你这就给一块钱,你太瞧不起人了,要不你就不给,要不你就多给点嘛。
回复

使用道具 举报

ID:993066 发表于 2021-12-17 22:15 | 显示全部楼层
我这可以给你一点建议,可以用case语句写
回复

使用道具 举报

ID:992665 发表于 2021-12-20 18:16 | 显示全部楼层
akesking 发表于 2021-12-17 22:14
你这就给一块钱,你太瞧不起人了,要不你就不给,要不你就多给点嘛。

十块的有,你帮到我,就ok
回复

使用道具 举报

ID:824490 发表于 2021-12-20 18:48 | 显示全部楼层
akesking 发表于 2021-12-17 22:14
你这就给一块钱,你太瞧不起人了,要不你就不给,要不你就多给点嘛。

然而,1HB,并不值1RMB!
回复

使用道具 举报

ID:824490 发表于 2021-12-20 18:56 | 显示全部楼层
倒计为0时蜂鸣器响 ?
1、以什么频率响?
2、响时要不要显示闪烁?
3、响多久?或者以什么方式停响?
4、响的过程中是否允许关闭响?
5、响完了是重新开始计时,还是就停在那边?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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