久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2936|回復(fù): 3
收起左側(cè)

AD C語(yǔ)言 ,電壓順序 LED 不同變化問(wèn)題,求大神指點(diǎn)

[復(fù)制鏈接]
ID:65643 發(fā)表于 2014-11-30 10:26 | 顯示全部樓層 |閱讀模式
下面程序是別人寫的,我想在此基礎(chǔ)上實(shí)現(xiàn)的是,
如按此順序:  當(dāng)電壓約 1V 以下時(shí), UP LED 亮;  電壓約 4V以上時(shí), DN LED 亮, UP LED 滅; 電壓再回到約 1V 以下時(shí),
                       UP LED / DN LED 滅, OK LED亮
如按此順序:  當(dāng) 電壓約 3V以上時(shí), DN LED 亮; 當(dāng)電壓約 1V 以下時(shí), UP LED 亮, DN LED 滅;  電壓約 4V以上時(shí), DN LED 亮, UP LED 滅;
                       電壓再回到約 1V 以下時(shí), UP LED / DN LED 滅, OK LED亮
按以上我在程序上加了這個(gè),
void motor()
{
        uchar a;
        a = TQADC();

        if (a <= 50)
        {
                Delay(10);
                if (a <= 50)
                {
                        dn = 1;
                        up = 0;
                        while (a < 200)
                                TQADC();
                        up = 1;
                        dn = 0;
                        while (a > 50)
                                TQADC();
                        dn = 1;
                        ok = 0;
                }
        }
}
目前 UP LED 亮后,再電壓怎么變化也不動(dòng)作了。 我把程序和仿真?zhèn)魃蟻?lái),大俠們幫看看,謝謝



#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_()

//引腳定義
sbit du = P2^6;
sbit we = P2^7;
sbit up = P2^0;
sbit dn = P2^1;
sbit ok = P2^2;
sbit ng = P2^3;
sbit CS_0804  = P3^5;
sbit WR_0804  = P3^6;
sbit INT_0804 = P3^0;
sbit RD_0804  = P3^7;

#define ADC_Data P1          //AD 數(shù)據(jù)端口
#define SMG_DData P0  //數(shù)碼管段碼端口
#define SMG_WData P0  //數(shù)碼管位碼端口

unsigned char code SMG_Dcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //段碼表 共陰
unsigned char code SMG_Wcode[]={0xfe,0xfd,0xfb,0xf7};  //位碼表        共陰

void Delay(uint x)        // 1ms @12Mhz
{
    uchar a,b,c;
    for(c=x;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}

uchar TQADC()
{
        uchar DiaoYa = 0;
        WR_0804 = 1;//先使其為高電平
        CS_0804 = 0;//芯片選通使能
        WR_0804 = 0;
        WR_0804 = 1;//相當(dāng)于給了一個(gè)低電平脈沖啟動(dòng)轉(zhuǎn)換
        nop();nop();nop();nop();
        while(INT_0804 == 1);//等待轉(zhuǎn)換結(jié)束
        RD_0804 = 0;//讀數(shù)據(jù)
        INT_0804 = 1;
        DiaoYa = ADC_Data;//返回電壓寄存器中的值(注意,此時(shí)未轉(zhuǎn)換成具體電壓)
        RD_0804 = 1;
        return DiaoYa;//返回電壓寄存器中的值
}

void DYXS(uchar V_0804)
{
        double Voltage = (double)V_0804;
        uchar Ge    = 0;//用于存取個(gè)位數(shù)值
        uchar Xiao1 = 0;//用于存取小數(shù)點(diǎn)后第一位數(shù)值
        uchar Xiao2 = 0;//用于存取小數(shù)點(diǎn)后第二位數(shù)值
        uchar Xiao3 = 0;//用于存取小數(shù)點(diǎn)后第三位數(shù)值
    Voltage = (5*(Voltage/255))*1000;//電壓值已經(jīng)轉(zhuǎn)換并且*1000用于提取小數(shù)點(diǎn)后三位
       
        //提取每一位的數(shù)值
        Ge    = ((uint)Voltage)/1000%10;
        Xiao1 = ((uint)Voltage)/100%10;
        Xiao2 = ((uint)Voltage)/10%10;
        Xiao3 = ((uint)Voltage)%10;

    //顯示
        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Ge] | 0x80;
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[0];
        we=0;

        Delay(11);
        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Xiao1];
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[1];
        we=0;
        Delay(11);

        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Xiao2];
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[2];
        we=0;

        Delay(11);
        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Xiao3];
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[3];
        we=0;
        Delay(11);
        we=1;
        SMG_WData = 0xff;  
        we=0;
}

void motor()
{
        uchar a;
        a = TQADC();

        if (a <= 50)
        {
                Delay(10);
                if (a <= 50)
                {
                        dn = 1;
                        up = 0;
                        while (a < 200)
                                TQADC();
                        up = 1;
                        dn = 0;
                        while (a > 50)
                                TQADC();
                        dn = 1;
                        ok = 0;
                }
        }
}

void main()
{
        while(1)
        {
                DYXS(TQADC());
                motor();

        }

}


仿真 LX.zip

105.75 KB, 下載次數(shù): 2

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:65643 發(fā)表于 2014-11-30 10:29 | 顯示全部樓層
下面程序是別人寫的,我想在此基礎(chǔ)上實(shí)現(xiàn)的是,
如按此順序:  當(dāng)電壓約 1V 以下時(shí), UP LED 亮;  電壓約 4V以上時(shí), DN LED 亮, UP LED 滅; 電壓再回到約 1V 以下時(shí),UP LED / DN LED 滅, OK LED亮
如按此順序:  當(dāng) 電壓約 3V以上時(shí), DN LED 亮; 當(dāng)電壓約 1V 以下時(shí), UP LED 亮, DN LED 滅;  電壓約 4V以上時(shí), DN LED 亮, UP LED 滅;   電壓再回到約 1V 以下時(shí), UP LED / DN LED 滅, OK LED亮
按以上我在程序上加了這個(gè),
void motor()
{
        uchar a;
        a = TQADC();

        if (a <= 50)
        {
                Delay(10);
                if (a <= 50)
                {
                        dn = 1;
                        up = 0;
                        while (a < 200)
                                TQADC();
                        up = 1;
                        dn = 0;
                        while (a > 50)
                                TQADC();
                        dn = 1;
                        ok = 0;
                }
        }
}
目前 UP LED 亮后,再電壓怎么變化也不動(dòng)作了。 我把程序和仿真?zhèn)魃蟻?lái),大俠們幫看看,謝謝

仿真 LX.zip

105.75 KB, 下載次數(shù): 2

回復(fù)

使用道具 舉報(bào)

ID:65643 發(fā)表于 2014-11-30 21:27 | 顯示全部樓層
我按下面寫的,功能實(shí)現(xiàn)了,但數(shù)碼管不顯示了   ,還得請(qǐng)大俠們指點(diǎn)


#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_()


//引腳定義
sbit du = P2^6;
sbit we = P2^7;
sbit up = P2^0;
sbit dn = P2^1;
sbit ok = P2^2;
sbit ng = P2^3;
sbit CS_0804  = P3^5;
sbit WR_0804  = P3^6;
sbit INT_0804 = P3^0;
sbit RD_0804  = P3^7;


#define ADC_Data P1          //AD 數(shù)據(jù)端口
#define SMG_DData P0  //數(shù)碼管段碼端口
#define SMG_WData P0  //數(shù)碼管位碼端口


unsigned char code SMG_Dcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //段碼表 共陰
unsigned char code SMG_Wcode[]={0xfe,0xfd,0xfb,0xf7};  //位碼表        共陰


void Delay(uint x)        // 1ms @12Mhz
{
    uchar a,b,c;
    for(c=x;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}


uchar TQADC()
{
        uchar DiaoYa = 0;
        WR_0804 = 1;//先使其為高電平
        CS_0804 = 0;//芯片選通使能
        WR_0804 = 0;
        WR_0804 = 1;//相當(dāng)于給了一個(gè)低電平脈沖啟動(dòng)轉(zhuǎn)換
        nop();nop();nop();nop();
        while(INT_0804 == 1);//等待轉(zhuǎn)換結(jié)束
        RD_0804 = 0;//讀數(shù)據(jù)
        INT_0804 = 1;
        DiaoYa = ADC_Data;//返回電壓寄存器中的值(注意,此時(shí)未轉(zhuǎn)換成具體電壓)
        RD_0804 = 1;
        return DiaoYa;//返回電壓寄存器中的值
}


void DYXS(uchar V_0804)
{
        double Voltage = (double)V_0804;
        uchar Ge    = 0;//用于存取個(gè)位數(shù)值
        uchar Xiao1 = 0;//用于存取小數(shù)點(diǎn)后第一位數(shù)值
        uchar Xiao2 = 0;//用于存取小數(shù)點(diǎn)后第二位數(shù)值
        uchar Xiao3 = 0;//用于存取小數(shù)點(diǎn)后第三位數(shù)值
    Voltage = (5*(Voltage/255))*1000;//電壓值已經(jīng)轉(zhuǎn)換并且*1000用于提取小數(shù)點(diǎn)后三位
       
        //提取每一位的數(shù)值
        Ge    = ((uint)Voltage)/1000%10;
        Xiao1 = ((uint)Voltage)/100%10;
        Xiao2 = ((uint)Voltage)/10%10;
        Xiao3 = ((uint)Voltage)%10;


    //顯示
        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Ge] | 0x80;
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[0];
        we=0;


        Delay(11);
        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Xiao1];
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[1];
        we=0;
        Delay(11);


        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Xiao2];
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[2];
        we=0;


        Delay(11);
        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Xiao3];
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[3];
        we=0;
        Delay(11);
        we=1;
        SMG_WData = 0xff;  
        we=0;
}


void motor()
{
        uchar a;
        a = TQADC();


        while(1)
        {
                if (a >= 200)
                {
                        up = 1;
                        dn = 0;
                }
                a = TQADC();
                if (a <= 50) break;
        }


        while(1)
        {
                if (a <= 50)
                {
                        dn = 1;
                        up = 0;
                }
                a = TQADC();
                if (a >= 200) break;
        }


        while(1)
        {
                if (a >= 200)
                {
                        up = 1;
                        dn = 0;
                }
                a = TQADC();
                if (a <= 50) break;
        }


        while(1)
        {
                if (a <= 50)
                {
                        up = dn = 1;
                        ok = 0;
                }
        }
}


void main()
{
        while(1)
        {
                DYXS(TQADC());
                motor();


        }


}


回復(fù)

使用道具 舉報(bào)

ID:65643 發(fā)表于 2014-12-1 10:18 | 顯示全部樓層
經(jīng)個(gè)高人指點(diǎn),成功了
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_()

//引腳定義
sbit du = P2^6;
sbit we = P2^7;
sbit up = P2^0;
sbit dn = P2^1;
sbit ok = P2^2;
sbit ng = P2^3;
sbit key = P3^4;
sbit CS_0804  = P3^5;
sbit WR_0804  = P3^6;
sbit INT_0804 = P3^0;
sbit RD_0804  = P3^7;

#define ADC_Data P1          //AD 數(shù)據(jù)端口
#define SMG_DData P0  //數(shù)碼管段碼端口
#define SMG_WData P0  //數(shù)碼管位碼端口

unsigned char code SMG_Dcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //段碼表 共陰
unsigned char code SMG_Wcode[]={0xfe,0xfd,0xfb,0xf7};  //位碼表        共陰

void Delay(uint x)        // 1ms @12Mhz
{
    uchar a,b,c;
    for(c=x;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}

uchar TQADC()
{
        uchar DiaoYa = 0;
        WR_0804 = 1;//先使其為高電平
        CS_0804 = 0;//芯片選通使能
        WR_0804 = 0;
        WR_0804 = 1;//相當(dāng)于給了一個(gè)低電平脈沖啟動(dòng)轉(zhuǎn)換
        nop();nop();nop();nop();
        while(INT_0804 == 1);//等待轉(zhuǎn)換結(jié)束
        RD_0804 = 0;//讀數(shù)據(jù)
        INT_0804 = 1;
        DiaoYa = ADC_Data;//返回電壓寄存器中的值(注意,此時(shí)未轉(zhuǎn)換成具體電壓)
        RD_0804 = 1;
        return DiaoYa;//返回電壓寄存器中的值
}

void DYXS(uchar V_0804)
{
        double Voltage = (double)V_0804;
        uchar Ge    = 0;//用于存取個(gè)位數(shù)值
        uchar Xiao1 = 0;//用于存取小數(shù)點(diǎn)后第一位數(shù)值
        uchar Xiao2 = 0;//用于存取小數(shù)點(diǎn)后第二位數(shù)值
        uchar Xiao3 = 0;//用于存取小數(shù)點(diǎn)后第三位數(shù)值
    Voltage = (5*(Voltage/255))*1000;//電壓值已經(jīng)轉(zhuǎn)換并且*1000用于提取小數(shù)點(diǎn)后三位
       
        //提取每一位的數(shù)值
        Ge    = ((uint)Voltage)/1000%10;
        Xiao1 = ((uint)Voltage)/100%10;
        Xiao2 = ((uint)Voltage)/10%10;
        Xiao3 = ((uint)Voltage)%10;

    //顯示
        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Ge] | 0x80;
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[0];
        we=0;

        Delay(11);
        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Xiao1];
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[1];
        we=0;
        Delay(11);

        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Xiao2];
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[2];
        we=0;

        Delay(11);
        we=1;
        SMG_WData = 0xff;//消隱
        we=0;
        du=1;
        SMG_DData = SMG_Dcode[Xiao3];
        du=0;
        we=1;
        SMG_WData = SMG_Wcode[3];
        we=0;
        Delay(11);
        we=1;
        SMG_WData = 0xff;  
        we=0;
}

void motor()
{
        uchar a;
        a = TQADC();

        while(1)
        {
                if (a > 50)
                {
                        ok = 1;
                        up = 1;
                        dn = 0;
                }
                a = TQADC();
                DYXS(TQADC());
                if (a <= 50) break;
        }

        while(1)
        {
                if (a <= 50)
                {
                        ok = 1;
                        dn = 1;
                        up = 0;
                }
                a = TQADC();
                DYXS(TQADC());
                if (a >= 200) break;
        }

        while(1)
        {
                if (a >= 200)
                {
                        ok = 1;
                        up = 1;
                        dn = 0;
                }
                a = TQADC();
                DYXS(TQADC());
                if (a <= 50) break;
        }

        while(1)
        {
                if (a <= 50)
                {
                        up = dn = 1;
                        ok = 0;
                }
                DYXS(TQADC());
                if (key == 0) break;
        }
}

void main()
{
    while(1)
    {
        DYXS(TQADC());
        if(key == 0)
        {
                        motor();      
   
        }
    }
}

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品亚洲永久免费精品 | 91精品久久久久久久久99蜜臂 | 国产高潮好爽受不了了夜色 | 99爱在线| 欧美视频第三页 | 日本涩涩网| 麻豆久久久久久 | 国产精品一区二 | 精品一区二区三区91 | 亚洲精品一区二区冲田杏梨 | 国产剧情一区 | 日韩成人免费视频 | 91av视频| ririsao久久精品一区 | 婷婷久久综合 | 日本一区二区在线视频 | 午夜精品一区 | 亚洲成人久久久 | caoporn免费 | 久久美女网 | 国产一区二区三区在线 | 国产精品成人av | 福利一区二区在线 | 黄色免费网站在线看 | 日韩午夜一区二区三区 | 国产婷婷色综合av蜜臀av | 一级视频黄色 | 欧美在线网站 | 九九精品在线 | 在线国产99| a亚洲精品 | www.av7788.com | 福利片在线观看 | 成年人在线播放 | 黄色免费av| 成人二区| 欧美日本免费 | 亚洲国产一 | 欧美一极视频 | cao视频| aaaa网站 |