本文目錄一覽:
- 1、C語言程序各行意思?求大神
- 2、c語言中Random是什麼意思
- 3、C語言程序求教,不懂哪裡出了問題。程序和錯誤如下
- 4、誰有pulsesensor心率傳感器 的c語言程序,帶注釋的。在線等挺急的
- 5、跪求c語言大神給解答一下這個程序每句的意思!!臣妾看不懂啊!這是電路相關的。。
C語言程序各行意思?求大神
朋友,糾正一下,你這個不是C語言,是Arduino語言,有很多語法像而已。同時,提醒一下,你這個代碼很不完整,連loop函數都沒有,工作不了的,而且setup函數都沒寫完。
這個必定是一個帶超聲波感應的小車子了,但看代碼,很多功能都沒有打開。
另外,百度知道最長只能有1024個字符,給你注釋的代碼無法發到回答區,就給你截取三個圖好了,都是高清的,你將就着看吧。
c語言中Random是什麼意思
Random意思是返回一個0~num-1之間的隨機數。 random(num)是在stdlib.h中的一個宏定義。num和函數返回值都是整型數。
如需要在一個random()序列上生成真正意義的隨機數,在執行其子序列時使用randomSeed()函數預設一個絕對的隨機輸入,例如在一個斷開引腳上的analogRead()函數的返回值。
擴展資料
Random使用之前需要使用Randomize語句進行隨機數種子的初始化。RANDOM產生的是偽隨機數或者說是用一種複雜的方法計算得到的序列值,因此每次運算時需要一個不同的種子值。種子值不同,得到的序列值也不同。因此也就是真正的隨機數了。
RANDOM產生的是偽隨機數或者說是用一種複雜的方法計算得到的序列值,因此每次運算時需要一個不同的種子值。種子值不同,得到的序列值也不同。因此也就是真正的隨機數了。這也正是RANDOMIZE隨機初始化的作用。 VB里用 NEW RANDOM()來表示初始化。
參考資料來源:百度百科-random()
C語言程序求教,不懂哪裡出了問題。程序和錯誤如下
你這個真是有意思,入口函數main()沒有安,文件包含也沒有,函數也沒有自己定義,怎麼調用,你開什麼玩笑
誰有pulsesensor心率傳感器 的c語言程序,帶注釋的。在線等挺急的
這個是主程序和部分代碼由於字數限制所以你還是留個郵箱吧
void main(void)
{
unsigned char i;
sys_init();
beep = 1;
LCD12864_DisplayOneLine(0x80,ucStr1); //顯示信息1
LCD12864_DisplayOneLine(0x90,ucStr2); //顯示信息2
LCD12864_DisplayOneLine(0x88,ucStr3); //顯示信息3
LCD12864_DisplayOneLine(0x98,ucStr4); //顯示信息4
while(1)
{
sendDataToProcessing(‘S’, Signal); // 發送並處理原始脈搏傳感器數據
if (QS == true){ // 確定發現一個心跳
fadeRate = 255; // Set ‘fadeRate’ Variable to 255 to fade LED with pulse
sendDataToProcessing(‘B’,BPM); // 發送一個’B’和心率
sendDataToProcessing(‘Q’,IBI); // send time between beats with a ‘Q’ prefix
QS = false; // reset the Quantified Self flag for next time
LCD_disp_list_char(2,4,DisBuff);//在LCD12864上顯示BPM
}
delay(138); // 延時 19.6ms
LCD_disp_list_char(4,4,DisBuff2);
//ledFadeToBeat();
if(Pressure100){
for(i=0;i8;i++){
delay(1000);}
if (Pressure100){
beep = 0;}}
if(BPM60|BPM100){
for(i=0;i9;i++){
delay(1000);}
if(BPM60|BPM100){
beep = 0;}
for(i = 0;i16;i++) //依次執行寫入操作
{
putchar(ucStr1[i]);
}
for(i = 0;i16;i++) //依次執行寫入操作
{
putchar(ucStr2[i]);
}
for(i=0;i3;i++)
{
putchar(DisBuff[i]);}
for(i = 0;i16;i++) //依次執行寫入操作
{
putchar(ucStr3[i]);
}
for(i = 0;i16;i++) //依次執行寫入操作
{
putchar(ucStr4[i]);
}
for(i=0;i4;i++)
{
putchar(DisBuff2[i]);}
}
}
//void ledFadeToBeat(){
// fadeRate -= 15; // set LED fade value
// fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!
// analogWrite(fadePin,fadeRate); // fade LED
// }
/******************************************************************************
函數名稱:GetADCResult
函數功能:獲取AD轉換結果函數
入口參數:BYTE ch(通道選擇)
返回值:result(A/D轉換結果)
備註:無
*******************************************************************************/
unsigned int GetADCResult(BYTE ch)
{ unsigned int result; //AD轉換結果result
ADC_CONTR=0xf8; //清除ADC控制寄存器ADC CONTR的CHS2、CHS1、CHS0(清除通道選擇)
_nop_(); //設置ADC CONTR控制寄存器後,要加4個空操作延時才可以正確讀到ADC CONTR寄存器的值
_nop_();
_nop_();
_nop_();
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START; //開ADC電源,選擇AD轉換速率,並選擇AD通道,開始AD轉換
_nop_(); //設置ADC CONTR控制寄存器後,要加4個空操作延時才可以正確讀到ADC CONTR寄存器的值
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR ADC_FLAG));//等待AD轉換結束
ADC_CONTR = ~ADC_FLAG; //關閉ADC
result=ADC_RES; //將AD轉換結果的高兩位賦給result
result=result8; //將result循環左移8位
result+=ADC_RESL; //將AD轉換結果的底8位加高兩位共10位給result
return result; //返回10位AD轉換結果
}
void sendDataToProcessing(char symbol, int dat ){
putchar(symbol); // symbol prefix tells Processing what type of data is coming
printf(“%d\r\n”,dat); // the data to send culminating in a carriage return
}
void UART_init(void)
{
TMOD = 0x20; //定時器工作在定時器1的方式2
PCON = 0x00; //不倍頻
SCON = 0x50; //串口工作在方式1,並且啟動串行接收
TH1 = 0xFd; //設置波特率 9600
TL1 = 0xFd;
TR1 = 1; //啟動定時器1
}
char putchar(unsigned char dat)
{
TI=0;
SBUF=dat;
while(!TI);
TI=0;
return SBUF;
}
void _nop_ (void)
{}
void T0_init(void){
// Initializes Timer0 to throw an interrupt every 2mS.
TMOD |= 0x01; //16bit TIMER
TL0=T0MS;
TH0=T0MS8;
TR0=1; //start Timer 0
ET0=1; //enable Timer Interrupt
EA=1; // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
}
void T1_init(void){
// Initializes Timer0 to throw an interrupt every 2mS.
TMOD |= 0x01; //16bit TIMER
TL1=T0MS2;
TH1=T0MS28;
TR1=1; //start Timer 0
ET1=1; //enable Timer Interrupt
EA=1; // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
}
void ADC_init(unsigned char channel)
{
P1ASF=ADC_MASKchannel; //選擇P1. channel作為A/D輸入來用
ADC_RES=0; //清除ADC結果寄存器RES
ADC_RESL=0; //清除ADC結果寄存器RESL
AUXR1 |= 0x04; //調整ADC格式的結果
}
void Timer1_rountine(void) interrupt 1
{}
unsigned int analogRead(unsigned char channel)
{
unsigned int result;
while (!(ADC_CONTR ADC_FLAG));//Wait complete flag
ADC_CONTR =!ADC_FLAG; //clear ADC FLAG
result=ADC_RES;
result=result8;
result+=ADC_RESL;
// ADC_CONTR|=channel|ADC_POWER|ADC_SPEEDLL|ADC_START;
return result;
}
// Timer 0中斷子程序,每2MS中斷一次,讀取AD值,計算心率值
void Timer0_rountine(void) interrupt 1
{
int N;
unsigned char i;
// keep a running total of the last 10 IBI values
unsigned int runningTotal = 0; // clear the runningTotal variable
EA=0; // 關定時器中斷
TL0=T0MS;
TH0=T0MS8; //重裝16位定時器初值
Pressure = (GetADCResult(PressurePin)); //****************
DisBuff2[3] = Pressure%10+48;//取個位數
DisBuff2[2] = Pressure%100/10+48; //取十位數
DisBuff2[1] = Pressure%1000/100+48; //百位數 ***************
DisBuff2[0] = Pressure/1000+48;//取千位數
Signal = GetADCResult(PulsePin); // 讀脈搏傳感器
sampleCounter += 2; // 使用這個值跟蹤記錄脈搏時間間隔在ms級
N = sampleCounter – lastBeatTime; // 減上個節拍的時間來避免噪聲
// 找到脈搏波的波峰和波谷
if(Signal thresh N (IBI/5)*3){ // 如果脈搏傳感器輸出小於電源電壓一半 並且 消除噪聲時間小於 3/5個脈搏時間間隔
if (Signal Trough){ // 如果脈搏傳感器輸出小于波谷
Trough = Signal; // 跟蹤脈搏波的最低點
}
}
if(Signal thresh Signal Peak){ // 如果輸出大於電源電壓一半並且大于波峰
Peak = Signal; // 將新值設為波峰
} // 跟蹤脈搏波的波峰
if (N 250){ // 避免高頻噪聲
if ( (Signal thresh) (Pulse == false) (N (IBI/5)*3) ){
Pulse = true; // 當檢測到一個脈搏時將脈搏標誌設為真
blinkPin=0; // 點亮脈搏燈
IBI = sampleCounter – lastBeatTime; // 測量兩個脈搏的時間in mS
lastBeatTime = sampleCounter; // 跟蹤脈搏時間
if(secondBeat){ // 如果這是第二個脈搏
secondBeat = false; // 清除標識
for(i=0; i=9; i++){ // 全部的數據作為真實脈搏BMP
rate[i] = IBI;
}
}
if(firstBeat){ // 如果是第一個脈搏
firstBeat = false; // 清除標誌
secondBeat = true; // 設置第二脈搏標誌
EA=1; //開中斷
return; // IBI 值是不可靠的所以拋棄
}
for(i=0; i=8; i++){ // 移動數據在rate數組中
rate[i] = rate[i+1]; // 頂替舊值
runningTotal += rate[i]; // 加上第九個新值
}
rate[9] = IBI; // 加最後的IBI到rate數組中
runningTotal += rate[9]; // 加上一個IBI到runningTotal
runningTotal /= 10; // 取平均值
BPM = 60000/runningTotal; // 一分鐘可以檢測到多少個心跳及 BPM!
if(BPM200)BPM=200; //限制BPM最高顯示值
if(BPM30)BPM=30; //限制BPM最低顯示值
DisBuff[2] = BPM%10+48;//取個位數
DisBuff[1] = BPM%100/10+48; //取十位數
DisBuff[0] = BPM/100+48; //百位數
if(DisBuff[0]==48)
DisBuff[0]=32;
QS = true; // 設置QS標誌
// QS FLAG IS NOT CLEARED INSIDE THIS ISR
}
}
if (Signal thresh Pulse == true){ // 當電壓歸零節拍結束
blinkPin=1; // 熄滅脈搏燈
Pulse = false; // 重置脈搏標識我們可以重新測
amp = Peak – Trough; // 得到脈搏波的峰峰值
thresh = amp/2 + Trough; // 設置thresh位脈搏峰峰值的一半
Peak = thresh; // 為下一次測試重置波峰
Trough = thresh;
}
if (N 2500){ //如果超過2.5秒沒有檢測到一個脈搏
thresh = 512; // 重新設置波谷
Peak = 512; // 重新設置波峰
Trough = 512; // 重新設置間隔
lastBeatTime = sampleCounter; // 把最後的節拍時間更新
firstBeat = true; // 重新設置標誌避免噪聲
secondBeat = false; // 當我們得到心跳的時候
}
EA=1; // 開中斷
}// end isr
跪求c語言大神給解答一下這個程序每句的意思!!臣妾看不懂啊!這是電路相關的。。
#define ANALOG_PIN 1
#define BUTTON_PIN 8
#define LED_PIN 5
#define LED_SCALE 2.6
#define MIN_LED 150
#define LED_OFFSET 300
#define DEBOUNCE_DELAY 10
int lightLevel = 0;
bool ledOn = false;
/**
* Setup the serial communication and pin modes.
*/
void setup()
{
Serial.begin(9600);//設置串口波特率9600
pinMode(BUTTON_PIN, INPUT);//引腳8為輸入模式
pinMode(LED_PIN, OUTPUT);//引腳5為輸出模式
// DDRD = (DDRD | B00000100) B11110111; //e.g.for BUTTON_PIN = 3,LED_PIN = 2
}
/**
* Read and debounce the input from the button.
*/
bool buttonPressed()
{
int button = digitalRead(BUTTON_PIN);//讀取引腳8的電平
if(button == LOW)//如果是高電平
{
while(button == LOW)
{
delay(1);//延時
button = digitalRead(BUTTON_PIN);
}
delay(DEBOUNCE_DELAY);//延時
return true;
}
return false;
}
/**
* Check the light level, make sure the light level is with range,
* set the LED brightness, if the button is pressed toggle the LED.
*/
void loop()
{
if(buttonPressed()) //引腳8為高電平時,就是按下按鍵
{
ledOn = !ledOn;//反轉
Serial.print(“LED is now”);//串口輸出信息
Serial.print(ledOn ? ” on” : ” off”);
}
if(ledOn) //如果為真
{
//下面應該是PWM調節燈的光暗度
lightLevel = (analogRead(ANALOG_PIN) – LED_OFFSET)*LED_SCALE; // 10 bits
if(lightLevel 1023)
lightLevel = 1023;
if(lightLevel MIN_LED)
lightLevel = MIN_LED;
analogWrite(LED_PIN, lightLevel 2); // 8 bits
Serial.println(lightLevel);//串口輸出相關信息
}
else
{
digitalWrite(LED_PIN, LOW);//LED引腳輸出高電平
}
delay(100);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/153411.html