|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe |
請別見笑,這是我的第一個PICC程序 |
| 作者:zhouyh 欄目:單片機 |
在大家的幫助下寫了個ADC程序,用MC14489實現(xiàn)4個LED顯示,可測0-5V,請大家多提意見呀! //20050606-20050617 TEST adc MC14489 DISPLAY the result 0-5v(0-ff)R F73-RA0 //by zhouyh #include <pic.h> unsigned CHAR digit[4]; //4 digit leds buffer bank0(digit[0]) DISPLAY the most high bit of voltage data unsigned CHAR data; unsigned LONG result; //如果只顯示4位可以取INT unsigned int i; //spi子程序,顯示4位數 void SPILED(data) { SSPBUF=data; //傳送啟動 do { ; }while(SSPIF==0); SSPIF=0; } //延時程序 void delay() { for(i = 4000; --i ;) continue; } //disply routines void DISPLAY() { RA5=0; //14489 enable data=0x01; //控制字 SPILED(data); RA5=1; delay(); RA5=0; data=0x90; //bank1小數點和bank5的值0000 1101(10110000的顛倒) SPILED(data); data=digit[3]|digit[2]<<4; //for example want to DISPLAY 12 sending out 0x12 but DISPLAY 21 SPILED(data); data=digit[0]|digit[1]<<4; SPILED(data); RA5=1; } void initial() { PIR1=0; SSPCON=0x30; SSPSTAT=0xC0; ADCON1=4; //PORTA FOR DIGITAL I/O TRISC5=0; //sdo TRISC3=0; //clk TRISA5=0; //RA引腳置為輸出 RA5=1; } // ADC程序 unsigned CHAR read_a2d(void){ unsigned CHAR i; ADCON0=0; //SELECT Fosc/2 ADON=1; // turn on the A2D conversion i=0x20; while(i--); //等待一段時間(A/D采樣) ADGO=1; // initiate conversion on the SELECTed channel while(ADGO)continue; return(ADRES); } //主程序 void main() { initial(); while(1){ result=read_a2d(); result=result*5000/255; digit[0] = result / 1000; // led1 from left to right result= result - digit[0]*1000; digit[1] = result / 100; // led2 from left to right result= result - digit[1]*100; digit[2] = result / 10; // led3 from left to right result= result - digit[2]*10; digit[3] = result ; // led4 from left to right DISPLAY(); } } * - 本貼最后修改時間:2005-6-21 18:01:55 修改者:zhouyh |
|
|
| 免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |