|
下面程序是別人寫的,我想在此基礎上實現的是,
如按此順序: 當電壓約 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
2014-11-30 10:25 上傳
點擊文件名下載附件
105.75 KB, 下載次數: 2
|