本文目录一览:
- 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);
}