請問以軟體詢問方式控制adc的問題 |
答題得分者是:jlian168
|
jyybasic
一般會員 發表:2 回覆:3 積分:1 註冊:2009-03-10 發送簡訊給我 |
下面是我的程式碼 我是要把它顯示在lcd上面 但是目前是不能work的(我是要用軟體詢問方式控制adc) 應該是我的程式碼錯誤 請有經驗的大大幫我看一下 給我想法就好了 不一定要直接解答給我 謝謝 [code c#] #include #include "Delay.h" //延遲函式庫 sbit RS=P2^0 ; //P1.0之代稱為RS sbit RW=P2^1 ; //P1.1之代稱為RW sbit E=P2^2 ; //P1.2之代稱為E sbit ADCRD=P3 ^0 ; sbit ADCWR=P3 ^1 ; sbit INT=P3^2; char code *keycode[]={"0","1","2","3","4","5","6","7","8","9"}; char code *ptr ; char code *digi[]={"DIGI:0.0000"}; int i,j,k,b[5],c=1; long a; delay(int d) { int i,j; for(i=0;i } void waitlcd() //等待LCD { unsigned char status; P1=0xff ; //P1設定為輸入埠 do { RS=0 ;RW=1 ;E=1 ; //為指令,讀取,致能LCD status=P1 ; //讀取狀態值 E=0 ; //禁能LCD } while(status&0x80) ; //等到忙碌旗標(BF)為零才離開 } void Command(cmd) //命令LCD { P1=cmd ; //送出命令值 RS=0 ;RW=0 ;E=1 ; //為指令,寫入,致能LCD E=0 ;RW=1 ; //為禁能LCD,讀取 waitlcd() ; //等待LCD完成命令 } void Data(char data1) //傳送資料到LCD { P1=data1 ; //送出資料 RS=1 ;RW=0 ;E=1 ; //為資料,寫入,致能LCD E=0 ;RW=1 ; //為禁能LCD,讀取 waitlcd() ; //等待LCD完成資料寫入 } void main() { ADCWR=0 ; ADCWR= 1 ; INT=1 ; INT=0 ; for(;;) ; ADCRD=0 ; a=P0 ; a=a*196; Command(0x3f) ; //採用8位元資料存取/雙列字/5*10點矩陣字型 Command(0xe) ; //顯示器ON/游標被顯示在位址計數器 Command(0x80) ; delay(2000); b[0]=a/10000; a=a000; b[1]=a/1000; a=a00; b[2]=a/100; a=a0; b[3]=a/10; a=a; b[4]=a; for(i=0;i<=4;i ) { j=i; if (i>=1) j ; Command(0x80 j) ; ptr=keycode[b[i]] ; //找出所按的鍵碼值之位址 while(*ptr!=0) //若其資料不為零則 Data(*ptr ); //把資料送到LCD去顯示 } ADCRD=1 ; INT=1 ; ADCWR=0 ; ADCWR= 1 ; } [/code] 編輯記錄
jyybasic 重新編輯於 2009-03-10 17:19:50, 註解 無‧
|
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
你是採用 Build-in ADC 的 8051 CPU 嗎? 還是外接 ADC Chip?
===================引 用 jyybasic 文 章=================== 下面是我的程式碼 我是要把它顯示在lcd上面 但是目前是不能work的(我是要用軟體詢問方式控制adc) 應該是我的程式碼錯誤 請有經驗的大大幫我看一下 給我想法就好了 不一定要直接解答給我 謝謝 [code c#] #include #include "Delay.h" //延遲函式庫 sbit RS=P2^0 ; //P1.0之代稱為RS sbit RW=P2^1 ; //P1.1之代稱為RW sbit E=P2^2 ; //P1.2之代稱為E sbit ADCRD=P3 ^0 ; sbit ADCWR=P3 ^1 ; sbit INT=P3^2; char code *keycode[]={"0","1","2","3","4","5","6","7","8","9"}; char code *ptr ; char code *digi[]={"DIGI:0.0000"}; int i,j,k,b[5],c=1; long a; delay(int d) { int i,j; for(i=0;i for(j=0;j<200;j ) ; } void waitlcd() //等待LCD { unsigned char status; P1=0xff ; //P1設定為輸入埠 do { RS=0 ;RW=1 ;E=1 ; //為指令,讀取,致能LCD status=P1 ; //讀取狀態值 E=0 ; //禁能LCD } while(status&0x80) ; //等到忙碌旗標(BF)為零才離開 } void Command(cmd) //命令LCD { P1=cmd ; //送出命令值 RS=0 ;RW=0 ;E=1 ; //為指令,寫入,致能LCD E=0 ;RW=1 ; //為禁能LCD,讀取 waitlcd() ; //等待LCD完成命令 } void Data(char data1) //傳送資料到LCD { P1=data1 ; //送出資料 RS=1 ;RW=0 ;E=1 ; //為資料,寫入,致能LCD E=0 ;RW=1 ; //為禁能LCD,讀取 waitlcd() ; //等待LCD完成資料寫入 } void main() { ADCWR=0 ; ADCWR= 1 ; INT=1 ; INT=0 ; for(;;) ; ADCRD=0 ; a=P0 ; a=a*196; Command(0x3f) ; //採用8位元資料存取/雙列字/5*10點矩陣字型 Command(0xe) ; //顯示器ON/游標被顯示在位址計數器 Command(0x80) ; delay(2000); b[0]=a/10000; a=a000; b[1]=a/1000; a=a00; b[2]=a/100; a=a0; b[3]=a/10; a=a; b[4]=a; for(i=0;i<=4;i ) { j=i; if (i>=1) j ; Command(0x80 j) ; ptr=keycode[b[i]] ; //找出所按的鍵碼值之位址 while(*ptr!=0) //若其資料不為零則 Data(*ptr ); //把資料送到LCD去顯示 } ADCRD=1 ; INT=1 ; ADCWR=0 ; ADCWR= 1 ; } [/code] |
jyybasic
一般會員 發表:2 回覆:3 積分:1 註冊:2009-03-10 發送簡訊給我 |
|
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
外接 ADC0804 用 8051 來控制的書一堆,幾乎是標準章節,
我手上的這 一本, 8051 C 語言專題製作 [B068]; 作者: 郭庭吉 ISBN:9861291326 504頁 / 套色 / 16開 初版日期:2004-09-29 最新出版日期:2004-09-29 定價:450元 第 9-1~9-6 節就有範例, 你可以參考, 啟動 ADC0804 #WR, 然後就一直檢查 ADC0804 的 #INT level 為 "H" 就表示轉換 OK, 然後讀取 Port 的值, 就這樣囉! ===================引 用 jyybasic 文 章=================== 我是使用外接adc0804來執行的 |
jyybasic
一般會員 發表:2 回覆:3 積分:1 註冊:2009-03-10 發送簡訊給我 |
|
jlian168
一般會員 發表:14 回覆:6 積分:14 註冊:2008-08-19 發送簡訊給我 |
|
jyybasic
一般會員 發表:2 回覆:3 積分:1 註冊:2009-03-10 發送簡訊給我 |
|
jlian168
一般會員 發表:14 回覆:6 積分:14 註冊:2008-08-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |