1. 單片機的內核驅動開發是不是含金亮很高
這個問題比較籠統,不知道你想開發的是何種類型的片子,因為從8位到32位的,在比如我們日常用的電腦,都可以算著是一種單片機,這個要根據系統的工程的大小所決定,有的編寫驅動的工程師月薪上萬,有的幾百元,說實話,這和個人的能力和機遇有很大關系的,現在嵌入式系統越來越熱,其中也不乏平民級高手,他們卻只能在網上發布些自己對系統的理解,不能把它變成價值,而且,很多學習過這些知識的人都不是走的這方面,工作和自己學習的東西不能結合,當然,有一技之長是好事,但是不能片面的強調付出與收入能否等同,因為這是我們的愛好,喜歡看見自己寫的東西跑起來,喜歡開發中的樂趣,僅此而已!
2. 單片機底層驅動編寫要求高嗎
其實也不高,主要需要對單片機平台熟悉、了解要驅動的對象的特性(主要是時序方面特性)。
某些情況下對資源佔用要求苛刻時,就需要盡力提高驅動效率,同時還要求介面簡單、適用廣泛——這才是高要求、高標準的驅動。
3. 想使用51單片機某些外設功能,如何快速編寫其驅動代碼
將步進電機連接到驅動步進電機的各個相位。
所使用單片機為8051的單片機,實現輸出正弦波的效果,下代碼為AD9833頭文件定義。
AD9833是一款低功耗、可編程波形發生器,能夠產生正弦波、三角波和方波輸出。各種類型的檢測、信號激勵和時域反射(TDR)應用都需要波形發生器。輸出頻率和相位可通過軟體進行編程,調整簡單。
4. 分享Github上幾個開源單片機硬體驅動庫
Github上的項目基本上以軟體為主,硬體的很少,優秀的硬體開源項目更少。單片機的開發中驅動模塊化帶來的好處是移植方便,不依賴於硬體,但是與裸機開發相比代碼復雜不易理解。所以驅動、組件等封裝的功能完善、代碼量少、簡單易用、可移植性高,是一個優秀的硬體驅動所必備的。
MultiButton 是一個小巧簡單易用的事件驅動型按鍵驅動模塊,可無限量擴展按鍵,按鍵事件的回調非同步處理方式可以簡化你的程序結構,去除冗餘的按鍵處理硬編碼,讓你的按鍵業務邏輯更清晰。
使用方法
1.先申請一個按鍵結構
2.初始化按鍵對象,綁定按鍵的GPIO電平讀取介面 read_button_pin() ,後一個參數設置有效觸發電平
3.注冊按鍵事件
4.啟動按鍵
5.設置一個5ms間隔的定時器循環調用後台處理函數
Examples
AT指令在無線通訊模組中通用的一種形式,AT_Commom(不知道是不是作者拼錯了或者有別的什麼意思)是一個解析AT至指令的函數,相對來說用起來還算簡單。
Example
代碼中給出了Sim800模塊的例子,可以做為參考使用。
這個是周立功團隊開發的一個軟體包,定義了一系列常用外設(如:UART、IIC、SPI、ADC等)的通用介面,基於通用介面的應用可以跨平台復用。這個項目相對比較活躍,但代碼量還是比較大。
一個好的文檔說明是一個開源項目能夠火起來的必備條件,作者們還是需要花心思在項目文檔上的,比如推薦的第一個項目。那麼各位讀者你用過的或者知道的還有哪些漂亮的硬體驅動封裝,推薦出來跟大家一起關注下吧。
5. 單片機開發晶元驅動,如果用中斷法的話,是否不用死循環
中斷處理程序是在中斷產生條件滿足時,才會執行的,不是在主程序中執行一次啊之類的。是一直都存在的。只不過平時不會執行,當中斷條件滿足時,就執行中斷處理程序。
執行完一次中斷處理程序過後,就需要等待下一次的中斷條件產生。這個時候,你就可以去處理主函數裡面的其他程序噻。這就達到了實時性的目的。
6. 51單片機開發板如何驅動直流電機
1、從貼圖看,該開發板有步進電機驅動電路。
2、開發板上一般有驅動步進電機的驅動晶元,採用ULN2003的較多,這可以驅動步進電機,有的開發板上有直流電機驅動晶元,採用L298等晶元。
3、現在利用該開發板,沒有直流電機的專門驅動電路,但是ULN2003驅動步進電機,當然也可以驅動直流電機,只要編程時給其中的ABCD輸出口中里兩個發送PWM控制信號就可以了。
7. 做單片機、嵌入式系統、驅動開發前景怎麼樣依次要學什麼
朋友,您好!
個人認為學習這些東西的前景還是比較不錯的,尤其是嵌入式系統設計,驅動開發,雖然好多大學里都由這些課程,但是學精的沒有多少,社會還是比較缺這樣的人才。
首先,做單片機、嵌入式設計在電子方面要下一定的功夫,比如要熟悉模擬電子技術和數字電子技術,在系統硬體電路設計上是非常重要的。
然後,可以學習對硬體的編程,進一步來學習驅動開發。這里常用的是匯編和C語言。而C語言中的結構體也是很重要的,如果要做驅動的話,建議學一下數據結構。
當然,也可以從軟體下手,根據項目的需要來逐步完善硬體知識。但是如果要做驅動開發,還是先打號硬體基礎。
以上是個人看法,希望對您的學習有所幫助,組您學習順利。
——————————————————————————————————————————
單片機開發板
http://laobingjia.blog.163.com/blog/static/1958594142011828373371/
ARM系統開發板
http://laobingjia.blog.163.com/blog/static/1958594142011103092650258/
8. 51單片機怎麼驅動直流電機c語言
51單片機驅動直流電機程序(用的是l298n晶元):
#include<reg51.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define N 100
sbits1=P1^0; //電機驅動口
sbit s2=P1^1; //電機驅動口
sbit s3=P1^2; //電機驅動口
sbit s4=P1^3; //電機驅動口
sbit en1=P1^4; //電機使能端
sbit en2=P1^5; //電機使能端
sbit LSEN=P2^0; //光電對管最左
sbit LSEN1=P2^1; //光電對管左1
sbit LSEN2=P2^2; //光電對管左2
sbit RSEN1=P2^3; //光電對管右1
sbit RSEN2=P2^4; //光電對管右2
sbit RSEN=P2^5; //光電對管最右
uint pwm1=0,pwm2=0,t=0;
void delay(uint xms)
{
uint a;
while(--xms)
{
for(a=123;a>0;a--);
}
}
void motor(uchar speed1,uchar speed2)
{
if(speed1>=-100&&speed1<=100)
{
pwm1=abs(speed1);
if(speed1>0)
{
s1=1;
s2=0;
}
if(speed1==0)
{
s1=1;
s2=1;
}
if(speed1<0)
{
s1=0;
s2=1;
}
}
if(speed2>=-100&&speed2<=100)
{
pwm2=abs(speed2);
if(speed2>0)
{
s3=1;
s4=0;
}
if(speed2==0)
{
s3=1;
s4=1;
}
if(speed2<0)
{
s3=0;
s4=1;
}
}
}
void go_forward(uint speed)
{
s1=1;
s2=0;
s3=1;
s4=0;
pwm1=speed;
pwm2=speed;
}
void go_back(uint speed)
{
s1=0;
s2=1;
s3=0;
s4=1;
pwm1=speed;
pwm2=speed;
}
void stop()
{
s1=1;
s2=1;
s3=1;
s4=1;
pwm1=0;
pwm2=0;
}
void turn_right(uint P1,uint P2) //右轉函數
{
s1=1;
s2=0;
s3=0;
s4=1;
pwm1=P1;
pwm2=P2;
}
void turn_left(uint P1,uint P2) //左轉函數
{
s1=0;
s2=1;
s3=1;
s4=0;
pwm1=P1;
pwm2=P2;
}
void tracking()
{
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0)) //沒有檢測到
{
go_forward(100);
}
if((LSEN1==1)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0)) //左一檢測到
{
turn_left(40,80); //左轉 右輪 》左輪
delay(N);
}
if((LSEN1==0)&&(LSEN2==1)&&(RSEN1==0)&&(RSEN2==0)) //左二檢測到
{
turn_left(40,60); //左轉 右輪 》左輪
delay(N);
}
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==1)&&(RSEN2==0)) //右一檢測到
{
turn_right(60,4); //右轉 左輪 》右輪
delay(N);
}
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==1)) //右二檢測到
{
turn_right(80,40); //右轉 左輪 》右輪
delay(N);
}
if((LSEN1==1)&&(LSEN2==1))
{
turn_left(0,100);
delay(1000);
}
if((RSEN1==1)&&(RSEN2==1))
{
turn_right(100,0);
delay(1000);
}
}
void avoidance()
{
}
void init()
{
TMOD=0x02; //timer0 同時配置為模式2, 8自動重裝計數模式
TH0=156; //定時器初值設置100us中斷
TL0=156;
ET0=1;
EA=1;
TR0=1; //開啟總中斷
}
void main()
{
init();
while(1)
{
tracking();
}
}
void timer0() interrupt 1 //電機驅動 提供PWM信號
{
if(t<pwm1)
en1=1;
else
en1=0;
if(t<pwm2)
en2=1;
else
en2=0;
t++;
if(t>100)
t=0;
}
(8)單片機驅動開發擴展閱讀
L298N 是一種雙H橋電機驅動晶元,其中每個H橋可以提供2A的電流,功率部分的供電電壓范圍是2.5-48v,邏輯部分5v供電,接受5vTTL電平。一般情況下,功率部分的電壓應大於6V否則晶元可能不能正常工作。
9. 51單片機開發板和驅動模塊怎麼連接
+ 5V和GND是電源,通常稱為正極和負極,可以連接到微控制器板板上DC-10插座中的電源介面(+ 5V連接到VCC,GND連接到GND),前提是沒有從該下載埠向微控制器板供電。
IN0~IN4連接到微控制器上的任何IO埠,只要在編程期間設置IO,P0~P3中的任何四個IO都可以。當然,為了方便起見,通常並聯在一起,例如P2_0至P2_3。驅動模塊的驅動電源輸入不應取自MCU板,而應使用其他電源為其供電。
(9)單片機驅動開發擴展閱讀:
5V和GND分別是電源箱接地,驅動板上的5V可以與MCU相連,(當然,如果遇到麻煩,可以與MCU的5V相連),其為L298的L298提供邏輯電源。驅動板必須將GND連接到微控制器的GND。
至於控制電動機的旋轉方向的IN1,IN2,IN3和IN4,一般來說,IN2和IN1控制電動機。 IN3和IN4控制電動機。例如,如果IN1和IN2分別為0和1,則向左轉,反之亦然。當IN1和IN2都為高或低時,單擊以停止。 IN3和IN4也是如此。黃色的跳線帽是輸入PWM,用於控制電動機速度。