双字节除法
基于51单片机的高速公路测速系统和车牌识别分析

基于51单片机的高速公路测速系统和车牌识别分析添加时间: 2010-3-20 11:19:19 文章来源: 文章作者: 点击数:17688摘要鉴于高速公路限速牌不能很好地对司机起到警示作用的作用,本文设计了一套基于MCS-51单片机,包含光电探测装置和显示装置的电子屏幕。
它不仅能方便设置并显示该路段的限制速度,以完成普通电子限速牌的限速提示功能,同时能将测得的车速实时显示,并自动判断是否超速。
另外它低廉的造价和经计算证明较高的精度大大提高了它的可用性。
车辆牌照自动识别系统是近几年发展起来的基于图像和字符识别术的智能化交通管理系统,是目前国内外模式识别应用研究领域的一个热点。
本文对系统中区域提取、图像预处理、字符分割和字符识别等环节涉及的算法、设计做了一个比较详细的论述。
本文在图像预处理中重点介绍一种在图像获取阶段有目的定位关注的物体,讨论了灰度图像二值化的多种算法,利用它在原始图像形成的标识区域特性,在约束条件下,按照识别牌几何特征提出了一种特殊的二值化处理方法。
实验证明该图像识别系统具有较高的可靠性与稳定性,减小了进一步车牌识别中计算量大的问题,从而提高了车牌识别的准确性和快速性。
讨论了灰度图像二值化的多种算法基于数学形态学的图像去除噪声的方法。
基于数学形态学的图像去除噪声是通过对图像的开、闭操作有选择的去噪声。
可以去除直径小于字符笔划半径的孤立噪声点。
还详细地介绍了基于字符形态划分的字符识别方法。
基于字符形态划分的字符识别方法是在对数字字符结构进行充分分析的基础上,对基元检测,归纳字符形态特征,得到的快速字符识别方法。
关键词:光电检测;车速测量;单片机;电子限速牌;车辆牌照;图像处理;基元检测;字符识别基于51单片机的高速公路测速系统和车牌识别分析AbstractIn view of the highway speed limit unlicensed drivers should not very well serve as a warning to the role, this article has designed a single-chip based on the MCS-51, including the photoelectric detection devices and display devices of the electronic screen. It not only can easily set up and display the road speed limit in order to achieve common electronic speed limit signs prompt function, can be simultaneously measured real-time display of speed and automatically determine whether the speeding. In addition it is low cost and the higher the accuracy of calculations greatly enhance its usability. Vehicle License Plate Recognition system is developed in recent years based on the image and character recognition operation of the Intelligent Traffic Management System, the application of pattern recognition at home and abroad are currently a hot area ofresearch. In this paper, the system of regional extraction, image preprocessing, character segmentation and character recognition algorithm, such as aspect involved in the design to do a more detailed exposition. In this paper image pre-processing in the introduction of a focus at image acquisition phase has the purpose of positioning objects of concern, discussed the gray image binarization of a variety of algorithms, use it in the original logo image formation of regional characteristics, in binding conditions, identification card in accordance with the geometric characteristics of a particular binarization approach. Experiments prove that the image recognition system has high reliability and stability, further reduce the vehicle license plate recognition in the calculation of a large quantity of questions, thereby increasing the accuracy of license plate recognition and speed.Discussed the gray image binarization algorithm of multiple images based on mathematical morphology method to remove noise. Images based on mathematical morphology to remove the image noise is through the open and close operation has chosen to noise. Can remove the character strokes of a diameter less than the radius of the isolated noise points. Also detail the division of character-based form of character recognition methods. Morphological character-based division of Character Recognition on the figure are at a full analysis of character structure based on element detection, morphological characteristics summarized characters get Character Recognition Express.Key words:Photoelectric detection; speed measurement; Singlechip; electron speed licensing; vehicle license; image processing; motif detection; Character Recognition目录摘要................................................................................. (I)Abstract........................................................................... . (II)第1章绪论................................................................................. . (2)1.1 车牌字符识别研究课题的背景 (2)1.2 车牌字符识别研究的意义 (2)1.3 车牌字符识别研究的应用现状及发展 (3)1.4 本文主要内容.................................................................................第2章车牌图像预处理 (5)2.1 数字图像处理的相关介绍 (5)2.1.1 数字图像处理概念 (5)2.1.2 图像的数字化表示 (5)2.1.3 本文中图像处理所涉及的相关领域 (6)2.2 图像二值化................................................................................. . (6)2.2.1 彩色图像和灰度图像 (6)2.2.2 基于灰度的图像二值化 (7)2.2.3 图像二值化结果演示 (9)2.3 用数学形态学的方法去除噪声 (10)2.3.1 数学形态学的几种基本运算 (10)2.3.2 经开闭运算前后的图像对比显示 (16)2.4 单个字符图像的分割 (17)2.4.1 我国车牌的特点 (17)2.4.2 对所要识别的车牌的分析 (17)2.4.3 基于列扫描黑色像素积累的字符分割 (18)2.4.4 已经分割后的单个字符演示 (18)2.5 本章小结................................................................................. . (19)第3章基于字符形态划分的字符识别 (19)3.1 字符识别概述................................................................................3.1.1 目前字符识别的一些常规方法 (20)3.2 字符轮廓分析 (21)3.2.1 字符轮廓的划分 (21)3.2.2 字符四方向轮廓公式化表示 (21)3.3 字符轮廓的变化特征 (22)3.4 字符形态划分的结构基元 (22)3.4.1 字符结构基元划分原理 (22)3.4.2 字符形态划分方法的特点 (23)3.5 利用字符结构基元划分的字符识别原理 (24)3.5.1 基元的检测 (24)3.5.2 轮廓的统计特征 (25)3.5.3 用字符形态识别数字字符 (25)3.5.3.1 数字字符的特点 (25)3.5.3.2 数字字符的识别方法 (26)3.5.4 字符识别的matlab算法流程 (27)3.6 本课题整体流程 (29)3.6.1 对本课题流程的总体说明 (29)3.6.2 用MATLAB完成本课题的流程图 (30)3.7 基于字符形态划分的字符识别方法的特点和不足 (30)3.8 本章小节................................................................................. (31)结论................................................................................. . (32)参考文献................................................................................. (33)第1章绪论1.1 车牌字符识别研究课题的背景随着21世纪经济全球化和信息时代的到来,作为信息来源的自动检测、图像识别技术越来越受到人们的重视。
汇编语言指令大全.

字扩展指令 CWD(Convert Word to Double Word)
格式: CWD
功能: 将字扩展为双字长,即把AX寄存器的符号位扩展到DX中.
说明:
1. 两个字或字节相除时,先用本指令形成一个双字长的的被除数.
2. 本指令不影响标志位.
3. 示例: 在B1、B2、B3字节类型变量中,分别存有8们带符号数a、b、c,实现(a*b+c)/a运算。
2. AAA的调整操作
若(AL) and 0FH>9 或 AF=1,则调整如下:
(AL)<--(AL)+6,(AH)<--(AH)+1,AF=1,CF<--AF,(AL)<--(AL) and 0FH
AAD
未组合十进制数除法调整指令 AAD(ASCII Adjust for Division)
格式: AAD
在除法指令前对ax合十进制数进行调整以便能用div指令实现两个未组合的十进制数的除法运算其结果为未组合的十进制数商在al中和余数在ahaad指令是在执行除法div之前使用的以便得到二进制结果存于al然后除以oprd得到的商在al中余数在ah示例
AAA
未组合的十进制加法调整指令 AAA(ASCII Adgust for Addition)
3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.
4. 该指令对标志位的影响同ADD指令.
ADD
加法指令 ADD(Addition)
格式: ADD OPRD1,OPRD2
功能: 两数相加
说明:
1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数.
单片机浮点数计算

在单片机应用系统的数据处理过程中,经常会遇到小数的运算问题,如求解BCD的增量算式、线性化处理等。
因此,需要用二进制数来表示小数。
表示小数的方法一般有两种,定点数和浮点数。
定点数结构简单,与整数的运算过程相同,运算速度快。
但随着所表示数的范围的扩大,其位数成倍增加,给运算和存储带来不便,而且也不能保证相对精度不变。
浮点数的结构相对复杂,但它能够以固定的字节长度保持相对精度不变,用较少的字节表示很大的数的范围,便于存储和运算,在处理的数据范围较大和要求精度较高时,采用浮点数。
浮点数的概念常用的科学计数法来表示一个十进制数如l234.75=1.23475E3=1.23475×103在数据很大或很小时,采用科学计数避免了在有效数字前加0来确定小数点的位置,突出了数据的有效数字的位数,简化了数据的表示。
可以认为,科学计数法就是十进制数的浮点数表示方法。
在二进制效中,也可以用类似的方法来表示一个数,如1234.75=10011010010.11(二进制)=0.1001101001011×211一般表达式为N=S×2p在这种表示方法中,数值由四个部分组成,即尾数S及符号,阶码P及符号。
在二进制中,通过定义相应字节或位来表示这四部分,就形成了二进制浮点数。
二进制浮点数可以有多种不同的表示方法,下面是一种常见的三字节浮点数的格式:其中尾数占16位,阶码占6位,阶符占1位,数符占1位。
阶码通常用补码来表示。
在这种表示方法中,小数点的实际位置要由阶码来确定,而阶码又是可变的,因此称为浮点数。
1234.75用这种格式的浮点数表示就是:0000 1011 1001 1010 0101 1000用十六进制表示为1234.75=0B9A58H-1234.75=4B9A58H0.171875=043B00H-0.171875=443B00H三字节浮点数所能表示的最大值为1×263=9.22×1018能表示的最小数的绝对值为0.5×2-63=5.42×10-20其所表示的数的绝对值范围=(5.42×10-20~9.22×1018),由此可以看到,比三字节定点数表示的数的范围大得多。
二进制除法原理

二进制除法原理其实二进制除法和我们平时用竖式计算的10进制除法的原理是一样的,但是有一点要注意,就是计算机计算的结果是有限的,比如说一个16Bit数除以一个8Bit数,结果不能超过8Bit,否则按溢出处理。
所以在计算前先要判断结果会不会溢出,方法是用被除数的高8位和除数相减,如果大于等于0则认为是溢出:商大于等于0x100,任何一个8Bit数与0x100乘积的高8位只可能小于除数,例如一个16进制数0x12,乘以0x100的结果为0x1200,也就是说只有小于0x1200的除数除以0x12的商才不会超过8Bit。
例如:0x1200/0x12(结果为0x100) --> (0x12 - 0x12) = 0,溢出0x11FF/0x12(结果为0xFF) -->(0x11 - 0x12) < 0, 不会溢出计算方法:(0x0E8E/0x12)0000 1110 1000 1110 / 0001 00100001 1101 0001 1100假设商为0,商和被除数左移一位0001 0010___________________0000 1011 够减,上次假设的商为1,再假设本次商为0和被除数同时左移一位0001 0110 0011 10100001 0010___________________0000 0100 够减,上次假设的商为1,再假设本次商为0和被除数同时左移一位0000 1000 0111 01100001 0010___________________---- ---- 不够减,上次假设的商OK,再假设本次商为0和被除数同时左移一位0001 0000 1110 11000001 0010___________________---- ---- 不够减,上次假设的商OK,再假设本次商为0和被除数同时左移一位0010 0001 1101 10000001 0010___________________0000 1111 够减,上次假设的商为1,再假设本次商为0和被除数同时左移一位0001 1111 1011 00100001 0010___________________0000 1101 够减,上次假设的商为1,再假设本次商为0和被除数同时左移一位0001 1011 0110 01100001 0010___________________0000 1001 够减,上次假设的商为1,再假设本次商为0和被除数同时左移一位0001 0010 1100 11100001 0010___________________0000 0000 够减,上次假设的商为1,即1100 1111,移位8次,结束开始:判断是否溢出,溢出,设置溢出标志退出否则,继续循环计数器= 8循环开始:被除数带0左移一位被除数高8位和除数相减,不够减则检查循环次数否则用8为差替换被除数的高8位被除数最低位置1(即刚才假设的商应该为1)检查循环次数:循环计数器减1, 不为0则继续循环(跳到循环开始处) 否则, 清除溢出标志输出商结束。
功能双字节二进制有符号数除法(补码)(精)

(二)(11)标号:DIVS功能:双字节二进制有符号数除法(补码)入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
出口信息:OV=0时商在R2、R3中,OV=1时溢出。
影响资源:PSW、A、B、R1~R7 堆栈需求:5字节DIVS: LCALL MDS ;计算结果的符号和两个操作数的绝对值PUSH PSW ;保存结果的符号LCALL DIVD ;计算两个绝对值的商JNB OV,DVS1 ;溢出否?POP ACC ;溢出,放去结果的符号,保留溢出标志RETDVS1: POP PSW ;未溢出,取出结果的符号MOV R4,#0MOV R5,#0MDSE: JB F0,MDS2 ;用补码表示结果CLR OV ;结果为正,原码即补码,计算成功RETMDS: CLR F0 ;结果符号初始化MOV A,R6 ;判断第二操作数的符号JNB ACC.7,MDS1;为正,不必处理CPL F0 ;为负,结果符号取反XCH A,R7 ;第二操作数取补,得到其绝对值CPL AADD A,#1XCH A,R7CPL AADDC A,#0MOV R6,AMDS1: MOV A,R2 ;判断第一操作数或运算结果的符号JNB ACC.7,MDS3;为正,不必处理CPL F0 ;为负,结果符号取反MDS2: MOV A,R5 ;求第一操作数的绝对值或运算结果的补码CPL AADD A,#1MOV R5,AMOV A,R4CPL AADDC A,#0MOV R4,AMOV A,R3CPL AADDC A,#0MOV R3,AMOV A,R2CPL AADDC A,#0MOV R2,AMDS3: CLR OV ;运算成功RET(12)标号:SH2功能:双字节二进制无符号数开平方(快速)入口条件:被开方数在R2、R3中。
出口信息:平方根仍在R2、R3中,整数部分的位数为原数的一半,其余为小数。
影响资源:PSW、A、B、R2~R7 堆栈需求:2字节SH2: MOV A,R2ORL A,R3JNZ SH20RET ;被开方数为零,不必运算SH20: MOV R7,#0 ;左规次数初始化MOV A,R2SH22: ANL A,#0C0H ;被开方数高字节小于40H否?JNZ SQRH ;不小于40H,左规格化完成,转开方过程CLR C ;每左规一次,被开方数左移两位MOV A,R3RLC AMOV F0,CCLR CRLC AMOV R3,AMOV A,R2MOV ACC.7,CMOV C,F0RLC ARLC AMOV R2,AINC R7 ;左规次数加一SJMP SH22 ;继续左规(13)标号:SH4功能:四字节二进制无符号数开平方(快速)入口条件:被开方数在R2、R3、R4、R5中。
双字节除法

51单片机只是8位的,但有时候需要实现双字节除法,里面的指令只支持8位。
想来想去,只好用减法来实现了。
下面这个子程序是双字节除以双字节,商、余数结果都是双字节保存,可能有点消耗资源,但这样可以整合在一块。
;****************************************;函数名称:Div2Byte;功能描述:无符号数双字节除法;传入参数:R0R1被除数 R2R3除数;返回数据:R4R5商 R6R7余数;其他说明:比如双字节数R0R1,R0高字节 R1低字节;****************************************Div2Byte:mov R4,#0mov R5,#0 ;商赋初值零mov A,R0mov R6,Amov A,R1mov R7,A ;余数赋初值,保证商为零时余数正常Div2Byte_1:mov A,R1clr csubb A,R3 ;低字节相减mov R1,Amov A,R0subb A,R2 ;高位相减mov R0,Ajc Div2Byte_3 ;如果高字节都需要借位则退出循环clr cmov A,R5;为什么这里不直接使用INCR5add A,#1mov R5,Ajnc Div2Byte_2inc R4 ;商加一Div2Byte_2:mov A,R1mov R7,Amov A,R0mov R6,A ;更新余数LJMP Div2Byte_1Div2Byte_3:RET使用示范:16进制双字节数字 05D2H 除以 0105H,商是0005H,余数是00D2Hmov R0,#5Hmov R1,#0D2Hmov R2,#1Hmov R3,#5Hlcall Div2Byte则结果是R4:00H R5:05H R6:0 R7:D2H整体感觉这个程序有问题!!可能在计算简单的除法是可以得出结果,但是..... 下面这个更是让我........8051单片机双字节除法ORG 0000H;8051单片机双字节除法 071205MOV R7,#08H;初始化数据,r7和r6为被除数,r7为高位MOV R6,#05H;r5和r4为除数,r5为高位MOV R5,#03HMOV R4,#03HMOV R0,#00H;本次计算为用减法实现除法,r0为商的存储器LOOP: CLR CMOV A,R6MOV R2,A;暂存余数低位r2SUBB A,R4MOV R6,AMOV A,R7MOV R3,A;暂存余数高位r3SUBB A,R5MOV R7,AJC OVER;如果r7r6小于r5r4则跳转到结束INC R0AJMP LOOPOVER: NOP;r3和r2为余数r3为高位END有破绽!!下面这个只能说貌似正确;=================================================; Division for three-byte data;; 2008_05_08;================================================= ORG 0000HAJMP MAINORG 0030HMAIN:MOV 77H,#0FHMOV 78H,#42HMOV 79H,#40HMOV 7AH,#00HMOV 7BH,#03HMOV 7CH,#0E8HLCALL DIV_MBSJMP MAIN;================================================= ; DIVISION FOR THREE-BYTE DATA; DIVIDEND FROM 77H&78H&79H; DIVISOR FROM 7AH&7BH&7CH; QUOTIENT TO 77H&78H&79H; 2008_05_08 BY SZCKIC;================================================= DIV_MB: MOV 7DH,#00HMOV 7EH,#00HMOV 7FH,#00HMOV R7,#18HNEXTBIT:CLR CMOV A,79HRLC AMOV 79H,AMOV A,78HRLC AMOV 78H,AMOV A,77HRLC AMOV 77H,A;Arithmetical complimentMOV A,7FHRLC AMOV 7FH,AMOV A,7EHRLC AMOV 7EH,AMOV A,7DHRLC AMOV 7DH,AMOV 5AH,7DHMOV 5BH,7EHMOV 5CH,7FHMOV 5DH,7AHMOV 5EH,7BHMOV 5FH,7CHLCALL TDECJNC UPDATEDJNZ R7,NEXTBITTMPRETUPDATE: INC 79HMOV 7FH,5CHMOV 7EH,5BHMOV 7DH,5AHDJNZ R7,NEXTBITTMPRETNEXTBITTMP:LJMP NEXTBIT;================================================= ; Subtracter for three-byte data;================================================= TDEC: CLR CMOV A,5CHSUBB A,5FHMOV 5CH,AMOV A,5BHSUBB A,5EHMOV 5BH,AMOV A,5AHSUBB A,5DHMOV 5AH,ARET。
单片机多字节加减乘除法程序

单片机多字节加减乘除法程序文章长度[6790]加入时间[2007-8-14]更新时间[2012-6-12 18:04:14]级别[0][评论][收藏]一种实用的单片机多字节除法算法一种实用的单片机多字节除法算法在单片机的实际应用中,除法运算是比较常见的一种运算。
以MCS-51单片机为例,虽然它提供了除法指令,但只能进行单字节除以单字节的运算,如果要进行多字节的除法运算,就得自己设计算法。
目前,许多资料上都介绍了四字节除以二字节的算法,但它们主要有以下几点不足:1.只能求出商,不能求出余数;2.在被除数高二位大于除数时,不能进行运算;3.商只有两个字节。
例如,被除数是0FFFFFFFFH,除数是0004H时,商数应该是3FFFFFFFH,余数是0003H。
但是,用以前的算法是无法进行运算的。
在实际运用中,参与运算的数是任意的,有时需要求出余数,有时商数要求有四个字节,因此,以前的算法在实际应用中受到了很大的限制。
为了满足实际运用中的需要,我设计了一套新的四字节除以二字节的算法,克服了上述算法中的缺点,可以适合广泛的实际需要。
下面以MCS-51汇编语言为例进行说明。
该算法增加了两字节的余数单元,并把被除数单元用来存放商数。
运算时,首先判断除数是否为零,若为零时,则设溢出标志为1,然后退出。
若除数不为零,则采用移位相减法进行运算。
首先,把进位位和余数单元清零。
再将进位位、余数单元和被除数单元按顺序首尾相连,逐位进行向左循环移位(如图示),共移位32次。
每移位一次,余数单元都 C (H L)(HH HL LH LL) 进位位余数单元被除数单元和除数作一次减法运算,若够减,余数单元内容更新为两者之差,并且将被除数最末一位置为1;若不够减,则余数单元内容保持不变,且将被除数最末一位置为0。
判断是否够减的方法是:在作减法之前,先保存进位位,再看作完减法后的进位位。
仅在作减法之前进位位为0,并且作减法之后进位位为1时判为不够减,其余情况均视为够减。
双字节的加法,减法,乘法,除法

MOV R1,A
MOV A,R4
MOV B,R5
DIV1: SETB FO;置溢出标志
RET
SUBB A,R6
JNC DIV1;被除数高位字节大于除数,转溢出处理
MOV B,DIV1;无溢出执行除法,置循环次数
MOV B,#16;被除数向左移一位,低位送零
DDIV2: CLR C
MOV A,R6
ADDC A,R4
MOV R6,A
MOV A,R5
MOV R3,A
MOV A,R6
MUL AB;R5*R4
ADD A,R1;第三次乘积低位加R5暂存R6
XCH A,R4
XCH A,B
ADDC A,R1;第三次乘积高位加R5存R5
XCH A,R3;低位→R7,R7→A准备乘数
MOV R1,B;高位暂存R1
MOV B,R6
MUL AB;R6*R3
ADD A,R1;乘积低位加上一乘积高位暂存R4
MOV R1,A
MOV FO,C;保存进位位
MOV A,R6
MUL AB;R6*R4
ADD A,R1;第四次乘积低位加R5存R5
MOV R1,A
RLC A
MOV R1,A
XCH A,R2
RLC A
XCH A,R2
MOV FO,C;保护移出的最高位
CLR C
CLR A
MOV ACC.0,C
MOV C,FO
ADDC A,B;第四次乘积高位加低位来的进位后存于R4
MOV R2,A
RET
MOV R2,A
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
双字节除法
用移位指令求两数的商,看不懂得原理,单片机老师只说了三个字‘不知道’
题目出自北航单片机原理及接口技术,李朝青版。
102页,麻烦解释一下其数学原理,谢谢啦
题目:编写双字节除法(16位除八位)
解:将被子除数放于(R6)(R5)中,除数放于(R4)中。
在程序运行中,(R5)保存被除数低们和商,(R6)保存余数,设07H存放中间标志位,程序执行完后,(R5)为商,(R6)为余数,其程序如下:
DV:MOV R7,#08H
S0:CLR C
MOV A ,R5
RLC A
MOV R5,A
MOV A ,R6
RLC A
MOV 07H,C
CLR C
SUBB A,R4
JB 07H,S1
JNC S1
ADD A,R4
SJMP S2
S1:INC R5
S2:MOV R6,A
DJNZ R7,S0
RET
可以仿照十进制的除法来理解。
只不过商的每一位只是0或1,也就是说先用高位的被除数减去除数,结果只有两种:1,高位大于被除数(商1);2,高位小于被除数(商0).没有十进制那麽多的情况,所以每往左移一位都可以直接用减法。
而上面的算法只不过是通过移位把商放在R5的后面了,左移八次后正好商全部都在R5中,而余数都移到R6中了。