keil5

keil5
keil5

Keil 软件实全教程(五)

其于Keil的实验仿真板的使用

前面介绍了Keil 软件的使用,从中我们可以看到Keil 的强大功能,不过,对于初学者

来说,还有些不直观,调试过程中看到的是一些数值,并没有看到这些数值所引起的外围电

路的变化,例如数码管点亮、发光管发光等。为了让初学者更好地入门,笔者利用Keil 提

供的AGSI 接口开发了两块仿真

实验板。

这两块仿真板将枯燥无味

的数字用形象的图形表达出来,

可以使初学者在没有硬件时就

能感受到真实的学习环境,降低

单片机的入门门槛。图 1 是键

盘、LED 显示实验仿真板的图,

从图中可以看出,该板比较简

单,有在P1 口接有8 个发光二

极管,在P3 口接有4 个按钮,

图的右边给出了原理图。

图2 是另一个较为复杂的

实验仿真板。在该板上有8 个数

码管,16 个按键(接成4*4 的

键盘、LED 显示实验仿真板

矩阵式),另外还有P1 口接的8

个发光管,两个外部中断按钮,一个带有计数器的脉冲发生器等资源,显然,这块板可以完

成更多的实验。

一、实验仿真板的安装

这两块仿真实验板实际上是两个dll 文

件,名称分别是ledkey.dll 和simboard.dll,

安装时只要根据需要将这两个或某一个文

件拷贝到keil 软件的c51\bin 文件夹中即可。

二、实验仿真板的使用

要使用仿真板,必须对工程进行设置,

设置的方法是点击Project->Option for Target

…Target1?打开对话框,然后选中Debug 标签

页,在Dialog :Parameter:后的编缉框中输入

-d 文件名。例如要用ledkey.dll(即第一块仿

图 2 单片机实验仿真板

真板)进行调试,就输入-dledkey,如图 3

所示,输入完毕后点击确定退出。编译、连接完成后按CTRL+F5 进入调试,此时,点击菜

单Peripherals,即会多出一项“键盘LED 仿真板(K)”,选中该项,即会出现如图 1 的界面,

Keil 软件实全教程(五)

同样,在设置时如果输入-dsimboard 则能够调出如

图 2 的界面。

第一块仿真板的硬件电路很简单,电路图已在

板上,第二块板实现的功能稍复杂,其键盘和数码

显示管部份的电路原理图如图 4 所示。下表给出了

常用字形码,读者也可以根据图中的接线自行写出

其它如A、B、C、D、E、F 等的字形码。除了键

图 3 实验仿真板的设置

盘和数码管以外,P1 口同样也接有8 个发光二极管,

连接方式与图1 相同;脉冲发生器是接入T0 即P3.4 Array

以下以一个稍复杂的程序为例,说明键盘、LED 显示实验仿真板的使用。该程序实现

的是可控流水灯,接P3.2 的键为开始键,按此键则灯开始流动(由上而下),接P3.3 的键

为停止键,按此键则停止流动,所有灯暗,接P3.4 的键为向上键,按此键则灯由上向下流

动,接P3.5 的键为向下键,按此键则灯由下向上流动。

例8:

UpDown BIT 00H ;上下行标志

StartEnd BIT 01H ;起动及停止标志

LAMPCODE EQU 21H ;存放流动的数据代码

ORG 0000H

AJMP MAIN

ORG 30H

MAIN:

MOV SP,#5FH

MOV P1,#0FFH

CLRUpDown 启动时处于向上的状态

CLRStartEnd ;启动时处于停止状态

MOV LAMPCODE,#01H单灯流动的代码

LOOP: ACALL KEY ;调用键盘程序

JNB F0,LNEXT ;如果无键按下,则继续

ACALL KEYPROC ;否则调用键盘处理程序LNEXT: ACALL LAMP ;调用灯显示程序

;反复循环,主程序到此结束

AJMP LOOP

;延时程序,键盘处理中调

DELAY: MOV R7,#100

D1: MOV R6,#100

DJNZ R6,$

DJNZ R7,D1

RET

KEYPROC:

MOV A,B ;从B 寄存器中获取键值

JB ACC.2,KeyStart ;分析键的代码,某位被按下,则该位为1 JB ACC.3,KeyOver

JB ACC.4,KeyUp

JB ACC.5,KeyDown

AJMP KEY_RET

KeyStart:

SETB StartEnd ;第一个键按下后的处理

AJMP KEY_RET

KeyOver:

CLRStartEnd ;第二个键按下后的处理

AJMP KEY_RET

KeyUp:

;第三个键按下后的处理

SETB UpDown

AJMP KEY_RET

KeyDown:

CLRUpDown 第四个键按下后的处理

KEY_RET:

RET

KEY:

CLRF0F0,表示无键按下。

ORL P3,#00111100B ;将P3 口的接有键的四位置1

MOV A,P3 ;取P3 的值

ORL A,#11000011B ;将其余4 位置1

CPL A ;取反

JZ K_RET ;如果为0 则一定无键按下

CALL DELAY ;否则延时去键抖

ORL P3,#00111100B

MOV A,P3

ORL A,#11000011B

CPL A

JZ K_RET

MOV B,A ;确实有键按下,将键值存入B 中

SETB F0 ;设置有键按下的标志

;以下的代码是可以被注释掉的,如果去掉注释,就具有判断键是否释放的功能,否则

没有

K_RET: ;ORL P3,#00111100B ;此处循环等待键的释放

;MOV A,P3

;ORL A,#11000011B

;CPL A

;JZ K_RET1 ;读取的数据取反后为0 说明键释放了

;AJMP K_RET

;消除后沿抖动

;K_RET1:CALL DELAY

RET

D500MS: ;流水灯的延迟时间

MOV R7,#255

D51: MOV R6,#255

DJNZ R6,$

DJNZ R7,D51

RET

LAMP:

JBStartEnd,LampStart ;如果StartEnd=1,则启动

MOVP1,#0FFH

AJMP LAMPRET ;否则关闭所有显示,返回

LampStart:

JB UpDown,LAMPUP ;如果UpDown=1,则向上流动

MOVA,LAMPCODE

RL ;实际就是左移位而已

MOV LAMPCODE,A

MOVP1,A

LCALLD500MS

LCALLD500MS

AJMPLAMPRET

LAMPUP:

MOVA,LAMPCODE

RR A向下流动实际就是右移

MOV LAMPCODE,A

MOVP1,A

LCALLD500MS

LAMPRET:

RET

END

将程序输入并建立工程文件,设置工程文件,在Debug 标签页中加入“-dledkey”,汇编、连接文件,按Ctrl+F5 开始调试,打开仿真板,使用F5 功能键全速运行,可以看到所

有灯均不亮,点击最上面的按钮,立即会看到灯流动起来了,点击第二个按键,灯将停止流动,再次点击第一个按钮,使灯流动起来,点击第三个按钮,可以发现灯流动的方向变了,点击第四个按钮,灯的流动方向又变回来了。如果没有出现所描述的现象,可以使用单步、

过程单步等调试手段进行调试,在进行调试时实验仿真板会随时显示出当前的情况,是不是非常的直观和方便呢?

下面的一个例子是关于第二块实验仿真板的,演示点亮8 位数码管。例9:

ORG0000h

JMP MAIN

ORG 30H

MAIN:

MOV SP,#5FH

MOV R1,#08H

MOV R0,#58H 显示缓冲区首地址

MOV A,#2

INIT:

MOV @R0,A ;初始化显示缓冲区

INC A

INC R0

DJNZ R1,INIT ;将0-7 送显示缓冲区

LOOP:

CALL DISPLAY

JMP LOOP

;主程序到此结束

DISPLAY:

MOV R0,#7FH ;列选择

MOV R7,#08H 共有8 个字符

MOV R1,#58H 显示缓冲区首地址

AGAIN:

MOV A,@R1

MOV DPTR,#DISPTABLE

MOVC A,@A+DPTR

MOV P0,A

MOV P2,R0

MOV A,R0

RR A

MOV R0,A

INC R1

DJNZ R7,AGAIN

RET

DISPTABLE: DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0FFH ;字形码表

END

这一程序内部RAM 中58H 到5FH 被当成是显示缓冲区,主程序中用2-9 填充该显示区,然后调用显示程序显示2-9。这里是用了最简单的逐位显示的方式编写的显示程序。

最后介绍一个小小技巧,将鼠标移入按钮区域,按下左键,按钮显示被按下,不要放开

鼠标左键,将光标移出按钮区域,松开左键,可以看到,按钮仍处于按下状态,利用这一功能,在需要I/O 口长期处于低电平时,你就不必一直用手按着鼠标的左键啦。

如何改变keil5的背景色

作者:一中 1.打开这个文件,记事本方式打开F:\Keil_v5\UV4\global.prop 原背景色代码: # vertical edge at right margin edge.mode=0 edge.column=80 # Specification for text selection and caret line selection.fore=#FF80FF selection.back=#000000 caret.fore=#000000 caret.back=#FFFFFF # Color for vertical edge edge.colour=#66FAFA # C/C++ Editor files template.cpp="#define","#define |";"#if","#if |\r\n\r\n#endif";\\ "#include","#include ";"Header","// Header:\r\n// File Name: |\r\n// Author:\r\n// Date:\r\n";\\ "continue","continue;";"do","do\r\n{\r\n\t// TODO: enter the block content here\r\n\t\r\n\t|\r\n} while ();\r\n";\\ "enum","enum |\r\n{\r\n\t\r\n};\r\n";"for","for(|;;)\r\n{\r\n}";\\ "fpointer_type","typedefint (* |F)();\r\n";"function","void function(|)\r\n{\r\n\r\n}\r\n";\\ "if","if (|)";"ifelse","if (|)\r\n{\r\n}\r\nelse\r\n{\r\n}";\\ "struct","struct | \r\n{\r\n\r\n};\r\n";"switch","switch (|)\r\n{\r\n\tcase:\r\n\t\tbreak;\r\n\tcase:\r\n\t\tbreak;\r\n\tdefault:\r\n\t\tbreak;\r\n}";\\ "void","void | ();\r\n";"while","while (|)\r\n{\r\n}";\\ font.monospace.cpp=Courier New style.cpp.32=font:Courier New,size:10,fore:#0000FF,back:#FFFFFF style.cpp.4=font:Courier New,size:10,fore:#007F7F,back:#FFFFFF style.cpp.10=font:Courier New,size:10,fore:#000000,back:#FFFFFF style.cpp.1=font:Courier New,size:10,fore:#007F00,back:#FFFFFF style.cpp.2=font:Courier New,size:10,fore:#007F00,back:#FFFFFF style.cpp.5=font:Courier New,size:10,fore:#0000FF,back:#FFFFFF style.cpp.6=font:Courier New,size:10,fore:#7F007F,back:#FFFFFF

Keil5兼容51和stm232方法

Keil5兼容51和stm232方法 (1) Keil v5可以5既开发51单片机,又开发STM32。不过先处理一下: 1 首先,准备好两个软件安装之后的文件,建议你用以下两个版本 Keil C51V900版本或更高版本,Keil mdk_510版本或更高版本。 2 先安装 Keil C51,安装目录改为:"D:\Keil v4"(我安装在D盘的)。 3 再安装MDK,目录:"D:\Keil v5"。 4 把Keil v4文件夹下的 UV4下的所有文件复制、粘贴到Keil v5文件夹下的UV4文件夹里。 5 把Keil v4文件夹下的C51文件夹全部复制到 Keil v5文件夹下。 (注意:如果提示有重复的文件,是否替换时,一律选择否,即不替换,千万不要选择是!!) 6 把Keil v4下的Tools.ini文件内容复制,粘贴到Keil v4下的Tools.ini文件的尾部,并将 里面所有的"Keil v4"替换成"Keil v5",保存(即文件路径都改为D:\Keil v5)。 7 至此就OK啦,两者就兼容了,Keil v5既可以编译ARM系列,又可以编写51系列了. (2) 大家刚开始接触ARM时,肯定是先建立开发环境。如果你用keil 时会发现,你在此基础上

你如果装了51版本的编译器的话,会发现无法装ARM版本的编译器,这就会很尴尬。用了51就无法用ARM,用ARM就无法用51。我之前装了KEIL2当做51的编译器,keil4当做ARM 的,实际用的时候特别不方便。好了,不废话了,切入正题吧。 不管你之前装的是51的还是ARM这都没关系。其实很简单的,下面介绍步骤:一:先将51的文件夹或者ARM的文件夹,放到你安装keil的目录中,路径是注意是C:\keil。最好还是把目录装在C盘上。 如图1 图1 这两个文件夹是编译程序所需要的,非常重要。 二:打开TOOLS.INI的这个文件,将文件中加点东西。 打开后如果你是想在ARM下加入51功能,那么你把这一段复制下来 [UV2] ORGANIZATION="微软中国" NAME="微软用户", "dsf" EMAIL="sad" BOOK0=UV4\RELEASE_NOTES.HTM("uVision Release Notes",GEN) SOCKETPORT=1 [C51] PATH="C:\Keil\C51\" VERSION=V9.00 BOOK0=HLP\Release_Notes.htm("Release Notes",GEN)

keil5

Keil 软件实全教程(五) 其于Keil的实验仿真板的使用 前面介绍了Keil 软件的使用,从中我们可以看到Keil 的强大功能,不过,对于初学者 来说,还有些不直观,调试过程中看到的是一些数值,并没有看到这些数值所引起的外围电 路的变化,例如数码管点亮、发光管发光等。为了让初学者更好地入门,笔者利用Keil 提 供的AGSI 接口开发了两块仿真 实验板。 这两块仿真板将枯燥无味 的数字用形象的图形表达出来, 可以使初学者在没有硬件时就 能感受到真实的学习环境,降低 单片机的入门门槛。图 1 是键 盘、LED 显示实验仿真板的图, 从图中可以看出,该板比较简 单,有在P1 口接有8 个发光二 极管,在P3 口接有4 个按钮, 图的右边给出了原理图。 图2 是另一个较为复杂的 实验仿真板。在该板上有8 个数 码管,16 个按键(接成4*4 的 键盘、LED 显示实验仿真板 矩阵式),另外还有P1 口接的8 个发光管,两个外部中断按钮,一个带有计数器的脉冲发生器等资源,显然,这块板可以完 成更多的实验。 一、实验仿真板的安装 这两块仿真实验板实际上是两个dll 文 件,名称分别是ledkey.dll 和simboard.dll, 安装时只要根据需要将这两个或某一个文 件拷贝到keil 软件的c51\bin 文件夹中即可。 二、实验仿真板的使用 要使用仿真板,必须对工程进行设置, 设置的方法是点击Project->Option for Target …Target1?打开对话框,然后选中Debug 标签 页,在Dialog :Parameter:后的编缉框中输入 -d 文件名。例如要用ledkey.dll(即第一块仿 图 2 单片机实验仿真板 真板)进行调试,就输入-dledkey,如图 3 所示,输入完毕后点击确定退出。编译、连接完成后按CTRL+F5 进入调试,此时,点击菜 单Peripherals,即会多出一项“键盘LED 仿真板(K)”,选中该项,即会出现如图 1 的界面,

如何安装KEIL5

第1章如何安装KEIL5 1.1温馨提示 1、安装路径不能带中文,必须是英文路径 2、安装目录不能跟51的KEIL或者KEIL4冲突,三者目录必须分开 3、KEIL5的安装比起KEIL4多了一个步骤,必须添加MCU库,不然没法使用。 4、如果使用的时候出现莫名其妙的错误,先百度查找解决方法。 1.2获取KEIL5 要想获得KEIL5的安装包,在百度里面搜索“KEIL5下载”即可找到很多网友提供的下载文件,或者到KEIL的官网下载:https://https://www.360docs.net/doc/1213284550.html,/download/product/,一大堆注册非常麻烦。 本章里面安装的KEIL5的版本是MDK5.15。 1.3开始安装 双击KEIL5安装包,开始安装,next。

Agree,Nest 选择安装路径,路径不能带中文,next

填写用户信息,全部填空格即可,next Finish,安装完毕

1.4安装MCU Device包 KEIL5不像KEIL4那样自带了很多厂商的MCU型号,KEIL5需要自己安装。 把下面弹出的界面关掉,我们直接去keil的官网下载:https://www.360docs.net/doc/1213284550.html,/dd2/pack/,或者直接用我们下载好的包。 在官网中找到STM32F1、STM32F4、STM32F7这3个系列的包下载到本地电脑,具体下载哪个系列的根据你使用的型号下载即可,这里我只下载我自己需要使用的F1/4/7这三个系列的包。

把下载好的包双击安装即可,安装路径选择跟KEIL5一样的安装路径,安装成功之后,在KEIL5的Pack Installer中就可以看到我们安装的三个包,以后我们新建工程的时候,就有单片机的型号可选。 1.5破解 打开KEIL5,File->License Management复制CID

Keil5编译问题

cannot open source input file “core_cm4.h”解决方法 装了比MDK5.11A更高版本的MDK后,可能出现编译标准例程报如下错误: ..\SYSTEM\sys\stm32f4xx.h(470): error: #5: cannot open source input file "core_cm4.h": No such file or directory 实际出错是在stm32f4xx.h,如图1所示: 图1 找不到core_cm4.h路径. 该core_cm4.h文件在stm32f4xx.h里面被引用,实际上是ARM CMSIS的东西,路径在MDK 安装路径下,为: MDK安装目录\ARM\Pack\ARM\CMSIS\4.1.1\CMSIS\Include

一般来说,装了CMSIS支持包就应该可以找到才对,但是部分客户电脑无法找到,原因未知. 不过,我们可以通过手动制定路径的办法,解决这个问题. 添加方法:点击魔术棒-->C/C++选项卡-->Include Paths ,选择我们MDK安装目录,找到\ARM\Pack\ARM\CMSIS\4.1.1\CMSIS\Include,如图2所示: 图2 手动添加CMSIS头文件路径. 之后,多次点击确认,回到主界面. 再重新编译,即可解决问题. 方法二: 个人建议,当找到上述的路径之后,可以看到include目录,所以可以直接将当前的目录拷贝出来(不过要注意MDK版本),直接放到当前工程的目录下,通过魔术棒-?C++-?include

包含以下编译就OK,(以后对新工程的使用方便快捷(MDK版本没有发生变化的情况下)),具体的操作见下图: keil5 编译程序出现错误Error: L6411E: No compatible library exists with a definition of startup symbol __main Error: L6411E: No compatible library exists with a definition of startup symbol __main. 之前装过ADS,ADS与MDK冲突,依据网友提供的资料,最终的解决办法如下 在我的电脑点击属性>高级系统设置>高级>环境变量>在系统变量中>新建

最新Keil5使用说明

【关键字】文件、运行、环境、工程、设置 最新Keil5使用说明 1、新建工程 [Project]->[New uVision Project...] 选择文件夹(自定义),输入文件名(例Test01)[保存] 2、选择CPU型号 展开[Freescale],选择[K60 Series]下[MK60DN512xxx10] [OK] 3、选择运行环境 勾选[Device]->[Startup] [OK]

4、设置属性 [Project]->[Options for Target'Target1'... ALT+F7] 或选中Target1后,鼠标右键,选择[Options for Target'Target1'... ALT+F7] Target属性页,根据开发板上硬件,填入相应晶体频率如图红框所示 C/C++属性页,选择[Include Paths]后[...]按纽,如图红框如示 选择工具栏上[New/Insert]按纽,,如图红框如示 选择[C:\Keil_v5\ARM\Pack\ARM\CMSIS\ [OK] Debug属性页,选择PEMicro Debugger调试器,如图红框所示 [OK] 5、例程 展开[]Target1] 选择[Source Group1],单击鼠标右键,选择[Add New Item to 'Source Group 1'] 选择C File(.c),选择文件夹路径(自定义),填写文件名Test01 加入如下代码

6、编译 [Project]->[Build Target F7] 或单击编译工具栏中Build图标 修改并编译至0 Error(s), 0 Warning(s). 7、调试 [Debug]->[Start/Stop Debug Session Ctrl+F5] 或单击调试工具栏中Start/Stop Debug Session图标[Connect ( Reset) ]

典藏-Keil5程序调试

实验三C语言启动代码与Keil5程序调试实验 实验步骤: 1.创建项目。 (1)选择处理器芯片型号:NXP--->LPC2103。 (2)选择创建启动代码。 (4)把main.c文件添加到项目中。 (6)把MyAsmFun.s文件添加到项目中。

2.编译项目 3.启动调试项目 (1)点击DEBUG--->Start/Stop Debug Session (2)在main.c的第16行程序处,设置一个断点; (3)Debug--->Run; (4)View--->{。。。。。},打开各类观察窗口,跟踪程序运行。 (5)DEBUG--- > {Step over /Step in/Step out},观察程序运行结果: 变量i、s、sum1/2/3等值的变化。 (6)调试汇编时,可观察CPU内核寄存器值、存储器内容、反汇编窗口等。

核心提示:对于善于辩论和即兴演讲的人来说,无线广播是传播名声的极佳的媒体。我本人就在地方无线电台工作过很长一段时间。很早以前我就发现,听众对业余播音员苛刻无比,他们只希望听到熟悉的声音主持着熟悉的节目... 对于善于辩论和即兴演讲的人来说,无线广播是传播名声的极佳的媒体。我本人就在地方无线电台工作过很长一段时间。很早以前我就发现,听众对业余播音员苛刻无比,他们只希望听到熟悉的声音主持着熟悉的节目,一旦有播音员声音提不上去变了调,或者感情没把握好走了样,立刻会有笑话一传几个月,而这个可怜的播音员的名声也一落千丈。在演播过程中,不要叫主持人的名字——他们可不是你的听众,收音机前的人们才是:需要叫到主持人名字的可能是在另外一档节目里头。现场演播由于现场演播直接向外播放,不能事先经过剪切和选择,所以一般人都很害怕,担心演砸了。你去演播时要带上一盘磁带,请人帮你录下来。如果是自我控制的演播室,那里通常也会有自录设备,你可以在那儿先请个师傅帮个忙。在BBC(英国广播公司)的自控演播室里,墙上就钉着使用说明,详细地告诉人们怎样自己动手作采访节目,也包括怎样录音,供自己带走。应早一点到演播室。小的演播室不会有太多的工作人员,他们都各忙各的,不一定有人会来招呼你。在节目开始前,你要和主持人先联络一下感情,至少也得彼此交换一下目光。主持人一般都全神贯注于种种技术细节,尽量不让节目中出现断档,掐准时间,播放广告短诗,插入新闻等等,并挤出时间来招呼你。放松嗓子常用的方法是深吸一口气,然后一边吐气,一边说——啊依呦——要说得非常慢,尽量伸展、活动嘴巴,这样提高、降低声音再重复做几遍。在正式开口说话前,要先活动一下下巴。连接电话节目制作人会预先给你一个电话,通知你做好准备.在你的这档节目开始前一两分钟,他会再来一个电话,确认你是否已一切就绪,可以开始了,同时也调试一下你的音量大小。接通电话不要把问题或提示读出声来,那样会让你显得弱智。演播同伴如果除了你以外,还有其他播音员坐在其他演播室里,这时可不能为了显示你的礼貌而和他交谈几句。由于你无法知道其他播音员什么时候说完,你就无法知道什么时候该你开口说话。但是够资格的主持人会巧妙地防止几个人同时说话,又能保证节目中间不出现断档。对你来说,应该非常仔细地倾听主持人的话,只有听到他点了你的名字提问时,才是你说话的时候。索取报酬这样的播音一般是有偿的,既然你付出了时间和专业知识,就该得到回报。再说,不管有没有,问问总可以吧?语音建议节目中的杂音会使听众分心。法兰西斯·皮尔思是一名电台记者,还负责着公司员工的媒体技能培训,他列出了一张可能从麦克风里传出去的杂音:●首饰的叮当声;●金属钮扣的碰撞声;●拍桌子声;●弹钢笔套扣声;●纸张的唏里哗啦声;●手表的嘀答声;●用手抓着麦克风的噪声;●电台的电流声;●冰箱或空调的嗡嗡声;●猫啊狗啊的叫声,或者同事和家人的插话声。一则小故事一次CBC(加拿大广播电台)从多伦多打电话到伦敦找我,想听听我对某个有争议问题的看法,可他们总说电话里的声音效果不大好,问我是不是电话机的问题,又问我用的是不是普通的BT电话。没错啊,是BT电话呀,那问题出在哪呢?后来直到采访结束后,我才意识到原来是我太紧张了,以致于紧紧地抓着话筒,差点把它给捏碎了。提示在演播室里不要说骂人话,不要逞能。

Keil C51汉字显示的bug问题

Keil C51汉字显示的bug问题(0xFD问题) Keil C51汉字显示的bug问题 一、缘起 这两天改进MCU的液晶显示方法,采用“即编即显”的思路,编写了一个可以直接显示字符串的程序。如程序调用disstr("我是你老爸");液晶屏上就会显示“我是你老爸”。 二、问题 但是,花了1天多时间辛辛苦苦改好的程序后,却发现有些汉字显示有问题。比如: P1:在第一行显示“实时参数”,第二行显示“工作状态”,实际上“工作状态”却重复显示了,除了在正确的地方显示外,还在“实时参数”后显示了。 P2:"正"字后若有":",则都显示成乱码。如果后面没有":",则"正"字可正确显示,但是后面却显示了后面的一行字。 P3:"过"字总显示乱码; 三、求索 通过调试发现,上述汉字显示不正常的时候,是因为在字库中找不到匹配的汉字。可是,自建的字库中明明有这些汉字,而且"数","正"字在后面无字符的时候是显示正确的啊! 问题找了好久,怀疑传参类型不对,汉字查找可能溢出等,反复修改,总是无法解决问题,而且从现象来思考,都不应该是这些问题。 今日灵光一现:为什么不在传递字符串后显示该字符串的变量值呢? 经过详细研究,西文字符在传递时应该是ACSII值,一个字节,数值小于128;而汉字传递的是其机内码,分高低2个字节,2个字节都大于127,当然并小于256。 字符串传递参数值一显示,可不得了。其惊人之处有: 1."数","正","过"正确显示时其传参值为:0xca00,0xd500,0xb900;而其正确的机内码应该是:0xca fd,0xd5fd,0xb9fd。看来其低位字节被无情忽视。 2."数","正","过"单独显示正确,但是后面带一个字符或汉字就显示乱码了。如"正:"传参的值为:0xd53a,0x0000;"数 "传参的值为:0xca20,0x0000。而":"和" "的ASCII值恰好是0x3a,0x20,看来这几个汉字是叛变到西文字符中去了,机内码只有一个高位字节了。 3.将传参值直接赋给汉字显示函数,如"过"用"0xb9,0xfd"是显示不了的,只能用"0xb9,0x00"。 4.比较发现,显示不正常的"数","正","过"三个字的低位字节都是0xfd,而一直显示正确的"一二"等汉字机内码的低位字节都不是0xfd。 莫非keil跟0xfd有不共戴天之仇? 四、解决 天涯茫茫寻不到,无奈只有上百度。用"keil c51的汉字显示问题"一搜就找到组织了,泪奔啊。组织的力量大,很快就给出了让我这等底层开发者劳累辛苦的原因:这是万恶的keil存在的一个臭名昭著的bug!伟大的组织同时无私的提供了答案,而且还不止一种哦。以下是从某同志的blog中摘录: “解决方法两个: ①下个晓奇工作室出的补丁,自己搜一下。(https://www.360docs.net/doc/1213284550.html,/mcu/) ②用十六进制编辑软件如HexEdit打开c51.exe,搜索80FBFD,改为80FBFF即可。 c51.exe位置:Keil安装目录/keil/c51/bin/c51.exe” 赶紧拿起前辈们提供的武器,向keil 0xfd bug发起猛烈冲锋!…… 待我重新烧录好程序,轻轻的打开电源,液晶屏幕上的一个个汉字显示得整齐而又干净,整个世界清静了…………

keil教程5

其于Keil 的实验仿真板的使用 前面介绍了Keil 软件的使用,从中我们可以看到Keil 的强大功能,不过,对于初学者来说,还有些不直观,调试过程中看到的是一些数值,并没有看到这些数值所引起的外围电路的变化,例如数码管点亮、发光管发光等。为了让初学者更好地入门,笔者利用Keil 提供的AGSI 接口开发了两块仿真实验板。 这两块仿真板将枯燥无味的数字用形象的图形表达出来,可以使初学者在没有硬件时就能感受到真实的学习环境,降低单片机的入门门槛。图1是键盘、LED 显示实验仿真板的图,从图中可以看出,该板比较简单,有在P1口接有8个发光二极管,在P3口接有4个按钮,图的右边给出了原理图。 图2是另一个较为复杂的实验仿真板。在该板上有8个数码管,16个按键(接成4*4的矩阵式),另外还有P1口接的8 个发光管,两个外部中断按钮,一个带有计数器的脉冲发生器等资源,显然,这块板可以完成更多的实验。 一、实验仿真板的安装 这两块仿真实验板实际上是两个dll 文件,名称分别是ledkey.dll 和simboard.dll ,安装时只要根据需要将这两个或某一个文件拷贝到keil 软件的c51\bin 文件夹中即可。 二、实验仿真板的使用 要使用仿真板,必须对工程进行设置,设置的方法是点击Project->Option for Target ‘Target1’打开对话框,然后选中Debug 标签页,在Dialog :Parameter:后的编缉框中输入 -d 文件名。例如要用ledkey.dll (即第一块仿 真板)进行调试,就输入-dledkey ,如图3 所示,输入完毕后点击确定退出。编译、连接完成后按CTRL+F5进入调试,此时,点击菜单Peripherals ,即会多出一项“键盘LED 仿真板(K )”,选中该项,即会出现如图1 的界面, 键盘、LED 显示实验仿真板 图2 单片机实验仿真板

Keil C51汉字显示的bug问题

Keil C51 汉字显示的bug 问题 一、缘起这两天改进MCU的液晶显示方法,采用即编即显的思路,编写 了一个可以直接显示字符串的程序。如程序调用disstr(“我是你老爸”);液晶屏上就会显示我是你老爸。二、问题但是,花了1天多时间辛辛苦苦改好的程序后,却发现有些汉字显示有问题。比如:P1:在第一行显示实时参数,第二行显示工作状态,实际上工作状态却重复显示了,除了在正确的地方显示外,还在实 时参数后显示了。P2:”正”字后若有”:”,则都显示成乱码。如果后面没有”:”, 则”正”字可正确显示,但是后面却显示了后面的一行字。P3:”过”字总显示乱码; 三、求索通过调试发现,上述汉字显示不正常的时候,是因为在字库中找不到 匹配的汉字。可是,自建的字库中明明有这些汉字,而且”数”,”正”字在后面无 字符的时候是显示正确的啊!问题找了好久,怀疑传参类型不对,汉字查找可 能溢出等,反复修改,总是无法解决问题,而且从现象来思考,都不应该是这 些问题。今日灵光一现:为什么不在传递字符串后显示该字符串的变量值呢? 经过详细研究,西文字符在传递时应该是ACSII值,一个字节,数值小于128;而汉字传递的是其机内码,分高低2个字节,2个字节都大于127,当然并小于256。字符串传递参数值一显示,可不得了。其惊人之处有:1.”数”,”正”,”过”正确显示时其传参值为:0xca00,0xd500,0xb900;而其正确的机内码应该是:0xcafd,0xd5fd,0xb9fd。看来其低位字节被无情忽视。2.”数”,”正”,”过”单独显示正确,但是后面带一个字符或汉字就显示乱码了。如”正:”传参的值为: 0xd53a,0x0000;”数”传参的值为:0xca20,0x0000。而”:”和”“的ASCII值恰好是0x3a,0x20,看来这几个汉字是叛变到西文字符中去了,机内码只有一个高位字节了。3.将传参值直接赋给汉字显示函数,如”过”用”0xb9,0xfd”是显示不了的,只能用”0xb9,0x00”。4.比较发现,显示不正常的”数”,”正”,”过”三个字的低位

MDK5采用UTF-8提示(missing closing quote)错误解决

Options for Target 'Flash' -> C/C++ -> Misc Controls添加“ --locale=english” ..\UserApp\appGateway.c(258): error: #8: missing closing quote sprintf(pcStr,"%02d闃?鍖?:%s.寮€鏈?",ucDevId,pcString); ..\UserApp\appGateway.c(259): error: #18: expected a ")" }break; ..\UserApp\appGateway.c(259): error: #65: expected a ";" }break; ..\UserApp\appGateway.c(289): error: #8: missing closing quote sprintf(pcStr,"%02d闃?鍖?:寮€鏈?",ucDevId); ..\UserApp\appGateway.c(290): error: #18: expected a ")" }break; ..\UserApp\appGateway.c(290): error: #65: expected a ";" }break;

..\UserApp\appGateway.c: 2 warnings, 6 errors compiling appRfOokRece.c... compiling appWiredSecurity.c... ..\UserApp\appWiredSecurity.c(105): error: #8: missing closing quote strcpy(https://www.360docs.net/doc/1213284550.html,ame,"绱?鎬?姹?鍔?"); /* 鍚?绉?buf */ ..\UserApp\appWiredSecurity.c(106): error: #18: expected a ")" uiWriteAddr += tAppSecurity.tsWiredSize; /* 鏁?鎹?瀛?鏀?鍦?鍧€*/ ..\UserApp\appWiredSecurity.c(141): error: #8: missing closing quote strcpy(https://www.360docs.net/doc/1213284550.html,ame,"绱?鎬?姹?鍔?"); /* 鍚?绉?buf */ ..\UserApp\appWiredSecurity.c(142): error: #18: expected a ")" uiWriteAddr += tAppSecurity.tsWiredSize; /* 鏁?鎹?瀛?鏀?鍦?鍧€*/ ..\UserApp\appWiredSecurity.c: 0 warnings, 4 errors compiling appSecurity.c... compiling appWirelessTelecontrol.c... compiling appWirelessSecurity.c... ..\UserApp\appWirelessSecurity.c(115): warning: #870-D: invalid multibyte character sequence strcpy(https://www.360docs.net/doc/1213284550.html,ame,"绱?鎬?姹?鍔?1"); /* 鍚?绉?buf */ ..\UserApp\appWirelessSecurity.c(150): warning: #870-D: invalid multibyte character sequence strcpy(https://www.360docs.net/doc/1213284550.html,ame,"绱?鎬?姹?鍔?2"); /* 鍚?绉?buf */

MDK Keil 5软件小技巧

几乎所有玩ARM Cortex M单片机的坛友都是通过MDK Keil 5或者IAR环境进行单片机的程序开发的,俗话说工欲善其事必先利其器,我们天天都在用这个开发环境,那么,有些在MDK Keil 5中的实用功能小技巧,大家又知道多少呢? 1.并不是所有源文件(.c)都需要加进工程中,只需要添加必要的源文件即可。无论是什么开发环境,只要是C/C++的工程,工程编译时间的决定因素就是工程中的源文件,以STM32 HAL库的工程为例,单片机外设的驱动文件一般是【stm32fxxx_hal_xxx.c】的格式,里面有多少个这样的源文件,就代表这个工程启用了多少个STM32单片机的外设。我们可以做个对比: 我们使用STM32CubeMX生成一个工程,工程用到了外部高频、低频晶振、SPI1、USART1,CubeMX 自动生成的工程里面,源文件只有必要的十来个:

然后我们把一些不必要用到的源文件也加进去,我这里索性把CubeF1固件库里面的全部外设驱动都加进去了,甚至包括一些完全没有必要加进去的template.c模版:

可以看到,生成的Code大小差得非常远,我这里还是用ARMCCV6版本的编译器,还看不出前后两个工程的编译时间,如果是用ARMCCV5版本的,估计时间要差好几倍。实际上前后两个工程,实现的效果完全是一样的,那些原本没有必要加进去的源文件,除了浪费编译空间和编译时间以外,没有任何用处。 2.头文件(.h)可以随便加进工程中。在MDK的代码开发工程中,头文件是必不可少的。头文件在工程的作用是提供宏定义/常量、结构体声明、枚举量声明统一放置的地方、函数的声明(甚至可以直接把函数的实现写在头文件里面,没有任何问题)。在实际的开发过程中,经常要频繁修改宏定义,而传统MDK开发者的习惯一般是工程只添加源文件而不添加头文件,这样就使得修改宏定义变得非常麻烦了,我们应该摒弃这个习惯,把频繁使用的头文件加进工程中。 3.编译器版本选V6。在MDK 5.24和MDK 5.25中,有个非常重要的更新,那就是MDK开始逐步支持完善ARMCC_V6编译器了。在以前的5.20以下的版本中,时常听说大佬们有用ARMCC_V6编译器的,但大多都是放礼炮,按照例程走也是一大堆报错,真正能实现的没几个,而从5.24版本开始,MDK使用V6编译器一般不会再出现报错了。使用V6编译器的步骤: 1)添加cmsis_armcc_V6.h头文件进我们的工程中,并设置包含路径;

【教程】(KEIL)MDK5安装与JLINK问题解决方法(支持代码自动补全)

【教程】(KEIL)MDK5安装与JLINK问题解决方法(支持代码 自动补全) https://www.360docs.net/doc/1213284550.html,/9mcubbs/forum.php?mod=viewthre ad&tid=1050785MDK V5在10月8日发布,昨天终于没忍住装上使用了一下,尝了尝鲜。 安装和破解的方法相信各位高手都不在话下,实在不会的可以参考keil4的安装步骤,keil5 和keil4的安装没有的区别。KEIL4安装破解方法,MDK5同样可用:Keil4安装与破解.pdf (1.08 MB, 下载次数: 162) 破解方法和MDK以往的版本相同,使用以前的破解工具就能破解。 注册工具:KEIL注册机.rar (16.95 KB, 下载次数: 121)

在设置J-LINK的时候软件会强烈建议更新固件(下图)。更不更新都没什么影响,不过不更新的话就总会弹出提示。 部分用户在使用J-LINK下载或调试的时候会出现严重问题,提示所使用的J-LINK是盗版的(下图),之后软件会自动关闭,无法正常使用。但是使用有些J-LINK却不会出现这种情况。 当然,使用正版的J-LINK是不会出现这个问题的(大家都懂的)。那么为什么我们使用的J-LINK有些会出现这个问题有些却不会呢?这是因为J-LINK的OEM激活失效,无法通过软件的验证。MDK 4.72a的用户可以这么解决:将KEIL 文件夹下..\Keil\ARM\Segger目录下JLinkARM.dll这个文件用J-LINK驱动中..\SEGGER\JLinkARM_V408i目录下同名文件替换即可,便可以通过软件的验证。但是MDK V5这个方法无法解决问题(以后应该会有大牛能够找到文件替换的),只有换一个可用的码重新激活我们的J-LINK,

相关文档
最新文档