哪位大哥,能帮个忙啊,把两个程序合并,万分感谢

2019-07-18 10:38发布

哪位大哥,能帮个忙啊,把两个程序合并,万分感谢
第一个电子时钟:::
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int           
sbit s1=P2^0;                  //数码管位选控制端
sbit s2=P2^1;
sbit s3=P2^2;
sbit s4=P2^3;
sbit s5=P2^4;
sbit s6=P2^5;
sbit s7=P2^6;
/*k1设置时间,k2定时。k1,k2使用不自动弹起按键。
k3时分秒选择,k4加数字,k5减数字。*/
sbit k1=P1^0;           
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
uchar count=0,sec,min,hour,ss=0;s=60,m=60,h=24;
uchar code mum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0-9编码
void delayms(uint k)           //延时函数
{
        uint i,j;
        for(i=k;i>0;i--)
                for(j=110;j>0;j--);
}
/*通过count获得hour,min,sec变量值        */
void timecontrol()        
{
        sec++;
        if(sec==60)
        {
                sec=0;
                min++;
                if(min==60)
                {
                        min=0;
                        hour++;
                        if(hour==24)
                        hour=0;
                }
        }
}
void display(uchar zs,uchar zm, uchar zh)                        //数码管显示函数
{         
  s1=1;
  P0=mum[zh/10];
  delayms(5);
  s1=0;
   
  s2=1;
  P0=mum[zh%10]&0x7f;           // 时的个位加上小数点
  delayms(5);
  s2=0;
   
  s3=1;
  P0=mum[zm/10];        
  delayms(5);
  s3=0;
  
  s4=1;
  P0=mum[zm%10]&0x7f;                //分的个位加上小数点
  delayms(5);
  s4=0;
   
  s5=1;
  P0=mum[zs/10];
  delayms(5);
  s5=0;
   
  s6=1;        
  P0=mum[zs%10];
  delayms(5);
  s6=0;
}
void keyscan_settime()                  //时间设置模块
{
        uchar st,mt,ht;
        if(k1==0)
        {
                delayms(10);
                if(k1==0)
                {
                st=sec,mt=min,ht=hour;
                TR0=0;                 //关闭定时器
                while(k1==0)         //等待用户按键
                {
                        display(st,mt,ht);                        
                        if(k3==0)
                        {
                                delayms(10);
                                if(k3==0)         
                                {
                                while(!k3);
                                ss++;
                                if(ss==3)        ss=0;
                                }
                        }
                        /*通过ss选择时分秒设置*/
                        if(k4==0)                //加数
                                {
                                         delayms(10);
                                        if(k4==0)
                                        {
                                        while(!k4);
                                        switch(ss)
                                        {
                                        case 0:st++;if(st==60)st=0;break;
                                        case 1:mt++;if(mt==60)mt=0;break;
                                        case 2:ht++;if(ht==24)ht=0;break;        
                                        default :;                                                
                                        }
                                        }        
                                }
                        if(k5==0)                //减数
                                {
                                         delayms(10);
                                        if(k5==0)
                                        {
                                        while(!k5);
                                        switch(ss)
                                        {
                                        case 0:if(st>0)st--;
                                                        else        st=0;break;
                                        case 1:if(mt>0)mt--;
                                                        else        mt=0;break;
                                        case 2:if(ht>0)ht--;
                                                        else        ht=0;break;        
                                        default : ;
                                        }                                                                                                                                       
                                        }        
                                }
                                }
                        TR0=1;
                        sec=st,min=mt,hour=ht;                                                        
                        }                                                
                }               
                display(sec,min,hour);
}
void keyscan_time()                //用户定时模块
{
        if(k2==0)
        {
                delayms(10);               
                if(k2==0)
                {
                s=sec;m=min;h=hour;
                while(k2==0)         //开始定时设置
                {
                        display(s,m,h);
                        if(k3==0)
                        {
                                delayms(10);
                                if(k3==0)         
                                {
                                while(!k3);
                                ss++;
                                if(ss==3)        ss=0;
                                }
                        }
                        /*通过ss选择时分秒设置*/
                        if(k4==0)                //加数
                                {
                                         delayms(10);
                                        if(k4==0)
                                        {
                                        while(!k4);
                                        switch(ss)
                                        {
                                        case 0:s++;if(s==60)s=0;break;
                                        case 1:m++;if(m==60)m=0;break;
                                        case 2:h++;if(h==24)h=0;break;        
                                        default :;                                                
                                        }
                                        }        
                                }
                        if(k5==0)                //减数
                                {
                                         delayms(10);
                                        if(k5==0)
                                        {
                                        while(!k5);
                                        switch(ss)
                                        {
                                        case 0:if(s>0)s--;
                                                        else        s=0;break;
                                        case 1:if(m>0)m--;
                                                        else        m=0;break;
                                        case 2:if(h>0)h--;
                                                        else        h=0;break;        
                                        default : ;
                                        }                                                                                                                                                }        
                                        }
                                }                                                
                        }
        }
}
void buz()
{
if((hour==h)&&(min==m)&&(sec==s))
        {
        s7=0;
        delayms(20);
        s7=1;
        }
}
void main()
{
        TMOD=0x01;                                //定时器0工作在方式1
        TH0=(65536-45872)/256;           //装初值,50ms
        TL0=(65536-45872)%256;
        EA=1;                  //总中断允许
        ET0=1;                 //T0中断允许
        TR0=1;                 //开定时器0
        while(1)
        {
                keyscan_settime();
                keyscan_time();        
                buz();        
        }
}
void T0_ms() interrupt 1          //中断入口程序
{
        TH0=(65536-45872)/256;                //重新装初值
        TL0=(65536-45872)%256;
        count++;
        if(count==20)                 //判定1s时间是否已到
        {
                count=0;
                timecontrol();
   
  }
  }  


第二个:流水灯(P3口的)

   #include<reg51.h>   // T0  计数器#define uint unsigned int uint  tt, temp;void main(){TMOD=0x01;TH0=(65535-50000)/256;    // 50 mSTL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; temp=0x01; tt=0; while(1)  {  }}void Timer0(void) interrupt 1 // 定时器0  {  TH0=(65535-50000)/256;  TL0=(65535-50000)%256;  if(tt==20)  {  tt=0;  temp=temp<<1;  if(temp==0x00) { temp=0x01; }  P3=~temp;   } }

电路图再附件,现在电子时钟已经OK了,可是我把两个程序合并并烧入,仿真没有反应啊,(看附件)实物的电路板已经焊接好了。

思路:P1 P2 为电子时钟的,P3为流水灯的。

强大点:  上电后,电子时钟运行,而每隔5分钟  流水灯依次点亮(P3.0-P3.7 间隔2秒)再全亮2秒))
(简单点: 上电后,电子时钟运行,流水灯依次点亮(P3.0-P3.7 间隔2秒)再全亮2秒,不断循环)
哪位大哥,能帮个忙啊,把两个程序合并,万分感谢!


2333.jpg (56.34 KB, 下载次数: 0) 22 小时前 上传点击文件名下载附件





捕捉_6.jpg (191.98 KB, 下载次数: 0) 22 小时前 上传点击文件名下载附件





捕捉_5.jpg (126.34 KB, 下载次数: 0) 22 小时前 上传点击文件名下载附件






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
AVS-张武林
1楼-- · 2019-07-18 14:50
按5分钟流一次,每隔2秒一个灯,最后全亮。你的程序不够简洁,不过我也没给你改,多看看做项目人的程序吧。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int           
sbit s1=P2^0;                  //数码管位选控制端
sbit s2=P2^1;
sbit s3=P2^2;
sbit s4=P2^3;
sbit s5=P2^4;
sbit s6=P2^5;
sbit s7=P2^6;
/*k1设置时间,k2定时。k1,k2使用不自动弹起按键。
k3时分秒选择,k4加数字,k5减数字。*/
sbit k1=P1^0;           
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
uchar count=0,sec,min,hour,ss=0;s=60,m=60,h=24;
uchar code mum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0-9编码
void delayms(uint k)           //延时函数
{
        uint i,j;
        for(i=k;i>0;i--)
                for(j=110;j>0;j--);
}
/*通过count获得hour,min,sec变量值        */
void timecontrol()        
{
        sec++;
        if(sec==60)
        {
                sec=0;
                min++;
                if(min==60)
                {
                        min=0;
                        hour++;
                        if(hour==24)
                        hour=0;
                }
        }
}
void ledshow()  //led显示
  {
          uchar minsub;
        minsub=min%5;
        if(minsub==0)
          {
                  switch(sec)
                  {
                           case 0:P3=0xfe;break;
                         case 2:P3=0xfd;break;
                         case 4:P3=0xfb;break;
                         case 6:P3=0xf7;break;
                         case 8:P3=0xef;break;
                         case 10:P3=0xdf;break;
                         case 12:P3=0xbf;break;
                         case 14:P3=0x7f;break;
                         case 16:P3=0x00;break;
                  }
                          
          }
          if(sec>16)
          {P3=0xff;}
          
  }
void display(uchar zs,uchar zm, uchar zh)                        //数码管显示函数
{         
  s1=1;
  P0=mum[zh/10];
  delayms(5);
  s1=0;
   
  s2=1;
  P0=mum[zh%10]&0x7f;           // 时的个位加上小数点
  delayms(5);
  s2=0;
   
  s3=1;
  P0=mum[zm/10];        
  delayms(5);
  s3=0;
  
  s4=1;
  P0=mum[zm%10]&0x7f;                //分的个位加上小数点
  delayms(5);
  s4=0;
   
  s5=1;
  P0=mum[zs/10];
  delayms(5);
  s5=0;
   
  s6=1;        
  P0=mum[zs%10];
  delayms(5);
  s6=0;
}
void keyscan_settime()                  //时间设置模块
{
        uchar st,mt,ht;
        if(k1==0)
        {
                delayms(10);
                if(k1==0)
                {
                st=sec,mt=min,ht=hour;
                TR0=0;                 //关闭定时器
                while(k1==0)         //等待用户按键
                {
                        display(st,mt,ht);                        
                        if(k3==0)
                        {
                                delayms(10);
                                if(k3==0)         
                                {
                                while(!k3);
                                ss++;
                                if(ss==3)        ss=0;
                                }
                        }
                        /*通过ss选择时分秒设置*/
                        if(k4==0)                //加数
                                {
                                         delayms(10);
                                        if(k4==0)
                                        {
                                        while(!k4);
                                        switch(ss)
                                        {
                                        case 0:st++;if(st==60)st=0;break;
                                        case 1:mt++;if(mt==60)mt=0;break;
                                        case 2:ht++;if(ht==24)ht=0;break;        
                                        default :;                                                
                                        }
                                        }        
                                }
                        if(k5==0)                //减数
                                {
                                         delayms(10);
                                        if(k5==0)
                                        {
                                        while(!k5);
                                        switch(ss)
                                        {
                                        case 0:if(st>0)st--;
                                                        else        st=0;break;
                                        case 1:if(mt>0)mt--;
                                                        else        mt=0;break;
                                        case 2:if(ht>0)ht--;
                                                        else        ht=0;break;        
                                        default : ;
                                        }                                                                                                                                       
                                        }        
                                }
                                }
                        TR0=1;
                        sec=st,min=mt,hour=ht;                                                        
                        }                                                
                }               
                display(sec,min,hour);
}
void keyscan_time()                //用户定时模块
{
        if(k2==0)
        {
                delayms(10);               
                if(k2==0)
                {
                s=sec;m=min;h=hour;
                while(k2==0)         //开始定时设置
                {
                        display(s,m,h);
                        if(k3==0)
                        {
                                delayms(10);
                                if(k3==0)         
                                {
                                while(!k3);
                                ss++;
                                if(ss==3)        ss=0;
                                }
                        }
                        /*通过ss选择时分秒设置*/
                        if(k4==0)                //加数
                                {
                                         delayms(10);
                                        if(k4==0)
                                        {
                                        while(!k4);
                                        switch(ss)
                                        {
                                        case 0:s++;if(s==60)s=0;break;
                                        case 1:m++;if(m==60)m=0;break;
                                        case 2:h++;if(h==24)h=0;break;        
                                        default :;                                                
                                        }
                                        }        
                                }
                        if(k5==0)                //减数
                                {
                                         delayms(10);
                                        if(k5==0)
                                        {
                                        while(!k5);
                                        switch(ss)
                                        {
                                        case 0:if(s>0)s--;
                                                        else        s=0;break;
                                        case 1:if(m>0)m--;
                                                        else        m=0;break;
                                        case 2:if(h>0)h--;
                                                        else        h=0;break;        
                                        default : ;
                                        }                                                                                                                                                }        
                                        }
                                }                                                
                        }
        }
}
void buz()
{
if((hour==h)&&(min==m)&&(sec==s))
        {
        s7=0;
        delayms(20);
        s7=1;
        }
}
void main()
{
        TMOD=0x01;                                //定时器0工作在方式1
        TH0=(65536-45872)/256;           //装初值,50ms
        TL0=(65536-45872)%256;
        EA=1;                  //总中断允许
        ET0=1;                 //T0中断允许
        TR0=1;                                     //开定时器0
                P3=0XFF;                 
        while(1)
        {
                ledshow();
                                keyscan_settime();
                keyscan_time();        
                buz();        
        }
}
void T0_ms() interrupt 1          //中断入口程序
{
        TH0=(65536-45872)/256;                //重新装初值
        TL0=(65536-45872)%256;
        count++;
        if(count==20)                 //判定1s时间是否已到
        {
                count=0;
                timecontrol();
        }

  }
dmdz2015
2楼-- · 2019-07-18 20:02
路过学习。。。。。。。。。。。。

一周热门 更多>