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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2904|回復: 3
收起左側

AD C語言 ,電壓順序 LED 不同變化問題,求大神指點

[復制鏈接]
ID:65643 發表于 2014-11-30 10:26 | 顯示全部樓層 |閱讀模式
下面程序是別人寫的,我想在此基礎上實現的是,
如按此順序:  當電壓約 1V 以下時, UP LED 亮;  電壓約 4V以上時, DN LED 亮, UP LED 滅; 電壓再回到約 1V 以下時,
                       UP LED / DN LED 滅, OK LED亮
如按此順序:  當 電壓約 3V以上時, DN LED 亮; 當電壓約 1V 以下時, UP LED 亮, DN LED 滅;  電壓約 4V以上時, DN LED 亮, UP LED 滅;
                       電壓再回到約 1V 以下時, UP LED / DN LED 滅, OK LED亮
按以上我在程序上加了這個,
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 亮后,再電壓怎么變化也不動作了。 我把程序和仿真傳上來,大俠們幫看看,謝謝



#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 數據端口
#define SMG_DData P0  //數碼管段碼端口
#define SMG_WData P0  //數碼管位碼端口

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;//相當于給了一個低電平脈沖啟動轉換
        nop();nop();nop();nop();
        while(INT_0804 == 1);//等待轉換結束
        RD_0804 = 0;//讀數據
        INT_0804 = 1;
        DiaoYa = ADC_Data;//返回電壓寄存器中的值(注意,此時未轉換成具體電壓)
        RD_0804 = 1;
        return DiaoYa;//返回電壓寄存器中的值
}

void DYXS(uchar V_0804)
{
        double Voltage = (double)V_0804;
        uchar Ge    = 0;//用于存取個位數值
        uchar Xiao1 = 0;//用于存取小數點后第一位數值
        uchar Xiao2 = 0;//用于存取小數點后第二位數值
        uchar Xiao3 = 0;//用于存取小數點后第三位數值
    Voltage = (5*(Voltage/255))*1000;//電壓值已經轉換并且*1000用于提取小數點后三位
       
        //提取每一位的數值
        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, 下載次數: 2

回復

使用道具 舉報

ID:65643 發表于 2014-11-30 10:29 | 顯示全部樓層
下面程序是別人寫的,我想在此基礎上實現的是,
如按此順序:  當電壓約 1V 以下時, UP LED 亮;  電壓約 4V以上時, DN LED 亮, UP LED 滅; 電壓再回到約 1V 以下時,UP LED / DN LED 滅, OK LED亮
如按此順序:  當 電壓約 3V以上時, DN LED 亮; 當電壓約 1V 以下時, UP LED 亮, DN LED 滅;  電壓約 4V以上時, DN LED 亮, UP LED 滅;   電壓再回到約 1V 以下時, UP LED / DN LED 滅, OK LED亮
按以上我在程序上加了這個,
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 亮后,再電壓怎么變化也不動作了。 我把程序和仿真傳上來,大俠們幫看看,謝謝

仿真 LX.zip

105.75 KB, 下載次數: 2

回復

使用道具 舉報

ID:65643 發表于 2014-11-30 21:27 | 顯示全部樓層
我按下面寫的,功能實現了,但數碼管不顯示了   ,還得請大俠們指點


#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 數據端口
#define SMG_DData P0  //數碼管段碼端口
#define SMG_WData P0  //數碼管位碼端口


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;//相當于給了一個低電平脈沖啟動轉換
        nop();nop();nop();nop();
        while(INT_0804 == 1);//等待轉換結束
        RD_0804 = 0;//讀數據
        INT_0804 = 1;
        DiaoYa = ADC_Data;//返回電壓寄存器中的值(注意,此時未轉換成具體電壓)
        RD_0804 = 1;
        return DiaoYa;//返回電壓寄存器中的值
}


void DYXS(uchar V_0804)
{
        double Voltage = (double)V_0804;
        uchar Ge    = 0;//用于存取個位數值
        uchar Xiao1 = 0;//用于存取小數點后第一位數值
        uchar Xiao2 = 0;//用于存取小數點后第二位數值
        uchar Xiao3 = 0;//用于存取小數點后第三位數值
    Voltage = (5*(Voltage/255))*1000;//電壓值已經轉換并且*1000用于提取小數點后三位
       
        //提取每一位的數值
        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();


        }


}


回復

使用道具 舉報

ID:65643 發表于 2014-12-1 10:18 | 顯示全部樓層
經個高人指點,成功了
#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 數據端口
#define SMG_DData P0  //數碼管段碼端口
#define SMG_WData P0  //數碼管位碼端口

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;//相當于給了一個低電平脈沖啟動轉換
        nop();nop();nop();nop();
        while(INT_0804 == 1);//等待轉換結束
        RD_0804 = 0;//讀數據
        INT_0804 = 1;
        DiaoYa = ADC_Data;//返回電壓寄存器中的值(注意,此時未轉換成具體電壓)
        RD_0804 = 1;
        return DiaoYa;//返回電壓寄存器中的值
}

void DYXS(uchar V_0804)
{
        double Voltage = (double)V_0804;
        uchar Ge    = 0;//用于存取個位數值
        uchar Xiao1 = 0;//用于存取小數點后第一位數值
        uchar Xiao2 = 0;//用于存取小數點后第二位數值
        uchar Xiao3 = 0;//用于存取小數點后第三位數值
    Voltage = (5*(Voltage/255))*1000;//電壓值已經轉換并且*1000用于提取小數點后三位
       
        //提取每一位的數值
        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();      
   
        }
    }
}

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产传媒在线播放 | 国内av在线| 美女在线视频一区二区三区 | 欧美亚洲日本 | 国产片一区二区三区 | 亚洲精品电影网在线观看 | 国产精品久久片 | 日韩一区二区久久 | 欧美成人精品 | 国产精品178页 | 99精品久久| 亚洲精品视频一区 | 国内精品在线视频 | 亚洲福利av | 成人在线观看免费视频 | 精品美女久久久久久免费 | 黄色片av| 一级黄a视频 | 中文字幕一区二区三区在线观看 | 中文字幕第5页 | 中文字幕日韩三级 | 99久久久99久久国产片鸭王 | 美女视频h | 国产精品永久久久久 | 成人毛片网站 | 久久久久网站 | 综合久久99| 日韩在线精品视频 | 国产目拍亚洲精品99久久精品 | 99久久婷婷国产亚洲终合精品 | 天天色天天射天天干 | 99免费精品视频 | 精品自拍视频在线观看 | 欧美性大战久久久久久久蜜臀 | 日韩成人在线播放 | 国产精品视频一区二区三区不卡 | 国产又爽又黄的视频 | 超碰在线久 | 国产精品高潮呻吟久久aⅴ码 | 亚洲系列第一页 | 成年网站在线观看 |