单片机
文章平均质量分 54
可乐虎
嵌入式!
展开
-
利用单片机里的定时器模拟秒表计数器需注意的事项!
用stm32做项目时,需要用定时器做一个秒表计时,但发现秒表总是比实际慢,百思不得其解,最终求教高人,得以解决,现将心得整理如下,以警醒自己方便他人!int main(void){ u16 i; s8 key_value; Stm32_Clock_Init(9);//系统时钟设置(正常是9倍频) delay_init(72);//延时初始化(正常原创 2013-04-24 19:34:43 · 2535 阅读 · 0 评论 -
详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
以前写单片机程序时总是把所用函数和变量都写在一个c文件里,后来遇到大点的项目,程序动则几千行,这种方式无疑会带来N多麻烦,相信大家都有所体验吧! 后来学会了在keil里进行模块化编程,即只把功能相同或相近的函数写在同一个c文件,这样以来一个项目往往由很多个c文件组成,但又带来一个问题即是某些c文件之间需要相互通信,一般我们都采用了全局变量,对吧。很多同学虽然知道在其它c文件里引用原创 2013-06-14 22:08:46 · 8947 阅读 · 5 评论 -
STM32的几种延时方法
转载处链接:http://hi.baidu.com/akopyu/item/fb1a4f10a1dd3d9399ce3352转载 2013-06-16 10:34:01 · 6519 阅读 · 0 评论 -
基于stm32和ucosii(uC/OS-II)的红外遥控实验注意事项!
这几天在stm32上跑ucosii的同时想把原来的矩阵键盘操作改为红外遥控,遥控代码移植到ucosii上后怎么也获取不了键值,最后求教一高手网友,问题最终得以解决! 红外遥控代码我是先在stm32上裸奔调通后再移植到OS里的,遥控是用的stm32引脚外部中断,即一旦有按键被按下即进入外部中断服务函数,然后根据红外接收的协议执行相关代码,移植一切就绪后怎么也获取不了按键键值,最后居原创 2013-06-16 20:29:01 · 3374 阅读 · 9 评论 -
关于单片机IO口输入输出的理解!
解释一:单片机的 IO 口 (输入/输出 口),是相对单片机 本身 而言的,就是单片机IO口往外输出信号1或者0( 1 的输出电圧 = VCC , 0 的电圧 = 0 V )或者 单片机从 IO 口 读取 输入 信息 1 或者 0 解释二:1、I/O口的输出是对电流而言的,高电平输出就是输出(或拉出)电流,低电平输出就是输入(或灌入)电流,一般C51单片机1状态为高电平状态原创 2013-06-19 15:19:31 · 28021 阅读 · 1 评论 -
keil提示:missing ';' before 'XXX'但又找不到是哪里少了分号——已解决!
今天写一个51程序,keil在编译时总提示丢失了一个分号,但怎么都找不到是哪里丢失了分号,搞了一下午才解决问题,现在把经验在此分享,以求让他人不要犯同样的错误!提示信息为:LCD12864.H(20): error C129: missing ';' before 'Flag'我在LCD12864.c文件里定义的u8 Flag = 0;在LCD12864.H文件里作此声明:extern原创 2013-06-22 21:23:37 · 28770 阅读 · 9 评论 -
ucgui窗体管理(WM)
ucgui的窗体管理主要采用了WM_Obj的窗体数据结构,在该结构中采用两种方式记录窗体,一种是链表形式,一种多叉树的形式。第一种记录所有的窗口,第二种记录当前窗口和其兄弟窗口所在的位置。其结构体如下:struct WM_OBJ_struct{ GUI_RECT Rect; /* outer dimensions of window */ GUI_转载 2013-07-29 20:39:34 · 1476 阅读 · 0 评论 -
图解PCB布线数字地、模拟地、电源地,单点接地抗干扰!
我们在进行pcb布线时总会面临一块板上有两种、三种地的情况,傻瓜式的做法当然是不管三七二十一,只要是地 就整块敷铜了。这种对于低速板或者对干扰不敏感的板子来讲还是没问题的,否则可能导致板子就没法正常工作了。当然若碰到一块板子上有多种地时,即使板子没什么要求,但从做事严谨认真的角度来讲,咱们也还是有必要采用本文即将讲到的方法去布线,已将整个系统最优化,将其性能发挥到极致!当然关于这些地的一些基础概念原创 2013-08-07 15:41:21 · 16956 阅读 · 8 评论 -
STC-ISP下载失败的原因与解决汇总
STC-ISP下载失败的原因与解决汇总 (V0.99a3)STC单片机使用串口ISP,不需编程器,只要有串口就可以下载,非常方便。但是从大量的实际操作中会遇到各种各样下载的问题,影响了用户体验,现整理原因和解决方法如下:(仅供参考,欢迎指正,Email:stcisp@163.com)首先成功进行ISP烧写的条件非常简单,只要有串口和单片机接成最小系统(带有RS232电路)就可以了(转载 2013-08-15 16:38:16 · 30371 阅读 · 3 评论 -
图解Stm32使用jlink下载程序时jtag接口(SW和JTAG模式)的简化方法!
用过stm32的人都知道stm32有两种常用下载程序的方法,用串口和jlink。串口下载方法和51差不多不多说,用jlink下载时接口引脚太多导致接口很大,很占pcb的面积,在此我就针对这个问题清晰的讲述下jlink下载程序时jtag接口的简化方法!原创 2013-08-28 21:21:28 · 13168 阅读 · 0 评论 -
图解单片机8位PWM、16位PWM中“位”的含义!
今天 发现很多同学 搞不懂单片机的pwm中的位表示什么意思,如很多同学会问“8位pwm、16位pwm是什么意思啊,它们有什么区别啊,其中的‘位’表示什么意思啊”。对于这些问题,今天就给大家解释下,由于文字描述的局限性,故来个图文并茂。 首先,pwm是“脉宽调制”的意思,脉宽顾名思义就是脉冲的宽度,即图中时间 t,“脉宽调制”理所当然就是改变 t 的大小了。当人们在改变 t 的大小原创 2013-08-18 19:25:45 · 14160 阅读 · 5 评论 -
UCOSII概述之-任务调度
实验-任务调度 前面我们所有的例程都是跑的裸机程序(裸奔),从本章开始,我们将分3个章节向大家介绍UCOSII(实时多任务操作系统内核)的使用。本章,我们将向大家介绍UCOSII最基本也是最重要的应用:任务调度。本章分为如下几个部分:58.1 UCOSII简介58.2 硬件设计58.3 软件设计58.4 下载验证58.1 UCOSII简介UCOS转载 2013-09-01 12:47:39 · 2818 阅读 · 0 评论 -
stm32最小系统完整版
采用stm32f103rc的stm32最小系统详细解析图,如下:一、STM32主电路二、USB转串口下载电路三、SWD模式调试仿真电路四、指示电路五、整体电路原创 2013-07-21 20:55:01 · 41062 阅读 · 6 评论 -
彻底解决:Keil编译提示“File has been changed outside the editor, reload?”提示!
如图所示,很多同学在使用keil时都可能会碰到上图中的“File has been changed outside the editor, reload?”提示,很令人烦心。当遇到此提示,首先不要郁闷,请先看清楚文件的路径及名称。比如:这个提示的文件名是UCOSII+STM32+12864.axf,然后再看下图: 大家看见上图所示的文件名UCOSII+STM32+12864.原创 2013-09-15 22:27:49 · 19202 阅读 · 2 评论 -
stm32 keil mdk用jlink在线仿真调试键盘按键——图文详解
原来按键用JLINK是能在线调试的!我原来还以为按键这种东西只能用串口发送键值来调试呢!这太好啦,不知道怎么做的新手们赶紧看下去吧!原创 2013-06-10 11:03:00 · 11180 阅读 · 0 评论 -
图解单片机下载程序电路原理之USB转串口线、CH340、PL2303、MAX232芯片的使用!
目前为止,我接触单片机已有不少时日,从选择元器件、原理图、PCB、电路硬件调试、软件开发也算小有心得。单片机软件开发里面第一步当属下载程序了,如果这一步都有问题,那么后面的一切便无从谈起,本人当初刚接触单片机时,对于下载电路方法及原理也是一头雾水。好在随着经验的积累以及自己的努力探求,现在对此问题算是有了点点自己的理解。故今天在此针对常用51单片机下载程序问题做下详解,以求新手们少走弯路。当然原创 2013-09-01 11:37:08 · 22308 阅读 · 3 评论 -
error: #70: incomplete type is not allowed——已解决!
今天在使用sizeof与数组时总是编译出错,百思不得其解,折腾了半天问题终于解决了!现在此做点笔记,警醒自己也方便他人! 代码结构如下:在某个c文件里定义并初始化了light_value[]这个数组,在另一个c文件要用到此数组,于是用extern声明如下:extern u8 light_value[];然后错误代码如下:for (i=0; i{原创 2013-06-14 19:51:46 · 37305 阅读 · 5 评论 -
串口硬件流量控制说明
流量控制 对 串口而言,意味着 可以停止发送 然后重新开始,而不丢失任何数据用专用的控制线来发送 “停止”和“开始”信号RTS Request To Send 我可以接受数据,请求发送数据给我CTS Clear To Send 允许我发送数据给你?当一端 准备接受数据时, 它将RTS 升为 高电平(意思是 Request To Send to me).转载 2015-04-29 14:38:26 · 6063 阅读 · 0 评论 -
关于stm32的MY_NVIC_Init()中断管理函数的使用心得!
有次在使用stm32做项目时,遇到要用2个定时器及其中断服务程序的情况。这样就需要使用函数MY_NVIC_Init(NVIC_PreemptioPriority,NVIC_SubPriority,NVIC_Channel,NVIC_Group)对两个中断服务的优先级进行设定了。最开始,这个函数看得我是一头雾水,无从着手,仔细研究了一会才明白该如何使用了。相信很多新手同学会和我有类似的经历吧,为了方原创 2013-05-03 18:44:28 · 10101 阅读 · 0 评论 -
STC Monitor51仿真器使用指南
STC Monitor51仿真器使用指南1、 安装Keil版本的仿真驱动 2、 在Keil中创建项目 3、 项目设置,选择STC仿真驱动 4、 创建仿真芯片 5、 开始仿真 一、 安装Keil版本的仿真驱动如上图,首先选择“Keil关联设置”页面,点击“添加MCU型号到Keil中”,在出现的如下面的目录选择窗口中,定位到Keil的转载 2013-06-14 17:42:38 · 11280 阅读 · 3 评论 -
常用的电平转换方案(74HC245、74LVC4245等)
(1) 晶体管+上拉电阻法 就是一个双极型三极管或 MOSFET,C/D极接一个上拉电阻到正电源,输入电平很灵活,输出电平大致就是正电源电平。(2) OC/OD 器件+上拉电阻法 跟 1) 类似。适用于器件输出刚好为 OC/OD 的场合。(3) 74xHCT系列芯片升压 (3.3V→5V) 凡是输入与 5V TTL 电平兼容的 5V CMOS 器件都可以转载 2013-04-21 17:04:10 · 12152 阅读 · 0 评论 -
提高编译效率的Keil C编程技巧
提高编译效率的Keil C编程技巧1、选择合适的算法和数据结构应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。.选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和转载 2013-04-21 17:05:49 · 2883 阅读 · 0 评论 -
时间片轮询法
时间片轮询法 时间片轮询法,在很多书籍中有提到,而且有很多时候都是与操作系统一起出现,也就是说很多时候是操作系统中使用了这一方法。不过我们这里要说的这个时间片轮询法并不是挂在操作系统下,而是在前后台程序中使用此法。也是本贴要详细说明和介绍的方法。 对于时间片轮询法,虽然有不少书籍都有介绍,但大多说得并不系统,只是提提概念而已。下面本人将详细介绍本人模式,转载 2013-05-21 20:55:20 · 10020 阅读 · 0 评论 -
微型抢占式多任务实时内核设计
微型抢占式多任务实时内核设计发布:2011-09-02 | 作者: | 来源:liuxianping摘要:介绍引入事件驱动观念的抢占式多任务微型实时内核——MicroStar的设计与实现;提出基于事件的优先级这一新概念。关键词:事件驱动优先级任务管理消息信号同步市面上有很多优秀的嵌入式实时操作系统(RTOS),但在中低端微控制器(MCU)上运行性能良好的RTOS内核并不多。在高档机下,功能转载 2013-05-22 13:05:33 · 1277 阅读 · 0 评论 -
基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数!
经本人刻苦钻研,将51单片机上用的矩阵键盘扫描程序移植到了stm32上,同时也做了很大的改进,最大的改进莫过于消抖这块了。以前的消抖总是采用delay延时约10到20ms的时间,但这样会导致MCU在延时里空跑而造成主程序被搁置,显然,程序的实时性大打折扣,今天便在此让新手们别delay,从此走进一个崭新的扫描消抖世界!(本人也是新手——爱钻研的新手哈!^_^)//stm32矩阵键盘翻转扫描法(原创 2013-04-27 16:12:53 · 15375 阅读 · 6 评论 -
给51 DIY超轻量级多任务操作系统
前言想了很久,要不要写这篇文章?最后觉得对操作系统感兴趣的人还是很多,写吧.我不一定能造出玉,但我可以抛出砖.包括我在内的很多人都对51使用操作系统呈悲观态度,因为51的片上资源太少.但对于很多要求不高的系统来说,使用操作系统可以使代码变得更直观,易于维护,所以在51上仍有操作系统的生存机会.流行的uCos,Tiny51等,其实都不适合在2051这样的片子上用,占资源较多,转载 2013-05-22 18:28:33 · 1070 阅读 · 1 评论 -
用C语言实现高效嵌入式系统编程
1引言 随着市场竞争的日趋激烈,要求电子工程师能够在短时间内编写出执行效率高而又可靠的嵌入式系统的执行代码。同时,由于实际系统的日趋复杂,要求所写的代码规范、模块化并便于多个工程师以软件工程的形式进行协同开发。汇编语言作为传统的嵌入式系统的编程语言,已经不能满足这样的实际需要了。而C语言以其结构化和能产生高效代码满足了这样的需要,成为电子工程师在进行嵌入式系统编程时的首选开发工具而转载 2013-05-23 19:08:29 · 2927 阅读 · 0 评论 -
再发一种基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数! .
本人今天又换种思路写了个关于stm32的4X4矩阵键盘定时器扫描消抖法的算法程序,同样是采用的效率较高的翻转法,已通过测试,希望大家喜欢!大概思路为:将端口的第N次扫描值和第(N-1)次的扫描值进行比较,若相等则某个变量自增1次,否则将其清0,当此变量自增的值达到某个值时,则认为按键确实是被按下了,然后再进行后续的行和列的查找工作,最终确定是哪个按键被按下了!注:本程序的定时器中断扫描周期为10m原创 2013-05-04 16:06:39 · 6639 阅读 · 3 评论 -
12864多级菜单设计
看到网上有个视频,用的是12864做的菜单,很花哨,自己也心痒痒想做一个,收集了 很多关于这方面的东西,但是都是五花八门,没有一个完整的可以共大家参考的程序,所以决定写偏文章供大家参考,希望读者下去自己优化,改进。有什么不足之处还请多多包涵。好了,废话不多说,直接进入正题吧。 1、首先定义一个机构体如下typedef struct{ uchar curr转载 2013-05-13 20:57:57 · 7739 阅读 · 8 评论 -
DS18B20多点测温(读序列,匹配序列,51 C程序,1602显示)
DS18B20多点测温(读序列,匹配序列,51 C程序,1602显示) 由于本人在前两天找DS18B20多点测温(51 C程序),网上下载了很多,但是都不是很理想,后来,自己总结前人的知识,重新写了这个程序。其中包括程序一:单个读序列号。程序二,匹配并且读两个DS18B20,当然,读多个与读两个基本原理一样,只要加上其序列号等即可。本程序所有显示都是用LCD1602显示。程序转载 2013-06-09 17:24:56 · 6694 阅读 · 4 评论 -
keil 中建立多文件时,变量重复定义的解决
keil 中建立多文件时,变量重复定义的解决 c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。 对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern转载 2013-06-09 19:03:21 · 12305 阅读 · 0 评论 -
详解基于STM32的keil4 MDK 软件仿真输出IO口的波形图!
这是一个STM32的PA6和PA7口输出PWM波形的仿真步骤,其它情况类似……每一步我都做了截图,大家照着一步步来,有些参数根据自己的情况稍微改下就好,肯定可以出波形的!请大家放心参考……原创 2013-05-31 21:19:35 · 28896 阅读 · 4 评论 -
详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!
一、stm32的pwm输出引脚是使用的IO口的复用功能。二、T2~T5这4个通用定时器均可输出4路PWM——CH1~CH4。三、我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并在最后给出tim3的ch1和ch2两路pwm输出的c代码(已在STM32F103RBT6上测试成功,大家放心使用!)。四、给出了PWM频率和占空比的计算公式。步骤如下:1、使能TIM3原创 2013-05-31 11:18:10 · 15580 阅读 · 0 评论 -
12864绘图程序大集合
/*******************************************************************************************************///http://www.doc88.com/p-803573915967.html//程序说明:本程序为12864(st7920)驱动程序,只实现了最简单的显示功能//端口设置转载 2013-06-14 18:49:33 · 4948 阅读 · 0 评论 -
基于单片机的多级菜单实现方法改进
转载 2013-06-05 19:39:12 · 2142 阅读 · 0 评论 -
C51与单片机系统多级菜单的模块化设计
转载 2013-06-05 19:20:21 · 3160 阅读 · 0 评论 -
Error: C3065E: type of input file 'XXX' unknown——已解决!
今天在使用KEIL MDK编译工程时出现这种错误:user_app.c: Error: C3065E: type of input file 'REMOTE' unknown。 以前从未遇到过,折腾半天才发现是remote.c所在文件夹的名字里有个空格所致。于是将文件夹名改为IR_REMOTE后,问题就迎刃而解(原名是IR REMOTE)。原创 2013-06-15 17:24:18 · 10968 阅读 · 2 评论 -
理解串口流控
A想要发送数据给B,那么用硬件的RTS/CTS作为硬件流控制机制的话,那么:A如果想要发送数据给B的话,A会使得RTS(Request To Send)引脚有效,表明其想要“请求发送”数据给作为接收设备的B,而A接着就会去检测对应的来自B的CTS引脚,直到CTS有效(此时意味着B已经做好了相关的准备工作了,然后设置了CTS(Clear To Send) ,表明自己准备好接受数据了),才会真正开转载 2015-04-29 15:16:50 · 1194 阅读 · 0 评论