一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 7707|回复: 42

[其他综合] 做个定时插座 单片机晶振不一样怎么改程序?现在好快

[复制链接]
发表于 2013-6-11 19:53 | 显示全部楼层 |阅读模式
 楼主| 发表于 2013-6-11 20:06 | 显示全部楼层
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint b;
uchar c,e;
char h,m;
uchar gewei,shiwei,baiwei,qianwei;//a为模式标志,
//mswc为模式选择完成标志,gewei,shiwei,baiwei,qianwei
//为个位寄存器,十位寄存器,百位寄存器,千位寄存器
sbit qian =P3^7;
sbit bai =P3^5;
sbit shi =P3^4;
sbit ge =P3^1;
sbit out =P3^3;
sbit set =P3^2;//设置键
sbit up =P3^0;//加
sbit md =P1^7;//秒点
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void delay(uchar z);
void display();
void delay(uchar z)
        {
          uint x,y;
             for(x=z;x>0;x--)
                for(y=74;y>0;y--);
         }
         void main()//定时模式
        {
                                    out=0;
              EA=1;
              EX0=1;//开set键中断
              ET0=1;//开定时器0做计时基准
              TMOD=0x02;
              TH0=(256-240);
              TL0=(256-240);
              b=0;
              c=0;
              e=1;//在定时模式中第一次按SET键时个位闪烁
              m=0;
              h=0;
              h=qianwei*10+baiwei;
              m=shiwei*10+gewei;
              TR0=0;
              while(1)
                      {
                              if(up==1)//按下SET键时的显示程序根据按下的次序显示
                                      {
                                              switch(e)
                                                      {
                                                              case 0://定时进行中的显示
                                                                      display();
                                                                      break;
                                                              case 1://个位闪烁                                                          02/06/2011 14:22:14 PAGE 2   

                                                                      P1=table[gewei];
                                                                      ge=1;
                                                                      shi=0;
                                                                      bai=0;
                                                                      qian=0;
                                                                      delay(250);
                                                                      ge=0;
                                                                      shi=0;
                                                                      bai=0;
                                                                      qian=0;
                                                                      delay(250);
                                                                      break;
                                                              case 2://十位闪烁
                                                                      P1=table[shiwei];
                                                                      ge=0;
                                                                      shi=1;
                                                                      bai=0;
                                                                      qian=0;
                                                                      delay(250);
                                                                      ge=0;
                                                                      shi=00;
                                                                      bai=0;
                                                                      qian=0;
                                                                      delay(250);
                                                                      break;
                                                              case 3:
                                                                      P1=table[baiwei];
                                                                      ge=0;
                                                                      shi=0;
                                                                      bai=1;
                                                                      qian=0;
                                                                      delay(250);
                                                                      ge=0;
                                                                      shi=0;
                                                                      bai=0;
                                                                      qian=0;
                                                                      delay(250);
                                                                      break;
                                                              case 4:
                                                                      P1=table[qianwei];
                                                                      ge=0;
                                                                      shi=0;
                                                                      bai=0;
                                                                      qian=1;
                                                                      delay(250);
                                                                      ge=0;
                                                                      shi=0;
                                                                      bai=0;
                                                                      qian=0;
                                                                      delay(250);
                                                                      break;
                                                      }
                                      }
                              if(up==0)//当UP键按下时
                              {
                                      delay(10);
                                      if (up==0)
                                              while(!up);
                                              switch(e)
                                                      {
                                                              case 1:
                                                                      gewei++;   

                                                                      if(gewei>9)
                                                                              gewei=1;
                                                                      break;
                                                              case 2:
                                                                      shiwei++;
                                                                      if(shiwei>5)
                                                                              shiwei=1;
                                                                      break;         
                                                              case 3:
                                                                      baiwei++;
                                                                      if(baiwei>9)
                                                                              baiwei=1;
                                                                      break;
                                                              case 4:
                                                                      qianwei++;
                                                                      if(qianwei>9)
                                                                              qianwei=1;
                                                                      break;
                                                      }
                                                      h=(qianwei*10+baiwei);
                                                      m=(shiwei*10+gewei);
                              }
                      }
      }
          void EX0_set()interrupt 0//set键
      {
                      EX0=0;
                      delay(10);
                      if(set==0)
                              {
                                      while(!set);
                                             
                                      TR0=0;
                                      e=e++;
                                      if(e>4)
                                              {
                                                      e=0;
                                                      TR0=1;//第五次按SET键则开始定时
                                                                                                                                                out=1;
                                              }
                              }
                              EX0=1;
      }
       void t0_time() interrupt 1
       {
              b=b++;
              if(b>=1250)
                      {
                              b=0;
                              c=c++;
                      }
                              if(c>=120)
                                      {
                                              c=0;
                                               m=m--;
                                      }
                                      if(m==0)
                                              if(h==0)
                                                      {          //当定时时间到后关闭定时器1,显示00:00不闪烁
                                                              ET0=0;
                                                              TR0=0;
                                                              P1=table[0];
                                                              md=0;
                                                              while(1)
                                                              {
                                                                      out=0;
                                                                      ge=1;
                                                                      shi=1;
                                                                      bai=1;
                                                                      qian=1;//全亮,继电器动作,整个程序将停在这里。
                                                              }
                                                      }
                                      if(m<0)
                                              {
                                                      m=59;
                                                      h=h--;
                                              }
      }
      
      void display()
              {
                              P1=0xff;//消隐
                              ge=1;
                              shi=0;
                              bai=0;
                              qian=0;
                              P1=table[m%10];//gewei
                              delay(2);
                              P1=0xff;
                              ge=0;
                              shi=1;
                              bai=0;
                              qian=0;
                              P1=table[m/10];//shiwei
                              delay(2);
                              P1=0xff;
                              ge=0;
                              shi=0;
                               bai=1;
                              qian=0;
                              P1=table[h%10];//baiwei
                              delay(2);
                              P1=0xff;
                              ge=0;
                              shi=0;
                              bai=0;
                              qian=1;
                              P1=table[h/10];//qianwei
                              delay(2);
                              md=c%2;
                              delay(2);
              }
回复

使用道具 举报

发表于 2013-6-11 20:32 | 显示全部楼层
改delay();
回复

使用道具 举报

发表于 2013-6-11 20:33 | 显示全部楼层
没玩过51,把if(b>=1250)改成if(b>=2083)试试。
回复

使用道具 举报

发表于 2013-6-11 20:43 | 显示全部楼层
首先你得确定原作者也是用的12T单片机
然后改延时
频率  f原:f = 7.2:12
周期 则 T原:T = 12:7.2

把 原程序中的延时delay(x);
中x改成x*(7.2/12)

大概是这样哈,你做这个买元件一共花了多少钱?

7.2 12
回复

使用道具 举报

发表于 2013-6-11 20:50 | 显示全部楼层
改void t0_time() interrupt 1

if(b>=1250)//增大1250,看不清STC型号,12T可以按1250/7.2*12改,6T可以按1250
/7.2*12*2试试。

程序中断应对TH0 TL0重新置数
        TH0=(256-240);
        TL0=(256-240);
         
回复

使用道具 举报

 楼主| 发表于 2013-6-11 21:03 | 显示全部楼层
应该改这里:
void delay(uchar z)
        {
          uint x,y;
             for(x=z;x>0;x--)
                for(y=74;y>0;y--);
         }
回复

使用道具 举报

 楼主| 发表于 2013-6-11 21:35 | 显示全部楼层
原作者使用1051
我的是89c51rc

1.rar

58.26 KB, 下载次数: 1154

回复

使用道具 举报

 楼主| 发表于 2013-6-11 21:42 | 显示全部楼层
原电路图。。。

剪贴板2051.jpg
回复

使用道具 举报

发表于 2013-6-11 21:50 | 显示全部楼层
51不会。
延时函数void delay(uchar z) 和 定时器void t0_time() interrupt 1都要改。
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-1 01:22 , Processed in 0.036254 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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