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,用于控制电动机速度。