[求助] 这个程序 为什么有问题

leiming121   2011-11-26 15:02 楼主
#include
#define uchar unsigned char
#define uint unsigned int
uchar code Disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code Disp_Sel[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
uchar aa=0;

long f;
void init();
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
unsigned char num=0;
uint ff;
long bb;
uchar count;
uchar first;
void display();
void diffence();
void delay(unsigned int t)
{       
        unsigned int i,j;
        for(i=0;i                 for(j=0;j<112;j++);       
}
void main()
{       

        init();
        first=0;
        while(1)
        {
                display();
        }

}
void display()
{
        P0=0XFF;
        P1=0XFF;
        P0=Disp_Sel[0];
        P1=Disp[bb%10];
        delay(1);
P0=Disp_Sel[1];
        P1=Disp[bb%100/10];
        delay(1);
P0=Disp_Sel[2];
        P1=Disp[bb%1000/100];
        delay(1);
P0=Disp_Sel[3];
        P1=Disp[bb%10000/1000];
        delay(1);
P0=Disp_Sel[4];
        P1=Disp[bb%100000/10000];
        delay(1);
P0=Disp_Sel[5];
        P1=Disp[bb%1000000/10000];
        delay(1);
P0=Disp_Sel[6];
        P1=Disp[bb%10000000/100000];
        delay(1);
P0=Disp_Sel[7];
        P1=Disp[bb/100000000];
        delay(1);

}

void init()
{               
        TMOD=0x51;//T1计数。T0定时
        TH1=0;
        TL1=0;
        TH0=(65536-50000)/256;//T0初值为50ms
        TL0=(65536-50000)%256;
        TR0=1;
        TR1=1;
        EA=1;
        ET0=1;
}

void TT0() interrupt 1
{
       
        TH0=(65536-50000)/256;//重赋T0初值为50ms
        TL0=(65536-50000)%256;
        aa++;
        if(first == 0)//开始测频时,单片机进行粗略的计算
        {
                if(aa==20)
                {
                        first =1;
                        aa=0;
                        f = (TH1*256 + TL1)+ff*65536;
                        ff=0;
                        TL1 = 0;
                        TH1 = 0;
                        diffence();//分挡位
                }       
         }
         else//分频后,精确测频
         {
                 if(aa==20)
                {
                        first =0;
                        aa=0;
                        bb = (TH1*256 + TL1)+ff*65536;
                        ff=0;
                        TL1 = 0;
                        TH1 = 0;
                        switch(count)
                        {
                                case 0:bb=bb*1;break;
                                case 1:bb=bb*10;break;
                                case 2:bb=bb*100;break;
                                case 3:bb=bb*1000;break;
                                case 4:bb=bb*10000;break;
                                case 5:bb=bb*100000;break;
                                case 6:bb=bb*1000000;break;
                                case 7:bb=bb*10000000;break;
                                default:break;
                        }
                       
                }
         }               
}

void diffence()//分挡位
{
        if(f < 5000)
                count=0;
        else if(((f == 5000)||(f > 5000)) && ((f == 10000)||(f < 10000)))
                count=1;
        else if((f > 10000) && (f <= 50000))
                count=2;
        else if((f>50000)&&(f<=100000))
                count=3;
        else if((f>100000)&&(f<=500000))
                count=4;
        else if((f>500000)&&(f<=1000000))
                count=5;
        else if((f>1000000)&&(f<=10000000))
                count=6;
        else if((f>100000000)&&(f<=200000000))
                count=7;
        switch(count)//
                {
                        case 0:P21=0;P22=0;P23=0;break;
                        case 1:P21=0;P22=0;P23=1;break;
                        case 2:P21=0;P22=1;P23=0;break;
                        case 3:P21=0;P22=1;P23=1;break;
                        case 4:P21=1;P22=0;P23=0;break;
                        case 5:P21=1;P22=0;P23=1;break;
                        case 6:P21=1;P22=1;P23=0;break;
                        case 7:P21=1;P22=1;P23=1;break;
                        default:break;
                }
}

void TT1() interrupt 3
{
        ff++;
}

回复评论 (4)

什么问题 要讲出来的
点赞  2011-11-26 15:24
我看前两句了,这个程序是液晶显示么?你编译的时候哪里出现问题了,错误提示是什么,我这台电脑上没有编译器
我爱电子!
点赞  2011-11-26 21:24

回复 沙发 常见泽1 的帖子

这个程序 是一个测频率计的 程序  现在显示不正常
点赞  2011-11-28 19:11

回复 板凳 jjkwz 的帖子

是数码管显示的  没有达到想要的效果 测频率 不对 显示的时候有影子出现
点赞  2011-11-28 19:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复