怎么从0到1设计实现一个单片机的嵌入式项目
方法在前言篇已经写过了,可以参考下,本章以一个LED控制的简单项目来做讲解:
谋定而后动,先讲方法:
是否有这种困惑?各种例程看的很溜,CV之后项目也能运行,但是给我个设计依旧无从下手。这实际就一个问题,你得有产品思维这个虚的东西来指导实际的操作。什么是产品思维?实际这个东西并不陌生。在大学期间做课程设计和毕业设计时都经历过。做好以下步骤即可:
1、开题报告
这在工作中实际对应产品的需求分析报告。
2、设计任务书
这在工作中实际对应产品的研制任务书。
3、设计论文
这在工作中实际对应产品的产品设计方案。
4、实物设计
这在工作中实际对应产品的样品设计,包括PCB和程序。
5、答辩报告
这在工作中实际对应产品的小批量试制报告,分析各种设计生产问题。
实际操作细则:
项目名称:基于单片机的LED灯控制设计
项目要求:
1、按键长按2s,LED进入自动闪烁模式;
2、再次长按2s,解除自动闪烁模式,然后每按键一次,灯亮两秒。
这是一个超级简单的单片机项目设计,旨在讲解方法示例:
需求分析:
根据项目要求来分析:
首先硬件的主要需求分析:
1、需要单片机、按键、LED灯。
2、需要设计单片机的运行系统
3、需要设计单片机外围按键电路
4、需要设计单片机可控的LED灯控制电路。
软件的主要需求分析:
1、实现单片机系统的按键按下和释放功能;
2、软件识别按键的2s长按功能;
3、实现自动模式和手动模式的切换功能;
4、实现LED灯的点亮和熄灭控制功能;
5、需要单片机系统的正常运行。
看到这,应该明白需求分析部分需要干什么了:就是根据功能要求进行项目各个设计细节的功能分析。明白自己做这个项目需要什么。接下来就是进行需求设计原理的分解,也就是设计任务的分析。
设计任务:
根据需求分析来分下设计任务,首先需要明确这个阶段是为了让你查资料来弄懂实现前边的需求需要怎么做,比如器件选型,运行原理的分析和设计,然后通过分析得出需要做的设计任务:
硬件设计任务:
1、硬件的选型:
单片机:选择具有2个IO以上的单片机,在选型时考虑电源、价格、功能等特点。
比如本系统在实际设计中需用8个引脚的51核单片机就足够了,价格也就1-2块钱左右,而且自带内部晶振,只要有电源就可组成单片机最小系统。但是为了通用性和供应采购方面,也可选用非常常见89C51系列,最小系统价格也在5块钱以下。
LED:普通的小电流发光二极管就行,主要考虑单片机引脚的驱动能力。
按键:选不到自锁的普通开关即可。
2、单片机系统的设计:51单片机最小系统:复位、震荡、电源三要素按照典型电路设计。
3、单片机外围按键电路的设计:电阻+按键即可实现。电阻为了限流。
4、单片机外围LED灯电路的设计;电阻+LED即可实现。电阻为了限流。
软件设计的设计原理:
1、单片机主系统运行程序的设计;
四要素要素:主文件、头文件、初始化、主循环。具体怎么建立工程,网上一大把教程,自行入门。
2、单片机主按键识别程序的设计;
原理:单片机IO电平输入检测。
根据硬件电路,按下按键端口输入电平状态翻转。但是按键是机械按钮,在按下的过程中出现机械抖动。所以还要进行消抖动设计。
3、单片机主按键LED控制程序的设计;
原理:单片机IO电平输出控制。根据硬件电路,使端口电平状态翻转。
4、单片机两秒定时程序的设计;
原理:定时2S。有很多种使用方法:设计对准确行要求不高,可采用软延时即可。设计对准确行要求高,定时器计时即可。
设计方案:
1原理图
最小系统:
LED电路:
按键识别:
2 程序
软延时:
void Delay_ms(unsigned int Cnt)
{
unsigned int timercnt;
while(cnt--)
{
timercnt=1000;
while(timercnt--);
}
}
LED控制:
void TurnOnLed(void)
{
LED =0;
}
void TurnOffLed(void)
{
LED =1;
}
按键检测:
if(!key)
{
Delay_ms(10);//消抖动
if(!key)
{
GetKeyFlg=1;
}
else
{
GetKeyFlg=1;
}
}
疑难总结:
单片机最小系统的设计;
按键电路的设计;
LED电路的设计;
至此一个项目基本完成了设计。本文从这一简单实例,来说明各个环节工作任务,来改变下一个产品设计落地中的基本概念。仅供参考。
原理图和程序请在公众号EETalks下载,欢迎关注吐槽。