全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1592
推到 Plurk!
推到 Facebook!

跳出迴圈

缺席
cliff1989
一般會員


發表:6
回覆:2
積分:1
註冊:2009-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-03 19:08:46 IP:115.43.xxx.xxx 未訂閱
8051接收ADC0804,分別顯示在LCD與七段X3上,以下是程式碼
中間 do{
ADC_TO_LED();
scan();
}while(??????);
的部分不知如何寫..現在的問題是若沒 迴圈,則七段會一直閃,若加了無窮迴圈則是不閃,但轉VR數字不變,要reset 8051後數字才會變,現在想讓他執行迴圈(即不閃),若ADCDB值變了則跳出迴圈顯示新數字~

[code cpp]
#include
#define ADCWR P1_7
#define ADCINIT P1_6
#define ADCDB P3
#define RS P1_3
#define RW P1_4
#define E P1_5
#define DB P2
void init(void);
void position(char line,column);
void wrins(char instruction);
void display(void);
void display2(void);
void wrdata(char d);
void delayms(unsigned int time);
void display3(char *string);
void scan(void);
void ADC_TO_LED(void);
unsigned int i,A,X,t;
char code *ptr ;
char code *ptr2 ;
char code *ptr3 ;
char table[4]={0,10,0,0};
char table2[3]={0,0,0};
char table3[3]={0,0,0};
char code *keycode[]={"0","1","2","3","4","5","6","7","8","9","."} ;
char code SEG[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
code char string1[]={ "V" };
main()
{
init();
position(1,6);
display3(string1);
while(1)
{
ADCWR=0;
ADCWR=1;
while(ADCINIT==1);
A=5.0/255*ADCDB*10000;
table[0]=(A/10000);
table[2]=((A000)/1000);
table[3]=(((A000)00)/100);
position(1,1);
display();
X=ADCDB 1;
table2[0]=X/100;
table2[1]=(X0)/10;
table2[2]=((X0))/1;
position(2,1);
display2();
do{
ADC_TO_LED();
scan();
}while(??????);
}
}
void init(void)
{
delayms(30);
wrins(0x38);
wrins(0x38);
wrins(0x38);
wrins(0x38);
wrins(0x08);
wrins(0x01);
wrins(0x06);
wrins(0x0c);
}

void position(char line,column)
{
unsigned char instruction;
line--;
column--;
instruction=0x80 (0x40*line column);
wrins(instruction);
}

void wrins(char instruction)
{
RS=0;
RW=0;
E=0;
delayms(1);
E=1;
DB=instruction;
delayms(1);
E=0;
delayms(8);
}

void display(void)
{
unsigned char i;
for(i=0; i<4; i )
{
ptr= keycode[table[i]];
wrdata(*ptr );
}
}
void display2(void)
{
unsigned char i;
for(i=0; i<3; i )
{
ptr2= keycode[table2[i]];
wrdata(*ptr2 );
}
}
void display3(char *string)
{
char k=0;
while(string[k] !=0x00)
{
wrdata(string[k]);
k ;
}
}
void wrdata(char d)
{
RS=1;
RW=0;
E=0;
delayms(1);
E=1;
DB=d;
delayms(1);
E=0;
delayms(1);
}
void scan(void)
{
P0=table3[0];
P1_2=0;
delayms(2);
P1_2=1;
P0=table3[1];
P1_1=0;
delayms(2);
P1_1=1;
P0=table3[2];
P1_0=0;
delayms(2);
P1_0=1;
}
void ADC_TO_LED(void)
{
X=ADCDB 1;
table3[0]=SEG[X/100];
table3[1]=SEG[(X0)/10];
table3[2]=SEG[((X0))/1];
}
void delayms(unsigned int time)
{
unsigned int n;
while(time>0)
{
n=120;
while(n>0) n--;
time--;
}
}

[/code]
編輯記錄
taishyang 重新編輯於 2009-05-03 23:06:50, 註解 無‧
mymj
版主


發表:132
回覆:486
積分:608
註冊:2002-10-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-23 20:34:44 IP:59.105.xxx.xxx 訂閱
IO定義完成後,先逐一功能分別測試,無誤後再連起來

mymj
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-24 09:44:20 IP:61.229.xxx.xxx 訂閱
我想要把資料秀在 7 Segment 上應該要採用時間中斷,
例如每 12mS 掃描一次 7-Segment 才不會讓人的眼睛看到 7-Segment 會閃爍!
系統時間:2024-05-06 7:56:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!