C++ÖÐextern ¡°C¡±º¬ÒåÉî²ã̽Ë÷

C++与C语言互操作

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.ÒýÑÔ

¡¡¡¡C++ÓïÑԵĴ´½¨³õÖÔÊÇ¡°a?better?C¡±£¬µ«ÊÇÕâ²¢²»Òâζ×ÅC++ÖÐÀàËÆCÓïÑÔµÄÈ«¾Ö±äÁ¿ºÍº¯ÊýËù²ÉÓõıàÒëºÍÁ¬½Ó·½Ê½ÓëCÓïÑÔÍêÈ«Ïàͬ¡£×÷ΪһÖÖÓûÓëC¼æÈݵÄÓïÑÔ£¬C++±£ÁôÁËÒ»²¿·Ö¹ý³ÌʽÓïÑÔµÄÌØµã£¨±»ÊÀÈ˳ÆÎª¡°²»³¹µ×µØÃæÏò¶ÔÏó¡±£©£¬Òò¶øËü¿ÉÒÔ¶¨Òå²»ÊôÓÚÈκÎÀàµÄÈ«¾Ö±äÁ¿ºÍº¯Êý¡£µ«ÊÇ£¬C++±Ï¾¹ÊÇÒ»ÖÖÃæÏò¶ÔÏóµÄ³ÌÐòÉè¼ÆÓïÑÔ£¬ÎªÁËÖ§³Öº¯ÊýµÄÖØÔØ£¬C++¶ÔÈ«¾Öº¯ÊýµÄ´¦Àí·½Ê½ÓëCÓÐÃ÷ÏԵIJ»Í¬¡£

¡¡¡¡2.´Ó±ê׼ͷÎļþ˵Æð

¡¡¡¡Ä³ÆóÒµÔø¾­¸ø³öÈçϵÄÒ»µÀÃæÊÔÌ⣺

¡¡¡¡ÃæÊÔÌâ
¡¡¡¡ÎªÊ²Ã´±ê׼ͷÎļþ¶¼ÓÐÀàËÆÒÔϵĽṹ£¿?


#ifndef?__INCvxWorksh
#define?__INCvxWorksh?
#ifdef?__cplusplus
extern?"C"?{
#endif?
/*...*/?
#ifdef?__cplusplus
}
#endif?
#endif?/*?__INCvxWorksh?*/

¡¡¡¡·ÖÎö
¡¡¡¡ÏÔÈ»£¬Í·ÎļþÖеıàÒëºê¡°#ifndef?__INCvxWorksh¡¢#define?__INCvxWorksh¡¢#endif¡±?µÄ×÷ÓÃÊÇ·ÀÖ¹¸ÃÍ·Îļþ±»Öظ´ÒýÓá£

¡¡¡¡ÄÇô
#ifdef?__cplusplus
extern?"C"?{
#endif?
#ifdef?__cplusplus
}
#endif?

¡¡¡¡µÄ×÷ÓÃÓÖÊÇÊ²Ã´ÄØ£¿ÎÒÃǽ«ÔÚÏÂÎÄÒ»Ò»µÀÀ´¡£
¡¡¡¡3.Éî²ã½ÒÃÜextern?"C"

¡¡¡¡extern?"C"?°üº¬Ë«Öغ¬Ò壬´Ó×ÖÃæÉϼ´¿ÉµÃµ½£ºÊ×ÏÈ£¬±»ËüÐÞÊεÄÄ¿±êÊÇ¡°extern¡±µÄ£»Æä´Î£¬±»ËüÐÞÊεÄÄ¿±êÊÇ¡°C¡±µÄ¡£ÈÃÎÒÃÇÀ´Ïêϸ½â¶ÁÕâÁ½Öغ¬Òå¡£

¡¡¡¡±»extern?"C"ÏÞ¶¨µÄº¯Êý»ò±äÁ¿ÊÇexternÀàÐ͵ģ»

¡¡¡¡externÊÇC/C++ÓïÑÔÖбíÃ÷º¯ÊýºÍÈ«¾Ö±äÁ¿×÷Ó÷¶Î§£¨¿É¼ûÐÔ£©µÄ¹Ø¼ü×Ö£¬¸Ã¹Ø¼ü×Ö¸æËß±àÒëÆ÷£¬ÆäÉùÃ÷µÄº¯ÊýºÍ±äÁ¿¿ÉÒÔÔÚ±¾Ä£¿é»òÆäËüÄ£¿éÖÐʹÓ᣼Çס£¬ÏÂÁÐÓï¾ä£º
¡¡¡¡extern?int?a;

¡¡¡¡½ö½öÊÇÒ»¸ö±äÁ¿µÄÉùÃ÷£¬Æä²¢²»ÊÇÔÚ¶¨Òå±äÁ¿a£¬²¢Î´Îªa·ÖÅäÄÚ´æ¿Õ¼ä¡£±äÁ¿aÔÚËùÓÐÄ£¿éÖÐ×÷ΪһÖÖÈ«¾Ö±äÁ¿Ö»Äܱ»¶¨ÒåÒ»´Î£¬·ñÔò»á³öÏÖÁ¬½Ó´íÎó¡£

¡¡¡¡Í¨³££¬ÔÚÄ£¿éµÄÍ·ÎļþÖжԱ¾Ä£¿éÌṩ¸øÆäËüÄ£¿éÒýÓõĺ¯ÊýºÍÈ«¾Ö±äÁ¿ÒԹؼü×ÖexternÉùÃ÷¡£ÀýÈ磬Èç¹ûÄ£¿éBÓûÒýÓøÃÄ£¿éAÖж¨ÒåµÄÈ«¾Ö±äÁ¿ºÍº¯ÊýʱֻÐè°üº¬Ä£¿éAµÄÍ·Îļþ¼´¿É¡£ÕâÑù£¬Ä£¿éBÖе÷ÓÃÄ£¿éAÖеĺ¯Êýʱ£¬ÔÚ±àÒë½×¶Î£¬Ä£¿éBËäÈ»ÕÒ²»µ½¸Ãº¯Êý£¬µ«ÊDz¢²»»á±¨´í£»Ëü»áÔÚÁ¬½Ó½×¶ÎÖдÓÄ£¿éA±àÒëÉú³ÉµÄÄ¿±ê´úÂëÖÐÕÒµ½´Ëº¯Êý¡£

¡¡¡¡Óëextern¶ÔÓ¦µÄ¹Ø¼ü×ÖÊÇstatic£¬±»ËüÐÞÊεÄÈ«¾Ö±äÁ¿ºÍº¯ÊýÖ»ÄÜÔÚ±¾Ä£¿éÖÐʹÓá£Òò´Ë£¬Ò»¸öº¯Êý»ò±äÁ¿Ö»¿ÉÄܱ»±¾Ä£¿éʹÓÃʱ£¬Æä²»¿ÉÄܱ»extern?¡°C¡±ÐÞÊΡ£

¡¡¡¡±»extern?"C"ÐÞÊεıäÁ¿ºÍº¯ÊýÊǰ´ÕÕCÓïÑÔ·½Ê½±àÒëºÍÁ¬½ÓµÄ£»

¡¡¡¡Î´¼Óextern?¡°C¡±ÉùÃ÷ʱµÄ±àÒ뷽ʽ

¡¡¡¡Ê×ÏÈ¿´¿´C++ÖжÔÀàËÆCµÄº¯ÊýÊÇÔõÑù±àÒëµÄ¡£

¡¡¡¡×÷ΪһÖÖÃæÏò¶ÔÏóµÄÓïÑÔ£¬C++Ö§³Öº¯ÊýÖØÔØ£¬¶ø¹ý³ÌʽÓïÑÔCÔò²»Ö§³Ö¡£º¯Êý±»C++±àÒëºóÔÚ·ûºÅ¿âÖеÄÃû×ÖÓëCÓïÑԵIJ»Í¬¡£ÀýÈ磬¼ÙÉèij¸öº¯ÊýµÄÔ­ÐÍΪ£º?
void?foo(?int?x,?int?y?);

¡¡¡¡¸Ãº¯Êý±»C±àÒëÆ÷±àÒëºóÔÚ·ûºÅ¿âÖеÄÃû×ÖΪ_foo£¬¶øC++±àÒëÆ÷Ôò»á²úÉúÏñ_foo_int_intÖ®ÀàµÄÃû×Ö£¨²»Í¬µÄ±àÒëÆ÷¿ÉÄÜÉú³ÉµÄÃû×Ö²»Í¬£¬µ«ÊǶ¼²ÉÓÃÁËÏàͬµÄ»úÖÆ£¬Éú³ÉµÄÐÂÃû×Ö³ÆÎª¡°mangled?name¡±£©¡£

¡¡¡¡_foo_int_intÕâÑùµÄÃû×Ö°üº¬Á˺¯ÊýÃû¡¢º¯Êý²ÎÊýÊýÁ¿¼°ÀàÐÍÐÅÏ¢£¬C++¾ÍÊÇ¿¿ÕâÖÖ»úÖÆÀ´ÊµÏÖº¯ÊýÖØÔØµÄ¡£ÀýÈ磬ÔÚC++ÖУ¬º¯Êývoid?foo(?int?x,?int?y?)Óëvoid?foo(?int?x,?float?y?)±àÒëÉú³ÉµÄ·ûºÅÊDz»ÏàͬµÄ£¬ºóÕßΪ_foo_int_float¡£
¡¡¡¡Í¬ÑùµØ£¬C++ÖеıäÁ¿³ýÖ§³Ö¾Ö²¿±äÁ¿Í⣬»¹Ö§³ÖÀà³ÉÔ±±äÁ¿ºÍÈ«¾Ö±äÁ¿¡£Óû§Ëù±àд³ÌÐòµÄÀà³ÉÔ±±äÁ¿¿ÉÄÜÓëÈ«¾Ö±äÁ¿Í¬Ãû£¬ÎÒÃÇÒÔ"."À´Çø·Ö¡£¶ø±¾ÖÊÉÏ£¬±àÒëÆ÷ÔÚ½øÐбàÒëʱ£¬Ó뺯ÊýµÄ´¦ÀíÏàËÆ£¬Ò²ÎªÀàÖеıäÁ¿È¡ÁËÒ»¸ö¶ÀÒ»ÎÞ¶þµÄÃû×Ö£¬Õâ¸öÃû×ÖÓëÓû§³ÌÐòÖÐͬÃûµÄÈ«¾Ö±äÁ¿Ãû×Ö²»Í¬¡£

¡¡¡¡Î´¼Óextern?"C"ÉùÃ÷ʱµÄÁ¬½Ó·½Ê½

¡¡¡¡¼ÙÉèÔÚC++ÖУ¬Ä£¿éAµÄÍ·ÎļþÈçÏ£º
//?Ä£¿éAÍ·Îļþ¡¡moduleA.h
#ifndef?MODULE_A_H
#define?MODULE_A_H
int?foo(?int?x,?int?y?);
#endif

¡¡¡¡ÔÚÄ£¿éBÖÐÒýÓøú¯Êý£º
//?Ä£¿éBʵÏÖÎļþ¡¡moduleB.cpp
#include?"moduleA.h"
foo(2,3);

¡¡¡¡Êµ¼ÊÉÏ£¬ÔÚÁ¬½Ó½×¶Î£¬Á¬½ÓÆ÷»á´ÓÄ£¿éAÉú³ÉµÄÄ¿±êÎļþmoduleA.objÖÐѰÕÒ_foo_int_intÕâÑùµÄ·ûºÅ£¡

¡¡¡¡¼Óextern?"C"ÉùÃ÷ºóµÄ±àÒëºÍÁ¬½Ó·½Ê½

¡¡¡¡¼Óextern?"C"ÉùÃ÷ºó£¬Ä£¿éAµÄÍ·Îļþ±äΪ£º
//?Ä£¿éAÍ·Îļþ¡¡moduleA.h
#ifndef?MODULE_A_H
#define?MODULE_A_H
extern?"C"?int?foo(?int?x,?int?y?);
#endif

¡¡¡¡ÔÚÄ£¿éBµÄʵÏÖÎļþÖÐÈÔÈ»µ÷ÓÃfoo(?2,3?)£¬Æä½á¹ûÊÇ£º

¡¡¡¡£¨1£©Ä£¿éA±àÒëÉú³ÉfooµÄÄ¿±ê´úÂëʱ£¬Ã»ÓÐ¶ÔÆäÃû×Ö½øÐÐÌØÊâ´¦Àí£¬²ÉÓÃÁËCÓïÑԵķ½Ê½£»

¡¡¡¡£¨2£©Á¬½ÓÆ÷ÔÚΪģ¿éBµÄÄ¿±ê´úÂëѰÕÒfoo(2,3)µ÷ÓÃʱ£¬Ñ°ÕÒµÄÊÇδ¾­Ð޸ĵķûºÅÃû_foo¡£

¡¡¡¡Èç¹ûÔÚÄ£¿éAÖк¯ÊýÉùÃ÷ÁËfooΪextern?"C"ÀàÐÍ£¬¶øÄ£¿éBÖаüº¬µÄÊÇextern?int?foo(?int?x,?int?y?)?£¬ÔòÄ£¿éBÕÒ²»µ½Ä£¿éAÖеĺ¯Êý£»·´Ö®ÒàÈ»¡£

¡¡¡¡ËùÒÔ£¬¿ÉÒÔÓÃÒ»¾ä»°¸ÅÀ¨extern?¡°C¡±Õâ¸öÉùÃ÷µÄÕæÊµÄ¿µÄ£¨ÈκÎÓïÑÔÖеÄÈκÎÓï·¨ÌØÐԵĵ®Éú¶¼²»ÊÇËæÒâ¶øÎªµÄ£¬À´Ô´ÓÚÕæÊµÊÀ½çµÄÐèÇóÇý¶¯¡£ÎÒÃÇÔÚ˼¿¼ÎÊÌâʱ£¬²»ÄÜֻͣÁôÔÚÕâ¸öÓïÑÔÊÇÔõô×öµÄ£¬»¹ÒªÎÊÒ»ÎÊËüΪʲôҪÕâô×ö£¬¶¯»úÊÇʲô£¬ÕâÑùÎÒÃÇ¿ÉÒÔ¸üÉîÈëµØÀí½âÐí¶àÎÊÌ⣩£º
¡¡¡¡ÊµÏÖC++ÓëC¼°ÆäËüÓïÑԵĻìºÏ±à³Ì¡£
¡¡¡¡Ã÷°×ÁËC++ÖÐextern?"C"µÄÉèÁ¢¶¯»ú£¬ÎÒÃÇÏÂÃæÀ´¾ßÌå·ÖÎöextern?"C"ͨ³£µÄʹÓü¼ÇÉ¡£
¡¡¡¡4.extern?"C"µÄ¹ßÓ÷¨

¡¡¡¡£¨1£©ÔÚC++ÖÐÒýÓÃCÓïÑÔÖеĺ¯ÊýºÍ±äÁ¿£¬ÔÚ°üº¬CÓïÑÔÍ·Îļþ£¨¼ÙÉèΪcExample.h£©Ê±£¬Ðè½øÐÐÏÂÁд¦Àí£º
extern?"C"
{
#include?"cExample.h"
}

¡¡¡¡¶øÔÚCÓïÑÔµÄÍ·ÎļþÖУ¬¶ÔÆäÍⲿº¯ÊýÖ»ÄÜÖ¸¶¨ÎªexternÀàÐÍ£¬CÓïÑÔÖв»Ö§³Öextern?"C"ÉùÃ÷£¬ÔÚ.cÎļþÖаüº¬ÁËextern?"C"ʱ»á³öÏÖ±àÒëÓï·¨´íÎó¡£

¡¡¡¡±ÊÕß±àдµÄC++ÒýÓÃCº¯ÊýÀý×Ó¹¤³ÌÖаüº¬µÄÈý¸öÎļþµÄÔ´´úÂëÈçÏ£º
/*?cÓïÑÔÍ·Îļþ£ºcExample.h?*/
#ifndef?C_EXAMPLE_H
#define?C_EXAMPLE_H
extern?int?add(int?x,int?y);
#endif
/*?cÓïÑÔʵÏÖÎļþ£ºcExample.c?*/
#include?"cExample.h"
int?add(?int?x,?int?y?)
{
return?x?+?y;
}
//?c++ʵÏÖÎļþ£¬µ÷ÓÃadd£ºcppFile.cpp
extern?"C"?
{
#include?"cExample.h"
}
int?main(int?argc,?char*?argv[])
{
add(2,3);?
return?0;
}

¡¡¡¡Èç¹ûC++µ÷ÓÃÒ»¸öCÓïÑÔ±àдµÄ.DLLʱ£¬µ±°üÀ¨.DLLµÄÍ·Îļþ»òÉùÃ÷½Ó¿Úº¯Êýʱ£¬Ó¦¼Óextern?"C"?{¡¡}¡£

¡¡¡¡£¨2£©ÔÚCÖÐÒýÓÃC++ÓïÑÔÖеĺ¯ÊýºÍ±äÁ¿Ê±£¬C++µÄÍ·ÎļþÐèÌí¼Óextern?"C"£¬µ«ÊÇÔÚCÓïÑÔÖв»ÄÜÖ±½ÓÒýÓÃÉùÃ÷ÁËextern?"C"µÄ¸ÃÍ·Îļþ£¬Ó¦¸Ã½ö½«CÎļþÖн«C++Öж¨ÒåµÄextern?"C"º¯ÊýÉùÃ÷ΪexternÀàÐÍ¡£
¡¡¡¡±ÊÕß±àдµÄCÒýÓÃC++º¯ÊýÀý×Ó¹¤³ÌÖаüº¬µÄÈý¸öÎļþµÄÔ´´úÂëÈçÏ£º
//C++Í·Îļþ?cppExample.h
#ifndef?CPP_EXAMPLE_H
#define?CPP_EXAMPLE_H
extern?"C"?int?add(?int?x,?int?y?);
#endif
//C++ʵÏÖÎļþ?cppExample.cpp
#include?"cppExample.h"
int?add(?int?x,?int?y?)
{
return?x?+?y;
}
/*?CʵÏÖÎļþ?cFile.c
/*?ÕâÑù»á±àÒë³ö´í£º#include?"cExample.h"?*/
extern?int?add(?int?x,?int?y?);
int?main(?int?argc,?char*?argv[]?)
{
add(?2,?3?);?
return?0;
}

////////////////////////////////////////////////////////////////////////////////// //±¾³ÌÐòÖ»¹©Ñ§Ï°Ê¹Óã¬Î´¾­×÷ÕßÐí¿É£¬&sup2;»µÃÓÃÓÚÆäËüÈκÎÓÃ; //ÐÀÞ±µç×Ó // // ÎÄ ¼þ Ãû :yanwu.c // °æ ±¾ ºÅ : v1.0 // ×÷ Õß : ÐÀÞ±µç×Ó // Éú³ÉÈÕÆÚ : 20200101 // ×î&frac12;üÐÞ¸Ä : // ¹¦ÄÜÃèÊö :Ö÷º¯Êý // ÐÞ¸ÄÀúÊ· : // ÈÕ ÆÚ : // ×÷ Õß : ÐÀÞ±µç×Ó // ÐÞ¸ÄÄÚÈÝ : ´´&frac12;¨Îļþ //°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£ //Copyright(C) ÐÀÞ±µç×Ó2020/3/16 //All rights reserved //******************************************************************************/. //³ÌÐòÍ·º¯Êý #include <reg52.h> #include <intrins.h> //°üº¬Í·Îļþ //ÏÔʾº¯Êý #include <display.h> //ºê¶¨Òå #define uint unsigned int #define uchar unsigned char //¹Ü&frac12;ÅÉùÃ÷ sbit LED_R= P2^2;//ºìµÆ sbit LED_G= P2^0;//ÂÌµÆ sbit FENG = P2^5;//·äÃùÆ÷ //sbit san=P3^4; //·çÉÈ¿ØÖÆ£¨Ñ¡Å䣩 sbit CS = P1^4; sbit Clk = P1^2; sbit DATI = P1^3; sbit DATO = P1^3; //ADC0832Òý&frac12;Å //°´¼ü sbit Key1=P2^6; //ÉèÖüü sbit Key2=P2^7; //¼Ó°´¼ü sbit Key3=P3^7; //¼õ°´¼ü bit bdata flag; //±¨¾¯±ê־λ uchar set; //ÉèÖÃ״̬ /*******************************¶¨ÒåÈ«¾Ö±äÁ¿********************************/ unsigned char dat = 0; //ADÖµ unsigned char CH=0; //ͨµÀ±äÁ¿ unsigned int sum=0; //Æ&frac12;¾ùÖµ¼ÆËãʱµÄ×ÜÊý unsigned char m=0; //º¯ÊýÉùÃ÷ extern uchar ADC0809(); extern void Key(); //¾Æ¾«º¬Á¿±äÁ¿ uchar temp=0; uchar WARNING=25; //±¨¾¯Öµ /**************************************************************************** º¯Êý¹¦ÄÜ:ADת»»×Ó³ÌÐò Èë¿Ú&sup2;ÎÊý:CH ³ö¿Ú&sup2;ÎÊý:dat ****************************************************************************/ unsigned char adc0832(unsigned char CH) { unsigned char i,test,adval; adval = 0x00; test = 0x00; Clk = 0; //³õʼ»¯ DATI = 1; _nop_(); CS = 0; _nop_(); Clk = 1; _nop_(); if ( CH == 0x00 ) //ͨµÀÑ¡Ôñ { Clk = 0; DATI = 1; //ͨµÀ0µÄµÚһλ _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 0; //ͨµÀ0µÄµÚ¶þλ _nop_(); Clk = 1; _nop_(); } else { Clk = 0; DATI = 1; //ͨµÀ1µÄµÚһλ _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 1; //ͨµÀ1µÄµÚ¶þλ _nop_(); Clk = 1; _nop_(); } Clk = 0; DATI = 1; for( i = 0;i < 8;i++ ) //¶Áȡǰ8λµÄÖµ { _nop_(); adval <<= 1; Clk = 1; _nop_(); Clk = 0; if (DATO) adval |= 0x01; else adval |= 0x00; } for (i = 0; i < 8; i++) //¶ÁÈ¡ºó8λµÄÖµ { test >>= 1; if (DATO) test |= 0x80; else test |= 0x00; _nop_(); Clk = 1; _nop_(); Clk = 0; } if (adval == test) //±È&frac12;Ïǰ8λÓëºó8λµÄÖµ£¬Èç¹û&sup2;»ÏàͬÉáÈ¥¡£ÈôÒ»Ö±³öÏÖÏÔʾΪÁ㣬Çë&frac12;«¸ÃÐÐÈ¥µô dat = test; nop_(); CS = 1; //ÊÍ·ÅADC0832 DATO = 1; Clk = 1; return dat; } void init() //³õʼ»¯º¯Êý { TMOD=0x01; //¹¤×÷·&frac12;Ê&frac12; TL0=0xb0; TH0=0x3c; //¸³³õÖµ£¨12MHz¾§ÕñµÄ50ms£© EA=1; //´ò¿ªÖжÏ×Ü¿ª¹Ø ET0=1; //´ò¿ªÖжÏÔÊÐí¿ª¹Ø TR0=1; //´ò¿ª¶¨Ê±Æ÷¿ª¹Ø } void main() //Ö÷º¯Êý { Init1602();//³õʼ»¯ÏÔʾ init(); //³õʼ»¯¶¨Ê±Æ÷ while(1) //&frac12;øÈëÑ­»· { for(m=0;m<50;m++) //¶Á50´ÎADÖµ sum = adc0832(0)+sum; //¶Áµ&frac12;µÄADÖµ£¬&frac12;«¶Áµ&frac12;µÄÊý¾ÝÀÛ¼Óµ&frac12;sum temp=sum/50; //Ìø³öÉÏÃæµÄforÑ­»·ºó£¬&frac12;«ÀÛ¼ÓµÄ×ÜÊý³ýÒÔ50µÃµ&frac12;Æ&frac12;¾ùÖµtemp sum=0; //Æ&frac12;¾ùÖµ¼ÆËãÍê³Éºó£¬&frac12;«×ÜÊýÇåÁã if(set==0) //Ö»ÓÐÔÚ·ÇÉèÖÃ״̬ʱ£¬ Display_1602(temp,WARNING); //&sup2;ÅË¢ÐÂÏÔʾʵʱŨ¶ÈÖµ if(temp<WARNING&&set==0) //·ÇÉèÖÃʱµ±Å¨¶ÈֵСÓÚ±¨¾¯ÖµÊ± { flag=0; //±¨¾¯±ê־λÖÃ0£¬&sup2;»±¨¾¯ } else if(temp>WARNING&&set==0) //·ÇÉèÖÃʱµ±Å¨¶ÈÖµ´óÓÚ±¨¾¯ÖµÊ± { flag=1; //±¨¾¯±ê־λÖÃ1 } Key(); //ɨÃè°´¼ü } } void Key() //°´¼üº¯Êý { if(Key1==0) //ÉèÖüü°´ÏÂʱ { while(Key1==0); //¼ì&sup2;â°´¼üÊÇ·ñÊÍ·Å FENG=0; //·äÃùÆ÷Ïì set++; //ÉèÖÃ״̬±êÖ¾¼Ó flag=0; //Í£Ö¹±¨¾¯ // san=1; //·çÉÈֹͣת¶¯£¨Ñ¡Å䣩 TR0=0; //¶¨Ê±Æ÷Í£Ö¹ } if(set==1) //ÉèÖÃʱ { write_com(0x38);//ÆÁÄ»³õʼ»¯ write_com(0x80+0x40+13);//Ñ¡Öб¨¾¯ÖµµÄλÖà write_com(0x0f);//´ò¿ªÏÔʾ ÎÞ¹â±ê ¹â±êÉÁ˸ write_com(0x06);//µ±¶Á»òдһ¸ö×Ö·ûÊÇÖ¸Õëºóһһλ FENG=1; //·äÃùÆ÷Í£Ö¹ÃùÏì } else if(set>=2) //ÔÙ°´Ò»ÏÂÉèÖüüʱ£¬Í˳öÉèÖà { set=0; //ÉèÖÃ״̬ÇåÁã write_com(0x38);//ÆÁÄ»³õʼ»¯ write_com(0x0c);//´ò¿ªÏÔʾ ÎÞ¹â±ê ÎÞ¹â±êÉÁ˸ FENG=1; //·äÃùÆ÷Í£Ö¹Ïì flag=1; //±¨¾¯±ê־λÖÃ1 TR0=1; //¶¨Ê±Æ÷¿ªÊ¼¼ÆÊ± } if(Key2==0&&set!=0) //µ±ÔÚÉèÖÃ״̬ʱ£¬°´Ï¼Ӽüʱ { while(Key2==0); //°´¼üÊÍ·Å FENG=0; //·äÃùÆ÷ÃùÏì WARNING++; //±¨¾¯ãÐÖµ¼Ó if(WARNING>=255)//ãÐÖµ×î´ó¼Óµ&frac12;255 WARNING=0; //ÇåÁã write_com(0x80+0x40+11); //ÔÚãÐÖµµÄλÖÃдÈëÉèÖõÄÊý¾Ý write_data('0'+WARNING/100); //ÏÔʾ°Ù루&frac12;«123³ýÒÔ100µÃµ&frac12;µÄÉÌÊÇ1£¬¾ÍÊǰÙλÊý¾Ý£©123ΪÀý×Ó write_data('0'+WARNING/10%10);//ÏÔʾʮ루&frac12;«123³ýÒÔ10µÃµ&frac12;ÉÌÊÇ12£¬&frac12;«12³ýÒÔ10µÄÓàÊý¾ÍÊÇʮ룩 write_data('0'+WARNING%10); //ÏÔʾ¸ö루&frac12;«123³ýÒÔ10µÄÓàÊý3¾ÍÊǸöλÊý¾Ý£©123ΪÀý×Ó write_com(0x80+0x40+13);//λÖà FENG=1;//·äÃùÆ÷Í£Ö¹ } if(Key3==0&&set!=0) //¼õ°´¼ü×¢ÊÍ&sup2;ο¼¼Ó°´¼ü&sup2;¿·Ö { while(Key3==0); FENG=0; WARNING--; if(WARNING<=0) WARNING=255; write_com(0x80+0x40+11); write_data('0'+WARNING/100); write_data('0'+WARNING/10%10); write_data('0'+WARNING%10); write_com(0x80+0x40+13);//λÖà FENG=1; } } void time1_int(void) interrupt 1 //¶¨Ê±Æ÷º¯Êý { uchar count; TL0=0xb0; TH0=0x3c; //ÖØÐ¸³³õÖµ count++; //¼ÆÊ±±äÁ¿¼Ó if(count==10)//¶¨Ê±Æ÷¶¨Ê±ÊÇ50ms£¬´Ë´¦¼ÆÊý10´Î£¬ÕýºÃÊÇ500ms£¬ÓÃÓÚ±¨¾¯Ê± µÆÁÁºÍ·äÃùÆ÷Ïì { if(flag==0) //±¨¾¯±ê־Ϊ0ʱ { LED_G=0; //Â̵ÆÁÁ LED_R=1; //ºìµÆÃð FENG=1; //·äÃùÆ÷&sup2;»Ïì // san=1; //·çÉÈ&sup2;»×ª£¨Ñ¡Å䣩 } if(flag==1) //±¨¾¯±ê־λΪ1ʱ { LED_G=1; //Â̵ÆÃð LED_R=0; //ºìµÆÁÁ FENG=0; //·äÃùÆ÷Ïì // san=0; //·çÉÈת¶¯£¨Ñ¡Å䣩 } } if(count==20) //¼ÆÊýµ&frac12;20ʱ£¬ÕýºÃÊÇ1000ms£¬¾ÍÊÇ1s£¬ÕâÀï¾ÍÊÇÈõÆÃ𣬷äÃùÆ÷&sup2;»Ï죬´Ó¶ø×ö³öÉÁ˸µÄЧ¹û { count=0; //¼Æµ&frac12;1sʱ£¬&frac12;«countÇåÁ㣬׼±¸ÖØÐ¼ÆÊý if(flag==0) { LED_G=1; LED_R=1; FENG=1; // san=1; //È«&sup2;¿¹Ø±Õ } if(flag==1) { LED_G=1; LED_R=1; FENG=1; // san=0; //±¨¾¯Öµ£¬·çÉÈÊÇһֱת¶¯µÄ£¨Ñ¡Å䣩 } } } 修改为下限报警,以及显示到0.1位,如10.1
07-05
#include "control.h" /************************************************************************** ×÷ÕߣºÆ&frac12;ºâС³µÖ®¼Ò ÎÒµÄÌÔ±¦Ð¡µê£ºhttp://shop114407458.taobao.com/ **************************************************************************/ #define T 0.156f #define L 0.1445f #define K 311.4f u8 Flag_Target; int Voltage_Temp,Voltage_Count,Voltage_All,sum; /************************************************************************** º¯Êý¹¦ÄÜ£ºÐ¡³µÔ˶¯ÊýѧģÐÍ Èë¿Ú&sup2;ÎÊý£ºËٶȺÍת&frac12;Ç ·µ»Ø Öµ£ºÎÞ **************************************************************************/ void Kinematic_Analysis(float velocity,float turn) { Target_A=(velocity+turn); Target_B=(velocity-turn); //ºóÂÖ&sup2;îËÙ } void SelfLocalization(void) //С³µ×Ô¶¨Î» { const double T_Sampling=0.005*2; //5ms*2 &sup2;ÉÑùÖÜÆÚ const double Encoder_Round=390*4; //±àÂëÆ÷ÏßÊý*4±¶ÆµÏ¸·Ö const double R=0.032, B=0.155; //³µÂÖ°ë¾¶£¬Â־࣬m //Ö±&frac12;Ó¿ÉÓõÄÈ«¾Ö±äÁ¿ //extern int Encoder_Left,Encoder_Right; //×óÓÒ±àÂëÆ÷µÄÂö³å¼ÆÊý //extern float X_me,Y_me,theta_me; //С³µÎ»ÖúÍ×Ë̬ //extern float V_me,W_me; //С³µÏßËٶȺÍ&frac12;ÇËÙ¶È-±àÂëÆ÷¹À¼ÆÖµ //&sup2;¹È«ÈçÏ´úÂ룬¼ÆËãС³µÏßËٶȺÍ&frac12;ÇËÙ¶È£¬ÒÔ¼°Ð¡³µÎ»ÖúÍ×Ë̬ V_me=; W_me=?; X_me=?; Y_me=?; theta_me=; //¾­¹ý¼ÆËãµÄ&frac12;ǶÈÒ»¶¨Òª¹æÕûµ&frac12;(-PI, PI] theta_me=£¿; } void PathPlanning(void) //·¾¶¹æ»® { static int Flag_Start=0; double X_des=3, Y_des=2, Angle_des=0; //Ä¿±êλÖúÍ×Ë̬ const double Kd=20,Ka=-7,Kb=0; double ds,da; if(Flag_Stop==1) { Flag_Start=0; Velocity=0,Turn=0; } else Flag_Start++; if(Flag_Start<3*1000/10) return; //µÈ´ý3sºóʵÑé×Ô¶¯¿ªÊ¼ //¸ù¾ÝÄ¿±êλÖ㨺Í×Ë̬£©£¬ÒÔ¼°µ±Ç°»úÆ÷È˵ÄλÖúÍ×Ë̬£¬¹æ»®³ö»úÆ÷ÈËÏÂһʱ¿ÌµÄÏßËٶȺÍ&frac12;ÇËÙ¶È //Ö±&frac12;Ó¿ÉÓõÄÈ«¾Ö±äÁ¿ //extern float X_me,Y_me,theta_me; //С³µÎ»ÖúÍ×Ë̬ //extern float V_me,W_me; //С³µÏßËٶȺÍ&frac12;ÇËÙ¶È-±àÂëÆ÷¹À¼ÆÖµ //extern float Velocity,Turn; //VelocityΪҪ¹æ»®³öµÄÏßËÙ¶È,TurnΪҪ¹æ»®³öµÄ&frac12;ÇËÙ¶È£¨ÊÜÓ&sup2;¼þʵÏÖµÄÒªÇó£¬Turn˳ʱÕëΪÕý£© //&sup2;¹È«ÈçÏ´úÂë // Velocity=£¿;
03-25
#ifndef __USART_H #define __USART_H #include "stdio.h" #include "stm32f4xx_conf.h" #include "sys.h" ////////////////////////////////////////////////////////////////////////////////// //±¾³ÌÐòÖ»¹©Ñ§Ï°Ê¹Óã¬Î´¾­×÷ÕßÐí¿É£¬&sup2;»µÃÓÃÓÚÆäËüÈκÎÓÃ; //Mini STM32¿ª·¢°å //´®¿Ú1³õʼ»¯ //ÕýµãÔ­×Ó@ALIENTEK //¼¼ÊõÂÛ̳:www.openedv.csom //ÐÞ¸ÄÈÕÆÚ:2011/6/14 //°æ±¾£ºV1.4 //°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£ //Copyright(C) ÕýµãÔ­×Ó 2009-2019 //All rights reserved //******************************************************************************** //V1.3ÐÞ¸Ä˵Ã÷ //Ö§³ÖÊÊÓ¦&sup2;»Í¬ÆµÂÊϵĴ®¿Ú&sup2;¨ÌØÂÊÉèÖÃ. //¼ÓÈëÁ˶ÔprintfµÄÖ§³Ö //Ôö¼ÓÁË´®¿Ú&frac12;ÓÊÕÃüÁÄÜ. //ÐÞÕýÁËprintfµÚÒ»¸ö×Ö·û¶ªÊ§µÄbug //V1.4ÐÞ¸Ä˵Ã÷ //1,Ð޸Ĵ®¿Ú³õʼ»¯IOµÄbug //2,ÐÞ¸ÄÁËUSART_RX_STA,ʹµÃ´®¿Ú×î´ó&frac12;ÓÊÕ×Ö&frac12;ÚÊýΪ2µÄ14´Î·&frac12; //3,Ôö¼ÓÁËUSART_REC_LEN,ÓÃÓÚ¶¨Òå´®¿Ú×î´óÔÊÐí&frac12;ÓÊÕµÄ×Ö&frac12;ÚÊý(&sup2;»´óÓÚ2µÄ14´Î·&frac12;) //4,ÐÞ¸ÄÁËEN_USART1_RXµÄʹÄÜ·&frac12;Ê&frac12; ////////////////////////////////////////////////////////////////////////////////// #define USART_REC_LEN 200 //¶¨Òå×î´ó&frac12;ÓÊÕ×Ö&frac12;ÚÊý 200 #define EN_USART1_RX 1 //ʹÄÜ£¨1£©/&frac12;ûÖ¹£¨0£©´®¿Ú1&frac12;ÓÊÕ extern u8 USART_RX_BUF[USART_REC_LEN]; //&frac12;ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö&frac12;Ú.Ä©×Ö&frac12;ÚΪ»»Ðзû extern u16 USART_RX_STA; //&frac12;ÓÊÕ״̬±ê¼Ç //Èç¹ûÏë´®¿ÚÖжÏ&frac12;ÓÊÕ£¬Çë&sup2;»Òª×¢ÊÍÒÔϺ궨Òå void uart_init(u32 bound); #endif 这段代码运用于usart2串口需要改哪里
最新发布
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值