|
下面程序是別人寫的,我想在此基礎(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
2014-11-30 10:25 上傳
點(diǎn)擊文件名下載附件
105.75 KB, 下載次數(shù): 2
|