打印

请教一下关于学习式的倒计时。。。

[复制链接]
1124|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xvezhe|  楼主 | 2013-7-30 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI, dc, ADC, AD, HC
2路信号是循环输出,1-> 2 -> 1。。。倒计时根据采集到到的1、2路信号时间,第二周期显示输出。。。。
请教以下,以下的程序那里出错了,怎么跟踪不了的呢?或如何修改的呢?

#include<reg52a.h>       
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

                uchar flag=0;
                uchar rece_count=0;                                            
                uchar dbuffer=0;                                            /*学习过程时间变量*/
                uchar rece=0;                                                    /*显示允许标志位*/
                uchar data1=0,data0=0,data2=0,data3=0;       
                uchar idata countint=0;                       
                static bdata uchar adconin;                                /*74HC595段码输出用变量*/
                uchar time=0,time2=0;                               
                uchar ten,fir;                                            /*显示转换BCD子函数用变量*/

                sbit CPRS=P1^1;                                                /*74HC595段码输出用变量*/
                sbit CPLA=P1^0;
                sbit DS = P1^2;       
                sbit ISDA=P3^7;                                                    /*看门狗变量*/
                sbit adconin7 = adconin^7;                    /*74HC595段码输出用变量*/
               
                code uchar dtable[11]={0x7e,0x0c,0xb6,0x9e,0xcc,0xda,0xfa,0x0e,0xfe,0xde,0x00};/*段码表*/

void RETWDT(void)                                   /*看门狗定时器复位*/
{
        ISDA=0;
        _nop_();
        ISDA=1;
}       
                                                                                                                                               
void outbyt(void)                                                                 //个位显示函数         
{
        uchar i;
        CPLA = 0;
        for(i=0;i<8;i++)
        {
                   CPRS = 0;
                   _nop_();
                   DS = adconin7;
                   _nop_();
            CPRS = 1;
            adconin<<=1;
        }
        CPLA = 1;
}

void outbyt1(void)                                                                   //十位显示函数
{
        uchar i;
        for(i=0;i<8;i++)
        {
                   CPRS = 0;
                   _nop_();
                   DS = adconin7;
                   _nop_();
           CPRS = 1;
            adconin<<=1;     
        }
        CPLA = 1;
}

void timer0() interrupt 1 /*50ms*/
{
        TL0=0x00;       
        time2++;
        if(time2==20)                                                 //1s定时器
        {
                time2=0;
                dbuffer++;                          //学习过程中时间自加
                if((flag==0)&&(rece==1))                //赋1路信号时间给countint
                {
                    countint--;                            //显示时间自减
                        if(countint<0)
                        {
                          flag = 1;
                        }
                }
                if((flag==1)&&(rece==1))                 //赋2路信号时间给countint
                {
                    countint--;                                 //显示时间自减
                        if(countint<0)
                        {
                          flag = 0;                                         
                        }
                }       
        }
        TH0=0x4c;
        RETWDT();                              //50ms喂狗
}       

main()
{       
        P3_0=1;
        P3_1=1;
        rece=0;
        adconin = 0x00;
        outbyt1();
        adconin = 0x00;
        outbyt();
        TMOD=0x01;                                /*T0计数状态,方式2*/
        TH0=0x4c;                                /*50ms*/
        TL0=0x00;
        IE=0x82;                                    /*开中断,允许T0*/
       
        RETWDT();
        while (1)
        {       
             if(P3_1!=0)                                                        //1路信号  (P3_0 = 0)表示1路有信号
                 {       
                        if(P3_1!=0)
                        {
                                if(rece_count==0)
                                {
                                        TR0=1;
                                        data1=dbuffer;
                                        time2=0;
                                        if((data0<=(data1+2))&&(data0>=(data1-2))) //显示学习到的时间
                                        {       
                                                       countint=data0;       
                                                       rece=1;
                                                           flag = 0;                                           //赋1路时间给countint
                                        }
                                        if((data0>(data1+2))||(data0<(data1-2)))   //学习过程
                                        {
                                                       data0=data1;                                           //转存第一次学习到的时间
                                                       rece=0;
                                        }
                                        dbuffer=0;                                                                   //清空学习时间变量
                                        rece_count=1;                                                           //到2路信号执行
                                }               
                        }               
                 }
                 if(P3_0!=0)                                                         //2路信号 (P3_1 = 0)表示1路有信号
                 {       
                        if(P3_0!=0)
                        {
                                if(rece_count==1)
                                {
                                        TR0=1;
                                        data3=dbuffer;
                                        time2=0;
                                        if((data2<=(data3+2))&&(data2>=(data3-2)))    //显示学习到的时间
                                        {       
                                                        countint=data2;       
                                                        rece=1;                                                          //开显示
                                                                flag = 1;                                                  //赋2路时间给countint
                                        }
                                        if((data2>(data3+2))||(data2<(data3-2)))          //学习过程
                                        {
                                                        data2=data3;                                          //转存第一次学习到的时间
                                                        rece=0;
                                        }
                                        dbuffer=0;                                                                          //清空学习时间变量
                                        rece_count=0;                                                                  //回到绿灯信号执行
                                }               
                        }               
                 }
                                                            
                if((countint>0)&&(rece!=0))                               //允许显示rece!=0
                {                               
                        ten=countint/10;
                        fir=countint%10;
                        if(ten==0)                                           //若十位数据等于0,关十位显示
                        {
                                            adconin = 0x00;
                                            outbyt1();
                                                        adconin = dtable[fir];
                                                        outbyt();       
                        }
                        else
                        {
                                                        adconin = dtable[ten];                                                  
                                                        outbyt1();
                                                        adconin = dtable[fir];
                                                        outbyt();       
                        }
                        RETWDT();       
                }                       
                else                                                     //若rece==0时,不允许输出,显示黑屏
                {
                                        adconin = 0x00;
                                        outbyt1();
                                        adconin = 0x00;
                                        outbyt();       
                }
            RETWDT();
         }
}

相关帖子

沙发
xvezhe|  楼主 | 2013-7-30 16:49 | 只看该作者
请高手多多指点啊。。。

使用特权

评论回复
板凳
dzrqwer| | 2013-7-31 21:27 | 只看该作者
不是不指点,你就是高手。
求培养。

使用特权

评论回复
地板
xvezhe|  楼主 | 2013-8-2 08:54 | 只看该作者
dzrqwer 发表于 2013-7-31 21:27
不是不指点,你就是高手。
求培养。

都还没测试通过,还需高手指点呢。。。(希望各位多多指点啊)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

225

帖子

2

粉丝