跳出迴圈 |
缺席
|
cliff1989
一般會員 發表:6 回覆:2 積分:1 註冊:2009-03-23 發送簡訊給我 |
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 發送簡訊給我 |
|
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |