Re: [請益] 關於ADC0804訊號擷取的問題
※ 引述《endlessbbs ()》之銘言:
: 各位前輩好,小弟目前在專題遇上了瓶頸,上來發問還請各位不吝指教<(_ _)>
: 專題要利用ADC0804讀取加速規的訊號
: 通過程式判別後輸出到LED上
: 動作流程大約是這樣:加速規→ADC0804→8051→LED
: 希望達到的目的是讀到加速規的訊號
: 並且大致上把它輸出的訊號範圍切成8等份輸出到LED燈上
: 讓他亮1~8個燈(一顆一顆亮上去)最後後一個燈可以亮1~2秒
: 在擷取訊號及延遲這邊遇到瓶頸
: 目前的想法是用if判別完後,用延遲副程式去延遲led的秒數
: 但是效果不佳,延遲副程式的秒數設定太小的話訊號會一下子就過去
: 太大的話加速規(用的是xy軸加速規)要晃動好幾次才會讀到訊號
: 或是晃一次就會顯示兩次燈號(亮完一次後還沒晃就直接亮第二次囧)
: 請問要怎麼修正程式比較好,還請各位前輩指點一下>"<
: 不好意思,程式還蠻囉嗦的囧>
#include <reg51.h>
#include <stdlib.h>
void delay150us();//宣告ADC讀取延遲副程式
void delay_fun(); //LED一顆一顆亮上去延遲副程式
sbit ADCRD=P3^7 ;//設ADCRD腳位為P3.7
sbit ADCWR=P3^6 ;//設ADCWR腳位為P3.6
sbit ADCINTR=P3^2;//設ADCINTR腳位為P3.2
char code ledtab[8]={0x1,0x3,0x7,0xf,0x1f,0x3f,0x7f,0xff};
//char code ledtab[8]={0xf,0xe,0xc,0x8,0x18,0x38,0x78,0xf8};
//這個顯示表比較好玩 :P
main()
{
while(1)
{
ADCWR=0 ; ADCWR= 1 ;
delay150us() ;
ADCRD=0 ;
P1=ledtab[P2>>5];
delayfun();
}
}
你的程式改這樣應該就可以了,因為動量感測器本身就是是線性的。
所以本來就會一階一階的跳,不需要你去show funny。
--
~~於是,銀河的歷史又被海賊抹黑了好幾百頁。
- A23203 -
BM4GRM Harlock WolfLord
★ <<上站通知>> -- 我來啦!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.46.226.44
推
09/09 23:07, , 1F
09/09 23:07, 1F
推
09/09 23:20, , 2F
09/09 23:20, 2F
→
09/09 23:22, , 3F
09/09 23:22, 3F
→
09/09 23:22, , 4F
09/09 23:22, 4F
推
09/10 00:22, , 5F
09/10 00:22, 5F
→
09/10 03:41, , 6F
09/10 03:41, 6F
→
09/10 03:41, , 7F
09/10 03:41, 7F
推
09/11 00:17, , 8F
09/11 00:17, 8F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章