精华内容
下载资源
问答
  • 基于流程图编程单片机软件系统开发
  • 基于流程图编程单片机软件系统开发.pdf
  • 单片机程序流程图,看看还是不错 单片机程序流程图,看看还是不错 单片机程序流程图,看看还是不错
  •  工业控制中普遍采用可编程控制器,其CPU模块内的微控制器往往是普通的单片机,而可编程控制器可以梯形图编程,或者用流程图编程。现在的智能教育机器人控制器均用单片机,而这些机器人的编程大多支持流程图编程。...
  • 本文是用一个实例详细说明单片机如何用图形化编程
  • 这里单片机系统实现的功能就相当于一个可编程控制器系统,而且编程语言是流程图语言。
  • 摘要:不知道大家有没有这样一种感觉,就是感觉自己玩单片机还可以,各个功能模块也都会驱动,但是如果让你完整的写一套代码,却无逻辑与框架可言,上来就是开始写!东抄抄写抄抄。说明编程还处于比较低...

    摘要:不知道大家有没有这样一种感觉,就是感觉自己玩单片机还可以,各个功能模块也都会驱动,但是如果让你完整的写一套代码,却无逻辑与框架可言,上来就是开始写!东抄抄写抄抄。说明编程还处于比较低的水平,那么如何才能提高自己的编程水平呢?学会一种好的编程框架或者一种编程思想,可能会受用终生!比如模块化编程,框架式编程,状态机编程等等,都是一种好的框架。

    今天说的就是状态机编程,由于篇幅较长,大家慢慢欣赏。那么状态机是一个这样的东东?状态机(state machine)有5个要素,分别是状态(state)、迁移(transition)、事件(event)、动作(action)、条件(guard)。

    什么是状态机?

    状态机是一个这样的东东:状态机(state machine)有 5 个要素,分别是状态(state)、迁移(transition)、事件(event)、动作(action)、条件(guard)。

    状态:一个系统在某一时刻所存在的稳定的工作情况,系统在整个工作周期中可能有多个状态。例如一部电动机共有正转、反转、停转这 3 种状态。

    一个状态机需要在状态集合中选取一个状态作为初始状态。

    迁移:系统从一个状态转移到另一个状态的过程称作迁移,迁移不是自动发生的,需要外界对系统施加影响。停转的电动机自己不会转起来,让它转起来必须上电。

    事件:某一时刻发生的对系统有意义的事情,状态机之所以发生状态迁移,就是因为出现了事件。对电动机来讲,加正电压、加负电压、断电就是事件

    动作:在状态机的迁移过程中,状态机会做出一些其它的行为,这些行为就是动作,动作是状态机对事件的响应。给停转的电动机加正电压,电动机由停转状态迁移到正转状态,同时会启动电机,这个启动过程可以看做是动作,也就是对上电事件的响应。

    条件:状态机对事件并不是有求必应的,有了事件,状态机还要满足一定的条件才能发生状态迁移。还是以停转状态的电动机为例,虽然合闸上电了,但是如果供电线路有问题的话,电动机还是不能转起来。

    只谈概念太空洞了,上一个小例子:一单片机、一按键、俩 LED 灯(记为L1和L2)、一人, 足矣!

    规则描述:

    1、L1L2状态转换顺序OFF/OFF--->ON/OFF--->ON/ON--->OFF/ON--->OFF/OFF

    2、通过按键控制L1L2的状态,每次状态转换需连续按键5

    3、L1L2的初始状态OFF/OFF

    图1

    下面这段程序是根据功能要求写成的代码。

    程序清单List1:

    void main(void)
    {
     sys_init();
     led_off(LED1);
     led_off(LED2);
     g_stFSM.u8LedStat = LS_OFFOFF;
     g_stFSM.u8KeyCnt = 0;
     while(1)
     {
      if(test_key()==TRUE)
      {
       fsm_active();
      }
      else
      {
       ; /*idle code*/
      }
     }
    }
    void fsm_active(void)
    {
     if(g_stFSM.u8KeyCnt > 3) /*击键是否满 5 次*/
     {
      switch(g_stFSM.u8LedStat)
      {
       case LS_OFFOFF:
        led_on(LED1); /*输出动作*/
        g_stFSM.u8KeyCnt = 0;
        g_stFSM.u8LedStat = LS_ONOFF; /*状态迁移*/
        break;
       case LS_ONOFF:
        led_on(LED2); /*输出动作*/
        g_stFSM.u8KeyCnt = 0;
        g_stFSM.u8LedStat = LS_ONON; /*状态迁移*/
        break;
       case LS_ONON:
        led_off(LED1); /*输出动作*/
        g_stFSM.u8KeyCnt = 0;
        g_stFSM.u8LedStat = LS_OFFON; /*状态迁移*/
        break;
       case LS_OFFON:
        led_off(LED2); /*输出动作*/
        g_stFSM.u8KeyCnt = 0;
        g_stFSM.u8LedStat = LS_OFFOFF; /*状态迁移*/
        break;
       default: /*非法状态*/
        led_off(LED1);
        led_off(LED2);
        g_stFSM.u8KeyCnt = 0;
        g_stFSM.u8LedStat = LS_OFFOFF; /*恢复初始状态*/
        break;
      }
     }
     else
     {
      g_stFSM.u8KeyCnt++; /*状态不迁移,仅记录击键次数*/
     }
    }
    

    实际上在状态机编程中,正确的顺序应该是先有状态转换图,后有程序,程序应该是根据设计好的状态图写出来的。不过考虑到有些童鞋会觉得代码要比转换图来得亲切,我就先把程序放在前头了。

    这张状态转换图是用UML(统一建模语言)的语法元素画出来的,语法不是很标准,但拿来解释问题足够了。

    图2按键控制流水灯状态转换图

    圆角矩形代表状态机的各个状态,里面标注着状态的名称。

    带箭头的直线或弧线代表状态迁移,起于初态,止于次态。

    图中的文字内容是对迁移的说明,格式是:事件[条件]/动作列表(后两项可选)。

    “事件[条件]/动作列表”要说明的意思是:如果在某个状态下发生了“事件”,并且状态机

    满足“[条件]”,那么就要执行此次状态转移,同时要产生一系列“动作”,以响应事件。在这个例子里,我用“KEY”表示击键事件。

    图中有一个黑色实心圆点,表示状态机在工作之前所处的一种不可知的状态,在运行之前状态机必须强制地由这个状态迁移到初始状态,这个迁移可以有动作列表(如图1所示),但不需要事件触发。

    图中还有一个包含黑色实心圆点的圆圈,表示状态机生命周期的结束,这个例子中的状态机生生不息,所以没有状态指向该圆圈。

    关于这个状态转换图就不多说了,相信大家结合着上面的代码能很容易看明白。现在我们再聊一聊程序清单List1。

    先看一下fsm_active()这个函数,g_stFSM.u8KeyCnt = 0;这个语句在switch—case里共出现了 5 次,前 4 次是作为各个状态迁移的动作出现的。从代码简化提高效率的角度来看,我们完全可以把这 5 次合并为 1 次放在 switch—case 语句之前,两者的效果是完全一样的,代码里之所以这样啰嗦,是为了清晰地表明每次状态迁移中所有的动作细节,这种方式和图2的状态转换图所要表达的意图是完全一致的。

    再看一下g_stFSM这个状态机结构体变量,它有两个成员:u8LedStatu8KeyCnt。用这个结构体来做状态机好像有点儿啰嗦,我们能不能只用一个像 u8LedStat 这样的整型变量来做状态机呢?

    当然可以!我们把图 2中的这 4 个状态各自拆分成 5 个小状态,这样用 20 个状态同样能实现这个状态机,而且只需要一个 unsigned char 型的变量就足够了,每次击键都会引发状态迁移, 每迁移 5 次就能改变一次 LED 灯的状态,从外面看两种方法的效果完全一样。

    假设我把功能要求改一下,把连续击键5次改变L1L2的状态改为连续击键100次才能改变L1L2的状态。这样的话第二种方法需要4X100=400个状态!而且函数fsm_active()中的switch—case语句里要有400个case,这样的程序还有法儿写么?!

    同样的功能改动,如果用g_stFSM这个结构体来实现状态机的话,函数fsm_active()只需要将if(g_stFSM.u8KeyCnt>3)改为if(g_stFSM.u8KeyCnt > 98)就可以了!

    g_stFSM结构体的两个成员中,u8LedStat可以看作是质变因子,相当于主变量;u8KeyCnt可以看作是量变因子,相当于辅助变量。量变因子的逐步积累会引发质变因子的变化。

    g_stFSM这样的状态机被称作Extended State Machine,我不知道业内正规的中文术语怎么讲,只好把英文词组搬过来了。

    2、状态机编程的优点

    说了这么多,大家大概明白状态机到底是个什么东西了,也知道状态机化的程序大体怎么写了,那么单片机的程序用状态机的方法来写有什么好处呢?

    (1)提高CPU使用效率

    话说我只要见到满篇都是delay_ms()的程序就会蛋疼,动辄十几个ms几十个ms的软件延时是对CPU资源的巨大浪费,宝贵的CPU机时都浪费在了NOP指令上。那种为了等待一个管脚电平跳变或者一个串口数据而岿然不动的程序也让我非常纠结,如果事件一直不发生,你要等到世界末日么?

    把程序状态机化,这种情况就会明显改观,程序只需要用全局变量记录下工作状态,就可以转头去干别的工作了,当然忙完那些活儿之后要再看看工作状态有没有变化。只要目标事件(定时未到、电平没跳变、串口数据没收完)还没发生,工作状态就不会改变,程序就一直重复着“查询—干别的—查询—干别的”这样的循环,这样CPU就闲不下来了。在程序清单 List3 中,if{}else{}语句里else下的内容(代码中没有添加,只是加了一条/*idle code*/的注释示意)就是上文所说的“别的工作” 。

    这种处理方法的实质就是在程序等待事件的过程中间隔性地插入一些有意义的工作,好让CPU不是一直无谓地等待。

    (2) 逻辑完备性

    我觉得逻辑完备性是状态机编程最大的优点

    不知道大家有没有用C语言写过计算器的小程序,我很早以前写过,写出来一测试,那个惨不忍睹啊!当我规规矩矩的输入算式的时候,程序可以得到正确的计算结果,但要是故意输入数字和运算符号的随意组合,程序总是得出莫名其妙的结果。

    后来我试着思维模拟一下程序的工作过程,正确的算式思路清晰,流程顺畅,可要碰上了不规矩的式子,走着走着我就晕菜了,那么多的标志位,那么多的变量,变来变去,最后直接分析不下去了。

    很久之后我认识了状态机,才恍然明白,当时的程序是有逻辑漏洞的。如果把这个计算器程序当做是一个反应式系统,那么一个数字或者运算符就可以看做一个事件,一个算式就是一组事件组合。对于一个逻辑完备的反应式系统,不管什么样的事件组合,系统都能正确处理事件,而且系统自身的工作状态也一直处在可知可控的状态中。反过来,如果一个系统的逻辑功能不完备,在某些特定事件组合的驱动下,系统就会进入一个不可知不可控的状态,与设计者的意图相悖。

    状态机就能解决逻辑完备性的问题。

    状态机是一种以系统状态为中心,以事件为变量的设计方法,它专注于各个状态的特点以及状态之间相互转换的关系。状态的转换恰恰是事件引起的,那么在研究某个具体状态的时候,我们自然而然地会考虑任何一个事件对这个状态有什么样的影响。这样,每一个状态中发生的每一个事件都会在我们的考虑之中,也就不会留下逻辑漏洞。

    这样说也许大家会觉得太空洞,实践出真知,某天如果你真的要设计一个逻辑复杂的程序,

    我保证你会说:哇!状态机真的很好用哎!

    (3)程序结构清晰

    用状态机写出来的程序的结构是非常清晰的。

    程序员最痛苦的事儿莫过于读别人写的代码。如果代码不是很规范,而且手里还没有流程图,读代码会让人晕了又晕,只有顺着程序一遍又一遍的看,很多遍之后才能隐约地明白程序大体的工作过程。有流程图会好一点,但是如果程序比较大,流程图也不会画得多详细,很多细节上的过程还是要从代码中理解。

    相比之下,用状态机写的程序要好很多,拿一张标准的UML状态转换图,再配上一些简明的文字说明,程序中的各个要素一览无余。程序中有哪些状态,会发生哪些事件,状态机如何响应,响应之后跳转到哪个状态,这些都十分明朗,甚至许多动作细节都能从状态转换图中找到。可以毫不夸张的说,有了UML状态转换图,程序流程图写都不用写。

    套用一句广告词:谁用谁知道!

    果子哥制作

    说明:文章转载自一篇pdf文档,作者Alicedodo,旨在分享技术知识,如有侵权请联系删除!


    推荐阅读:

    专辑|Linux文章汇总

    专辑|程序人生

    专辑|C语言

    我的知识小密圈

    关注公众号,后台回复「1024」获取学习资料网盘链接。

    欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

    嵌入式Linux

    微信扫描二维码,关注我的公众号

    展开全文
  • PIC单片机编程助手

    热门讨论 2011-10-30 19:31:36
    书中给出了大部分应用实例的硬件电路、程序流程图以及汇编语言源程序。这些内容是作者近几年业部分开发工作的实践总结,有一些就是实际批量生产产品的提练和推广。 本书内容丰富而实用,语言逻辑性强,通俗流畅,...
  • 单片机开发流程 嵌入式开发流程

     

    单片机开发流程

     

    嵌入式开发流程

    展开全文
  • 对于一些接触单片机编程不久的小萌新来说,模块化编程这个概念刚接触的时候可能会很懵,到底什么是模块化编程?我以前也不懂,后面根据网上的说明和自己对库函数例程的分析,已经完全掌握了这门技能。 模块化编程...

            对于一些接触单片机编程不久的小萌新来说,模块化编程这个概念刚接触的时候可能会很懵,到底什么是模块化编程?我以前也不懂,后面根据网上的说明和自己对库函数例程的分析,已经完全掌握了这门技能。

            模块化编程,也可以叫面对对象编程,但相对C++等更高阶语言而言,常规的单片机中的一些方法对象需要自己来创建,下面简单写个详细流程供大家参考。

     

            首先就是创建工程;使用过库函数的盆友估计都是直接拉一个工程过来用即可;这样快捷方便,我也非常赞同,这里我也直接打开一个现有的工程讲解。

     

    1、看下图,教大家一个在keil中看代码的小方法,左键点住文件图标向下托,会有下图1中的提示,我一般喜欢点第二个并排;然后看图二,每个.c文件中写的函数方法,在.h中都会有个对应的文件定义(大神勿看,适用新手,大神是否需要在.h中定义,自有大神的理由)。

                                                                       图1

                                                                       图2

     

    2、下面实际添加.c  .h文件

     

    2.1首先我们先建立一个文件夹,用来存放.c  .h文件,两种文件是否要放在一起,自己定义,方法相同;这里用放在一个文件夹的方法。

    这里新建了一个CSc的文件夹(名字自定义)

    图3

     

    2.2下面是在keil中建立.c  .h 文件

     

    图4

    2.3选择自己新建的文件夹,名字不能有中文,以.c结尾;.h文件以.h结尾.

    图5

    2.4新建完如图6

    图6

    2.5在keil中添加新建的两个文件。如图7

    图7

    2.6在keil中先点进cs.h文件,加入如下图宏定义头。

     

    图8

    2.7  .c文件中先加入自身的头文件

    图9

    2.8这样基本流程完成了,后面是添加函数和.h文件路径,为了避免错误,我们先添加.h文件路径(图10),再添加需要执行的函数(图11)

    图10

    图11

     

    2.9需要调用这个函数,必须在相关.c文件中包含(include)有这个定义的.h文件。否则可能会报错。

    图11

     

    3.0基本流程是这么实现;

    但在一些.c文件中需要使用到一些其他.h文件中的函数或者宏定义,这时需要包含其他的.h文件。

    展开全文
  • 智能小车单片机程序及报告+流程图+管脚说明 智能小车单片机程序及报告+流程图+管脚说明
  • Flowcode V4 是一款用流程图编码(简称 流码 ...、可以导入、导出流程图,这样同一个流程图就可以在不同的微控制器上运行! 5 、强大的仿真模块。 6 、它还支持嵌入 C 和汇编代码。
  • 我曾经做过两年的单片机产品,在对单片机编程的过程中逐渐形成了一个大体固定的整体框架,也可以说是编程思路。现提出来供大家参考。首先,对外围芯片进行分类,属同一功能或同一芯片的程序采用模块化的形式,用固定...

    9237b19e65da317c80edf6e481e5dd7f.png

    我曾经做过两年的单片机产品,在对单片机编程的过程中逐渐形成了一个大体固定的整体框架,也可以说是编程思路。现提出来供大家参考。

    首先,对外围芯片进行分类,属同一功能或同一芯片的程序采用模块化的形式,用固定的几个函数实现,一般不同芯片之间的函数功能尽量不重叠,也不要使用一个函数覆盖几个芯片,以便于后期的调试,如果涉及到芯片之间通讯的,可以单独列出,使用专门的函数进行处理;

    其次,将单片机中需要完成的工作按轻重缓急进行分类,一般我会设置两个定时中断,其中一个定时时间大致在20mS左右,用来处理一些按钮防抖处理、时间日期计算、对输入处理后产生对应标志位、器件刷新等一些实时性要求不是很高,但必须有时间要求的事物处理,另外设立一个定时中断大概在1mS以下,主要用来实现时钟基准和做一些实时性要求很高的操作,一般需要将实时性要求较高的定时中断设置为高优先级,否则不能实现正常运行,如果还有串行中断需要处理,则需要严格控制实时中断中的代码长度,以免耽误串行中断的处理,还有就是如果使用软件实现串口及无线通讯软解码的场合,也要合理分配各部分的代码长度;

    最后,将普通的事件检测和处理以及响应放在主程序体中实现,该部分一般只需要几个并行的函数就可以了,主程序体可以以简单的几行代码实现。

    本人采用以上结构开发了若干个单片机产品,包括包含无线软解码的无线防盗报警主机、RS485中继器(一拖100)、带中文显示的报警接收机等,都实现了稳定有效的运行。

    希望本人的一些体会会能给大家有所帮助!


    往期文章

    👍五个阶段判断你的电路设计能力

    👍零基础怎么学电路设计?

    👍单片机按键设计的四个方案详解

    👍单片机17种常见的电路设计模块

    👍单片机最小系统解析(电源、晶振和复位电路)

    👍六款简单的开关电源电路设计原理图详解

    👍五款蜂鸣器驱动电路原理图

    👍电容的分类与区别

    👍你需要了解的与PCB差分对过孔有关的四件事

    👍继电器驱动电路汇总

    👍步进电机驱动电路图大全

    👍数码管驱动电路大全

    👍谈一谈单片机开发的几种调试方案

    👍如何打造一份it项目计划书

    👍超声波发生器电路图大全

    👍A/D转换电路图大全

    👍USB转TTL电路图大全

    👍SPI总线 通俗易懂讲解

    👍STM32存储器理解

    👍51单片机开发流程,你知道吗?

    👍485通信电路图

    👍四种直流电机驱动电路图及设计思路讲解,有图有真相!

    👍利用51单片机输出PWM

    👍51单片机寄存器功能一览表

    👍三极管基本电路原理解析

    👍单片机学习路线分析

    👍51单片机按键控制输出PWM的占空比

    👍51单片机P0口原理

    👍PCB的丝印多大才合适,你知道吗?

    👍51单片机和52单片机有什么区别

    👍单片机项目开发流程,经验之谈单片机学习路线分析

    👍单片机学习路线分析

    👍51单片机晶振电路原理

    👍高手经验,教你怎么看英文数据手册

    👍单片机hex和bin文件的区别

    👍单片机上拉电阻、下拉电阻的详解和选取

    👍献给初学单片机的你的一些话

    👍矩阵键盘电路原理视频解析

    👍哈佛结构和冯·诺依曼结构的区别

    👍发光二极管和数码管有什么关系?你知道吗?

    👍51单片机程序下载失败原因排查

    👍初学嵌入式应该注意哪些?答案在这里

    👍多位数码管动态扫描原理分析

    👍DHT11温湿度传感器原理剖析

    👍超声波模块HC-SR04电路测量原理讲解

    👍单片机与ARM的区别和选择?

    👍关于堆栈、静态、动态内存的理解

    👍STM32单片机和51单片机有何区别?

    👍分析USB母座引脚接口定义

    👍USB插座有哪些,引脚怎么定义的,你知道吗?

    👍如何区别上升沿、下降沿、低电平、高电平

    👍单片机连接蓝牙4.0心得分享

    👍单片机面试问题,你会多少?

    👍从一名产线工人到单片机工程师的经历分享

    👍7805稳压电源电路图


    行业交流群

    1e39012330e0a4b8c5ec4de7436c7dd1.png 微信群

    如果微信二维码失效,请联系微信xiaocaoxsd

    0e74e2ae52f09a0b6217c3b0e901b8da.png QQ交流群

    免责声明:公众号转载作品均尽可能注明出处,该作品所有人的一切权利均不因本站而转移。作者如不同意转载,既请通知本站予以删除或改正。转载的作品可能在标题或内容上或许有所改动。

    致芯粉的信:大量粉丝环没有养成阅读后点赞的习惯,希望大家在阅读后顺便点赞和转发,以示鼓励!一个人长期坚持发文,甚至是原创真的很不容易,多次想放弃。坚持是一种信仰,专注是一种态度。

    53d0fff72bae79e5a6ef547441f580bf.png

    展开全文
  • STM32和51系列单片机编程的区别

    千次阅读 2021-02-19 14:54:23
    欢迎使用Markdown编辑器`新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你...,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入...
  • 单片机的实验(40个实验全)实验原理+原理图+流程图+C实现代码 单片机的实验(40个实验全)实验原理+原理图+流程图+C实现代码
  • 外循环 中循环 内循环 外循环 内循环 外循环 内循环 内循环 a嵌套正确 b嵌套正确 c...X+2 X>0 Y= 100 X=0 求出Y值并将Y值放回原处 X X解设置一个计数器控制循环次数每处理完一个数据计数器减1程序流程3-7-3所示 参
  • 流水灯流程图(单片机流水灯流程图)2020-05-24 14:37:25共10个回答不是吧这么简单都不会?是不是你自己写的代码哦追问:我才学了一点点,勉勉强强写出了一个代码但实在是写不出流程图了高人帮忙啊回答:代码我看看要根据...
  • 外循环 中循环 内循环 外循环 内循环 外循环 内循环 内循环 a嵌套正确 b嵌套正确 c...X+2 X>0 Y= 100 X=0 求出Y值并将Y值放回原处 X X解设置一个计数器控制循环次数每处理完一个数据计数器减1程序流程3-7-3所示 参
  • 实验内容: 单片机P1口控制转向灯实验: 有51单片机,三个开关(K0,K1,K2),两组LED灯,要求打开K0是,...流程图: 实现程序: #include <reg51.h> sbit K0 = P1^0; sbit K1 = P1^1; sbit K2 = P1^...
  • 单片机模块化编程

    千次阅读 2019-10-15 16:35:54
    单片机模块化编程步骤: 1、先建5个文件夹:LED总文件夹、project、user、output和bsp文件夹 project文件夹主要放工程项目;user文件夹主要放main程序和pbdata程序,pbdata为自定义程序,存放公用的函数和引脚定义...
  • 51单片机开发流程

    万次阅读 多人点赞 2018-06-14 23:29:55
    第一步:首先拿出我们的开发板,开发板整机如1所示:1 开发板整机 第二步:我们在给单片机下载程序的时候,需要做一些准备事项。1、打开开发板的时候,请首先看下板子的相关的配件。我们需要用到的是USB的数据...
  • 初学单片机的40个实验(含汇编程序、C程序、流程图)   给初学者单片机的40个实验,带源码,需要资料的加群:813238832 也可以到闯客网技术论坛下载更多关于单片机,MTK的资料和学习案例   模拟开关灯   1....
  • 单片机编程思想指导【绝对值得仔细看】 <br />今日在电子爱好者论坛上看到此文,感觉对以后的学习有帮助,特复制下来以备后用. <br /> 发布: 2010-7-16 13:55 | 作者: cat_li | 来源: 电子爱好者...
  • 基于单片机控制的出租车计价器 摘 要:出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论...程序流程图 附录:程序
  • 单片机与PLC的程序设计有很大的区别,单片机的全部程序都是用户设计的,PLC的程序包括系统程序(西门子称为操作系统)和用户程序。操作系统用来组织与具体的控制任务无关的所有的CPU功能。操作系统的任务包括处理启动...
  • 单片机应用编程技巧

    千次阅读 2010-07-30 14:48:00
    单片机应用编程技巧 作者:Holtek---邓宏杰 <br />1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。...
  • 根据电路原理图,键盘扫描方法是:行线P1O~...2.程序流程软件流程图如下图所示。51单片机综合学习系统资源丰富,板内有:8位LED数码管、32路LED、4x4矩阵键盘、4个直控按键盘、蜂鸣器喇叭、继电器试验、I2C总线接口、S

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,705
精华内容 3,482
关键字:

单片机编程流程图