基于单片机的数制转换算法设计

基于单片机的数制转换算法设计
基于单片机的数制转换算法设计

第27卷第4期河北工业科技

Vo l.27,N o.42010年7月

H ebei Journal o f Indust rial Science and T echnolo gy

July 2010

文章编号:1008 1534(2010)04 0229 03

基于单片机的数制转换算法设计

柏 磊1,龙 涛2

(1.石家庄宝石电子集团有限责任公司,河北石家庄 050035;2.河北省电子信息技术研究院,河北石家庄 050071)

摘 要:从数制转换的基本原理出发,分析了二进制数与十进制数之间的相互关系,并依此推出了将二进制数转换为十进制数的方法;在此基础之上,以8位二进制数转换成3位十进制数为例,探讨了实现这一转换算法的详细过程。关键词:二进制数;十进制数;转换;BCD 码中图分类号:TP335 文献标志码:A

Design of the numerical system conversion algorithm

for the single chip microcomputer

BAI Lei 1,LON G Tao 2

(1.Shijiazhuang Baoshi G ro up Co rpor ation L imited,Shijiazhuang H ebei 050035,China; 2.H ebei Electr onic and Infor mation T echno lo gy A cademy,Shijiazhuang Hebei 050071,China)

Abstract:T his paper ana lysed the mutual relatio nship betw een binar y number and decimal number based on the basic principle

of numer ical sy stem conver sion.T he method o f conver ting binary number to decimal number is obtained.A n ex ample of conver ting 8bit binary number to 3bit decimal number based o n the method is put fo rw ard.

Key words:binary number;decimal number ;conver sion;BCD co de

收稿日期:2010 04 01责任编辑:陈书欣

作者简介:柏 磊(1962 ),男,北京人,工程师,主要从事单片机开发及自动控制方面的研究。

1 转换原理

十进制数N 和用于表示它的m 位二进制数间的关系如式(1)所示[1]

:N =

i=m-1

D i 2i =D m -1 2m -1+D m -2 2m-2+ +D i 2i

+ +D 1 21

+D 0 20

(1)

式(1)中D i 是二进制数的第i 个位值,取值为1或0,而2i

是第i 个位的权,权是十进制数,其值为i 个2连乘的积。式(1)表明:将m 位二进制数的每个位值与其权相乘后得到m 项乘积,再将这m 项乘积相加,其和便是对应的十进制数;然而,这m 项乘

积中只有位值为1的乘积项有效,且乘积项等于其权,因为D i 2i

=1 2i

=2i

,而位值为0的乘积项无效,因为D i 2i =0 2i =0;所以,式(1)中十进制数N 是由那些位值为1的权相加而来的。由此得出:从二进制数的最高位((m -1)位)开始,依次检测每一位的位值,如果为1,则将其权的个位、十位、百位 的值分别累加到对应的存储器中(同时累加低位向高位的进位);如果位值为0,则忽略其权,如此操作直到最低位(0位)为止,最后将存储的这些个位、十位、百位 的值从高位到低位排列起来便得到对应的十进制数,由此完成数制的转换。然而,上述的这些操作显然是将十进制数的0-9代码直接放在存储器中,但是计算机无法直接存放0-9字符,所以还得借用0和1的组合来间接表示0-9字符,这种组合仍是一种二进制编码,但却表示十进制数,故称为二 十进制编码,常用的有BCD 码,它

们与0-9字符的对应关系如表1所示。

表1 对应关系表

T ab.1 Co rr esponding r elatio n

十进制字符0123456789 BCD码0000000100100011010001010110011110001001

可见,在计算机内部,二进制转换为十进制数其实就是将二进制数转换成表示十进制数的二进制编码,具体地说就是将二进制数转换成BCD码。转换过程需要累加运算,而且是BCD码的累加运算,因此需要BCD码的运算规则。

2 转换算法

2.1 确定字长

需转换的数据长度(字长)应根据实际需要由编程者设定,字长确定后,转换后的数值范围及权也随之确定,例如,笔者设定字长m=8位,按式(1)算出: (11111111)2=1 27+1 26+1 25+1 24+

1 23+1 22+1 21+1 20=

(128+64+32+16+8+4+

2+1)10=(255)10。(2)式(2)表明:8位二进制数可转换成十进制整数的范围是0~255,各位的权由高到低依次是128, 64,32,16,8,4,2,1。

2.2 转换步骤

以8位二进制数为例,见图1。

图1 主流程

F ig.1 M a in f low cha rt

230河 北 工 业 科 技 第27卷

2.2.1 初始化

定义个、十、百位寄存器分别存放转换来的个、十、百位数;定义加数、和数寄存器分别存放累加运算的中间数据及进位值;定义转换寄存器存放待转换二进制数。2.2.2 转换过程

从最高位(第7位)开始依次判断待转换二进制数中每一位的位值。

1)当某个位值为0时,忽略该位的转换,直接跳到下一位。

2)当某个位值为1时,依据该位的权的大小,将权的各个位值以BCD 码的形式分别累加到对应的个、十、百位存储器中或个位、十位存储器中或个位存储器中,同时要累加从低位到本位的进位及本位向高位的进位。2.2.3 算法流程

由于是以8位二进制数的转换为例,故图1中在完成初始化后,首先从最高的第7位开始检测位值是否为1,如果是,则将第7位的权(128)中的8,2,1分别以BCD 码的形式依次累加到个、十、百位寄存器中,否则直接跳到下一位,即第6位继续检测,依此类推直到最后一位(第0位);各个位的累加过程是通过调用相应的加法流程实现的,例如第7位的权(128)中的个位!8?是通过调用个位加法流程累加到个位寄存器中的,同理,十位!2?及百位!1?也是分别通过调用十位及百位加法流程累加到十位及百位寄存器中的;个、十、百位加法流程的算法流程分别如图2、图3和图4

所示。

图2 个位加法流程

F ig.2 Sub for unit add

在3个流程中,个、十位加法流程都考虑了向高位的进位算法,

而百位加法流程由于不会产生进位

(本例中百位最大值为2),故没有考虑进位。在上述加法流程中,由于累加的都是BCD 码,所以都调

用BCD 码加法流程,BCD 码加法的运算规则如下。

1)若2个BCD 码之和等于或小于9(1001),则结果正确,不需要校正;

2)若2个BCD 码之和大于9,则本位要进行加6校正,并保存进位值。

根据以上规则并结合进位设计出的BCD 码加

法流程,如图5所示。

下面就以最高位权=27=128中个位数8为例,根据主流程图来简述一下将8累加到个位寄存器中的过程。

(下转第256页)

231

第4期 柏 磊等 基于单片机的数制转换算法设计

和圆柱度误差不大于其直径公差的1/2,表面粗糙度不大于0.4 m,如果缸筒内壁局部有很浅的磨擦划痕或点状伤痕,可用极细的砂条或抛光头研磨消除,缸筒内壁划痕较深时,可以采用刷镀技术进行修复,根据缸筒的材质选用相对应的材料刷镀。当坑填满后,用金相砂纸打磨好表面,再刷镀一层快速镍或半光亮镍,即可获得较好的刷镀表面。总之,在选择和确定修复工艺时应遵循!技术上可能、质量上可靠、经济上合理?的原则。

3 结 语

经过上述方法和措施处理后,彻底排除了故障,并防止了故障的再次发生。但是通过这次事件,反

映出操作、维修管理人员的素质还有待提高,尤其需

要加强润滑油知识和气压传动知识方面的教育和培训,从而提高他们对设备管理和维修的能力。参考文献:

[1] 宋学义.袖珍液压气动手册[M ].北京:机械工业出版社,1995.[2] 张群生.液压与气动[M ].北京:机械工业出版社,2006.[3] 李葆文.简明现代设备管理手册[M ].北京:机械工业出版社,

2004.

[4] 王尚兴.润滑油知识ABC[J ].中国汽车维修市场,2000(14):

46 47.

[5] 蒋小言.使用润滑油的八个误区[J].安全与健康:下半月,2008

(11):34.

(上接第231页

)

图5 BCD 码加法流程

F ig.5 Sub fo r BCD add

在图1中首先将8的BCD 码1000送入加数寄存器,然后调用个位加法流程,进入图2所示的个位加法流程后,将个位寄存器中的原值(初值为0)送入和数寄存器,接着调用图5所示的BCD 码加法流程,进入该流程后,首先将和数寄存器与加数寄存器的值相加,结果送和数寄存器保存,接着加数寄存器

清0,为保存进位值做准备,接下来进行BCD 码加法校正运算,如果此运算生成了进位值,则将其保存在加数寄存器中,然后结束BCD 码加法流程返回个位加法流程,返回后,将和数寄存器的值送回个位寄存器中保存,然后判断加数寄存器是否有向十位的进位,如果有,则调用图3所示的十位加法流程将该进位值累加到十位寄存器中。十位加法流程的操作与个位加法流程相似,但需要判断是否有向百位的进位(例如199+1=200的情况),如果有,还要调用图4所示的百位加法流程将十位向百位的进位加到百位寄存器中去,完成后逐级返回,最后退出个位加法流程,开始十位加法流程、百位加法流程等等,如此执行下去直到最后一位即第0位为止。

3 结 语

根据上述各流程图可写出程序代码(笔者以PIC 系列单片机为例),该程序在MPLAB IDE 集成开发环境下利用SIM 模拟器进行测试运行,证明完全正确,但程序过长,限于篇幅,程序在此省略。参考文献:

[1] 王爱英.计算机组成与结构[M ].北京:清华大学出版社,1995.

256

河 北 工 业 科 技 第27卷

单片机课程设计报告

《单片机原理及接口技术》课程设计题目:简易计算器设计 级:电子1547 名:苏丹丹、李静、齐倩 号:05号、17号、11号

导教师:张老师 间:2013年12月 西安航空学院电气学院

目录 一、选题的背景和意义-------------------1 1.1选题的背景-------------------------------------1 1.2选题的意义-------------------------------------1 二、总体设计-------------------------------1 2.1设计任务---------------------------------------1 2.2方案选择---------------------------------------1 三、硬件设计-------------------------------2 3.1 元器件名称--------------------------------------------------------2 3.2 计算器按键介绍--------------------------------------------------2 3.3硬件系统框图、单元电路--------------------------3 四、软件设计-------------------------------3 4.1 软件调试步骤-----------------------------------------------------3 4.2软件设计流程图---------------------------------------------------4 五、结束语------------------------------------5 六、参考文献--------------------------------5 七、附录---------------------------------------6

算法设计与分析习题

《算法设计与分析》习题 第一章算法引论 1、算法的定义 答:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。 通俗讲,算法:就是解决问题的方法或过程。 2、算法的特征 答:1)算法有零个或多个输入;2)算法有一个或多个输出; 3)确定性;4)有穷性 3、算法的描述方法有几种 答:自然语言、图形、伪代码、计算机程序设计语言 4、衡量算法的优劣从哪几个方面 答:(1) 算法实现所耗费的时间(时间复杂度); (2) 算法实现所所耗费的存储空间(空间复杂度); (3) 算法应易于理解,易于编码,易于调试等等。 5、时间复杂度、空间复杂度定义 答:指的是算法在运行过程中所需要的资源(时间、空间)多少。 6、时间复杂度计算: {i=1; while(i<=n) i=i*2; } 答:语句①执行次数1次, 语句②③执行次数f(n), 2^f(n)<=n,则f(n) <=log2n; 算法执行时间: T(n)= 2log2n +1 时间复杂度:记为O(log2n) ; 7.递归算法的特点 答:①每个递归函数都必须有非递归定义的初值;否则,递归函数无法计算;(递归终止条件) ②递归中用较小自变量函数值来表达较大自变量函数值;(递归方程式) 8、算法设计中常用的算法设计策略 答:①蛮力法;②倒推法;③循环与递归;④分治法; ⑤动态规划法;⑥贪心法;⑦回溯法;⑧分治限界法 9、设计算法: 递归法:汉诺塔问题兔子序列(上楼梯问题) 整数划分问题 蛮力法:百鸡百钱问题 倒推法:穿越沙漠问题

答:算法如下: (1) 递归法 汉诺塔问题 void hanoi(int n, int a, int b, int c) {if (n > 0) { hanoi(n-1, a, c, b); move(a,b); hanoi(n-1, c, b, a); } } 兔子序列(fibonaci 数列 ) 递归实现: Int F(int n) { if(n<=2) return 1; else return F(n-1)+ F(n-2); } 上楼梯问题 Int F(int n) { if(n=1) return 1 if(n=2) return 2; else return F(n-1)+ F(n-2); } 整数划分问题 问题描述:将正整数n 表示成一系列正整数之和,n=n1+n1+n3+… 将最大加数不大于m 的划分个数,记作q(n,m)。正整数n 的划分数 p(n)=q(n,n)。 可以建立q(n,m)的如下递归关系: 递归算法: Int q( int n, int m){ if(n<1||m<1) return 0; If((n=1)||(m=1)) return 1; If (n>=<==-+--+=11,1),()1,()1,(1),(1),(m n m n m n m n m m n q m n q n n q n n q m n q

单片机c语言设计试题答案

单片机C语言程序设计师试题 一、填空题 1、设X=5AH,Y=36H,则X与Y“或”运算为_________,X与Y的“异或”运算为________。 2、若机器的字长为8位,X=17,Y=35,则X+Y=_______,X-Y=_______(要求结果写出二进制形式)。 3、单片机的复位操作是__________(高电平/低电平),单片机复位后,堆栈指针SP的值是________。 4、单片机中,常用作地址锁存器的芯片是______________,常用作地址译码器芯片是_________________。 5、若选择内部程序存储器,应该设置为____________(高电平/低电平),那么,PSEN信号的处理方式为__________________。 6、单片机程序的入口地址是______________,外部中断1的入口地址是_______________。 7、若采用6MHz的晶体振荡器,则MCS-51单片机的振荡周期为_________,机器周期为_______________。 8、外围扩展芯片的选择方法有两种,它们分别是__________________和_______________。 9、单片机的内部RAM区中,可以位寻址的地址范围是__________________,特殊功能寄存器中,可位寻址的地址是____________________。 10、子程序返回指令是________,中断子程序返回指令是_______。 11、8051单片机的存储器的最大特点是____________________与____________________分开编址。 12、8051最多可以有_______个并行输入输出口,最少也可以有_______个并行口。 13、_______是C语言的基本单位。 14、串行口方式2接收到的第9位数据送_______寄存器的_______位中保存。 15、MCS-51内部提供_______个可编程的_______位定时/计数器,定时器有_______种工作方式。 16、一个函数由两部分组成,即______________和______________。 17、串行口方式3发送的第9位数据要事先写入___________寄存器的___________位。 18、利用8155H可以扩展___________个并行口,___________个RAM单元。 19、C语言中输入和输出操作是由库函数___________和___________等函数来完成。二、选择题 1、C语言中最简单的数据类型包括()。 A、整型、实型、逻辑型 B、整型、实型、字符型 C、整型、字符型、逻辑型 D、整型、实型、逻辑型、字符型 2、当MCS-51单片机接有外部存储器,P2口可作为 ( )。 A、数据输入口 B、数据的输出口 C、准双向输入/输出口 D、输出高8位地址 3、下列描述中正确的是()。 A、程序就是软件 B、软件开发不受计算机系统的限制 C、软件既是逻辑实体,又是物理实体 D、软件是程序、数据与相关文档的集合 4、下列计算机语言中,CPU能直接识别的是()。 A、自然语言 B、高级语言 C、汇编语言 D、机器语言 5、MCS-5l单片机的堆栈区是设置在( )中。 A、片内ROM区 B、片外ROM区 C、片内RAM区 D、片外RAM区 6、以下叙述中正确的是()。 A、用C语言实现的算法必须要有输入和输出操作 B、用C语言实现的算法可以没有输出但必须要有输入 C、用C程序实现的算法可以没有输入但必须要有输出 D、用C程序实现的算

计算机考试中各种进制转换的计算方法

二进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 所以,设有一个二进制数:0110 0100,转换为10进制为: 下面是竖式: 0110 0100 换算成十进制 第0位 0 * 20 = 0 第1位 0 * 21 = 0 第2位 1 * 22 = 4 第3位 0 * 23 = 0 第4位 0 * 24 = 0 第5位 1 * 25 = 32 第6位 1 * 26 = 64 第7位 0 * 27 = 0 + --------------------------- 100 用横式计算为: 0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100 0乘以多少都是0,所以我们也可以直接跳过值为0的位: 1 * 2 2 + 1 * 2 3 + 1 * 25 + 1 * 26 = 100 2.2 八进制数转换为十进制数 八进制就是逢8进1。 八进制数采用 0~7这八数来表达一个数。

八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方…… 所以,设有一个八进制数:1507,转换为十进制为: 用竖式表示: 1507换算成十进制。 第0位 7 * 80 = 7 第1位 0 * 81 = 0 第2位 5 * 82 = 320 第3位 1 * 83 = 512 + -------------------------- 839 同样,我们也可以用横式直接计算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839 结果是,八进制数 1507 转换成十进制数为 839 2AF5换算成10进制: 第0位: 5 * 160 = 5 第1位: F * 161 = 240 第2位: A * 162 = 2560 第3位: 2 * 163 = 8192 +

STC12C5A60S2单片机课程设计报告

一、课程设计基本情况介绍 1.1课程设计的基本目的与任务 本课程设计旨在驾驭本专业学生理论指导实践能力以及电子产品工程设计与开发能力。本实践课所要达到的主要目的是: 1、通过本次课程设计,是对学生综合能力的检,提高学生综合运用专业知识,强化单片机 应用系统设计与防震能力。 2、本次课程设计是在生产实习所完成的“单片机核心板+电子钟模块+MP3模块+RFID模块+无线传输模块+GPS模块+脉搏传感模块”的基础上设计该硬件系统的工作程序。 1.2课程设计的基本内容 1、在生产实习设计单片机硬件系统的基础上,设计相应的应用软件系统。 2、在LCD1602上显示学号程序设计。 3、基于DS1302的实时时钟软件设计。 4、基于DS18B20的温度测量软件设计。 5、基于TL1838A的红外遥控解码软件设计。 6、设计应用软件系统框图和流程图,完成所设计软件的调试。 1.3课程设计的教学要求 1、通过资料查阅及学习了解单片机应用系统的软件设计方法及单片机编程、软硬件联机调 试技巧。 2、独立设计并编写下列应用程序: (1)LCD1602学号显示程序; (2)DS1302实时时钟程序; (3)DS18B20温度测量程序; (4)TL1838A红外遥控解码程序; 3、独立完成所设计程序与硬件系统的联机仿真。 二、整机系统框图(硬件、软件) 该设计方案是以STC12C5A60S2单片机为核心,采用LCD液晶屏幕显示模块、实时时钟模块、温度测量模块、红外遥控解码等模块所构建的系统,能在LCD1602液晶屏上显示当前的日期(年、月、日)、时间(时、分、秒)数据、当前环境温度值和红外遥控解码值。用户可通过遥控器或单片机核心板上的按键来进行日期和时间的设置。本系统设计大部分功能由软件来实现,电路简单明了,系统稳定性也得到大大提高。 1、总体硬件设计框架图: 2、总体软件设计框架图 /////// 三、整机硬件电路原理图(见99SE图) 1、核心板电路原理图 2、蜂鸣器驱动电路 3、按键电路 4、单片机复位电路 5、LCD1602液晶显示电路 6、电子钟模块接口电路 四、软件系统设计思想 //////////// 五、系统软件资源分配表(调试程序、工作程序) ////////////// 六、显示学号的调试程序流程图、程序源代码

程序设计竞赛常用算法

常用算法设计方法 要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个算法,然后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法数据结构是程序的两个重要方面。 算法是问题求解过程的精确描述,一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任务和它们被执行的顺序。计算机按算法指令所描述的顺序执行算法的指令能在有限的步骤内终止,或终止于给出问题的解,或终止于指出问题对此输入数据无解。 通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。 算法设计是一件非常困难的工作,常用的算法设计方法主要有迭代法、穷举搜索法、递推法、递归法、贪婪法、回溯法、分治法、动态规划法等。 一、迭代法 迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:(1)选一个方程的近似根,赋给变量x0; (2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0; (3)当x0与x1的差的绝对值还大于指定的精度要求时,重复步骤(2)的计算。 若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。上述算法用C程序的形式表示为: 【算法】迭代法求方程的根 { x0=初始近似根; do { x1=x0; x0=g(x1); /*按特定的方程计算新的近似根*/ } while ( fabs(x0-x1)>Epsilon); prin tf(“方程的近似根是%f\n”,x0); } 具体使用迭代法求根时应注意以下两种可能发生的情况: (1)如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制; (2)方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败。 【举例】求方程X2-X-1=0的正根,误差<0.05 解:(1)建立迭代公式 由于X=X2-1

简易信号发生器单片机课程设计报告

课程设计(论文)任务书 电气学院电力系统及其自动化专业12(1 )班 一、课程设计(论文)题目:简易信号发生器设计 二、课程设计(论文)工作自 2015年1 月12 日起至2015 年 1月16 日止。 三、课程设计(论文) 地点:电气学院机房 10-303 四、课程设计(论文)内容要求: 1.课程设计的目的 (1)综合运用单片机原理及应用相关课程的理论知识和实际应用知识,进行单片机应用系统电路及程序设计,从而使这些知识得到进一步的巩固,加深和发展;(2)熟悉和掌握单片机控制系统的设计方法,汇编语言程序设计及proteus 软件的使用; (3)通过查阅图书资料、以及书写课程设计报告可提高综合应用设计能力,培养独立分析问题和解决问题的能力。 2.课程设计的内容及任务 (1)可产生频率可调的正弦波(64个点)、方波、锯齿波或三角波。 (2)显示出仿真波形。 (3)通过按键选择输出波形的种类。 (4)在此基础上使输出波形的幅值可控。

3.课程设计说明书编写要求 (1)设计说明书用A4纸统一规格,论述清晰,字迹端正,应用资料应说明出处。(2)说明书内容应包括(装订次序):题目、目录、正文、设计总结、参考文献等。应阐述整个设计内容,要重点突出,图文并茂,文字通畅。 (3)报告内容应包括方案分析;方案对比;整体设计论述;硬件设计(电路接线,元器件说明,硬件资源分配);软件设计(软件流程,编程思想,程序注释,) 调试结果;收获与体会;附录(设计代码放在附录部分,必须加上合理的注释)(4) 学生签名: 2015年1月16 日 课程设计(论文)评审意见 (1)总体方案的选择是否正确;正确()、较正确()、基本正确()(2)程序仿真能满足基本要求;满足()、较满足()、基本满足()(3)设计功能是否完善;完善()、较完善()、基本完善()(4)元器件选择是否合理;合理()、较合理()、基本合理()(5)动手实践能力;强()、较强()、一般()(6)学习态度;好()、良好()、一般()(7)基础知识掌握程度;好()、良好()、一般()(8)回答问题是否正确;正确()、较正确()、基本正确()、不正确() (9)程序代码是否具有创新性;全部()、部分()、无() (10)书写整洁、条理清楚、格式规范;规范()、较规范()、一般()总评成绩优()、良()、中()、及格()、不及格() 评阅人:

AVR单片机Atmega48程序设计报告——比赛计时计分器

一、设计目的 本设计是基于ATMEGA48单片机的比赛计时计分器,利用8路7段LED数码管作为显示器件,采用3乘3矩阵式键盘作为输入,主要用于各种体育比赛记录分数,在此设计中共接入了2个四位一体7段LED数码管显示器,第一个显示器为一个倒数计时,第二个显示器为两队得分。 本设计中的倒数计时器时间为40分钟,可以进行开始计时、暂停计时的操作,分别通过S3_1、S3_2按钮实现,并通过蜂鸣器表示是否操作成功,时间通过1个四位一体7段LED 数码管显示器显示,前两位为分钟数,后两位为秒数。 本设计中可以对两队得分进行加1分、加2分、加3分操作,分别通过S1_1、S1_2、S1_3、S2_1、S2_2、S2_3按钮实现,并通过蜂鸣器的不同工作方式表示是否操作成功与所加的分值。得分通过1个四位一体7段LED数码管显示器显示,每队得分显示两位数,显示范围为0~99分。 本设计可以进行清零操作,清零后倒计时恢复40分钟,得分均为0,通过S3_3按钮实现,并通过蜂鸣器表示是否操作成功。 二、设计思路 本设计中由AVR核心板、数码管、蜂鸣器、3乘3矩阵键盘四部分组成。电路中PORT_B 端口连接数码管,显示八位,完成倒计时与记录每队得分,PORT_C与3乘3矩阵键盘相连,由按键控制完成初始化、开始与暂停计时以及加分的功能,PORT_D与蜂鸣器端口相连,根据所加得分的不同,开始与暂停计时,初始化,蜂鸣器有不同的应答方式。 本设计中的程序主要分为两个部分,即暂停计时时的显示与开始计时时的显示。暂停计时时与开始计时时都可以对每队加分,初始化。 三、设计电路图 图一接口模块电路

图二蜂鸣器电路 图三 8路7段LED数码管电路

排序常用算法设计

第8 章排序(算法设计)习题练习答案 13. 将哨兵放在R[n]中,被排序的记录放在R[0..n-1]中,重写直接插入排序算法。 解:重写的算法如下: void InsertSort(SeqList R) {//对顺序表中记录R[0..n-1]按递增序进行插入排序 int i,j; for(i=n-2;i>=0;i--) //在有序区中依次插入R[n-2]..R[0] 课后答案网https://www.360docs.net/doc/852171436.html, if(R[i].key>R[i+1].key) //若不是这样则R[i]原位不动 { R[n]=R[i];j=i+1; //R[n]是哨兵 do{ //从左向右在有序区中查找插入位置 R[j-1]=R[j]; //将关键字小于R[i].key 的记录向右移 j++; }while(R[j].key

KeyType key; //关键字域 OtherInfoType info; //其它信息域, struct node * next; //链表中指针域 }RecNode; //记录结点类型 typedef RecNode * LinkList ; //单链表用LinkList 表示 void InsertSort(LinkList head) {//链式存储结构的直接插入排序算法,head 是带头结点的单链表RecNode *p,*q,*s; if ((head->next)&&(head->next->next))//当表中含有结点数大于1 { p=head->next->next;//p 指向第二个节点 head->next=NULL; q=head;//指向插入位置的前驱节点 while(p)&&(q->next)&&(p->keynext->key) q=q->next; if (p) 课后答案网https://www.360docs.net/doc/852171436.html, {s=p;p=p->next;// 将要插入结点摘下 s->next=q->next;//插入合适位置:q 结点后 q->next=s; } }

运动控制-M法T法测速单片机程序设计

M法、T法测速单片机程序设计 摘要 本设计为M法、T法测速的单片机程序设计。使用STC89C52单片机作为控制器,使用该单片机的外部中断和定时器对编码器的输出的脉冲进行采样来计算出电机的转速。可以使用按键输入来调整M法、T法测速法中Z、Tc和Tt等参数以及测速方法的选择,以此来增强本设计的适应性。参数选择结果和电机转速计算结果均显示在LCD1602上。 关键字:STC89C52,M法、T法测速,LCD1602,电机转速 Ⅰ

Abstract This design as m, t-law velocity measurement of single-chip computer programming. Using STC89C52 single-chip computer as the controller, using the microcontroller's external interrupts and timers for encoder output pulse is sampled to calculate the speed of the motor. Can be adjusted using touchtone m, t law Velocimetry parameters such as z, Tt and Tc, as well as in speed measurement method of choice, as a way to enhance the adaptability of this design. Parameter selection and calculation of motor speed results are available on LCD1602. Keywords:STC89C52,M、T method, the LCD1602, Motor speed Ⅱ

进制的转换与计算方法

一、从十进制到二进制 如果有人问: 10+10=? 您可能会不加思索地回答:“等于20。”这样的回答对不对呢?可以说对,也可以说不对,这要进行具体的分析。说对,是因为我们平时都是用十进制,也即用逢十进一的方法来进行计算的。但如果从下面即将介绍的二进制,即逢二进一的观点来看,那么,上述回答则是错的。 我们的祖先,很早以前就创造了十进制,并将它作为计数的基础,这是因为人类有十个手指和十个脚趾这个天生的计算工具。几千年来,人类一直沿用十进制,这是因为在一般情况下,使用十进制比用其他进制要方便得多。 但是,在日常生活中,并不是全都采用十进制来计数的。例如,一年有十二个月,这是十二进制;一小时等于六十分钟,一分钟等于六十秒,这是六十进制;一公尺等于三市尺,这是三进制;鞋、袜都是以双来计算的,一双等于两只,这是二进制。等等。 计算机作为一种计算工具,采用哪一种进制计数呢?计算机是由大量的电子器件组成的,在这些电子器件中,电路的通和断、电位的高和低,用两种数字符号“1”和“0”分别表

示,容易实现。二进制的运算法则很简单,加法法则四个,乘法法则四个,即: 0+0=0,0+1=1,1+0=1,1+1=10; 0×0=0,0×1=0,1×0=0,1×1=1 考虑到运算简便、节省器件、容易实现、经济、可靠等因素,因此,在计算机内部通常用二进制代码来作为内部存储、传输和处理信息的计数方法。 二、十进制 十进制数计数的特点是“逢十进一”。为了表示十进制的某位数,需要10个数字0,1,2,3,4,5,6,7,8,9,就是说十进制的基数为10。 在十进制数中,不同数位上的数字所表示的值是不相同的。例如在十进制数163和1267中,数字6都出现在十位数的位置上,因此,这两个数中的数字6的值都是60。通常,我们把某一固定位置上的计数单位叫做位权,例如:个位数的位权为100=1 (基数10的0次方) 十位数的位权为101=10 (基数10的1次方)

单片机课程设计报告书模板

. .. . .. .. 西南科技大学 2011级微机原理与接口技术 课程设计报告 课题名称微机原理与接口技术 姓名 学号 院、系、部制造科学与工程学院 专业 指导教师 2014年月日

目录 一、绪言 (1) 二、系统设计 (1) 2.1系统整体流程图 (1) 2.2日历时钟的控制方案论证 (1) 2.3单片机的选择方案论证 (2) 2.4键盘选择方案论证 (2) 2.5显示模块的选择方案论证 (2) 2.6模块的选择方案论证 (2) 三、硬件电路设计 (2) 3.1日历时钟的控制电路图 (2) 3.2行列式键盘的设计 (3) 3.3数码管显示电路的设计 (3) 3.4蜂鸣器驱动电路的设计 (4)

3.5主要元器件选择 (4) 四、程序流程图 (5) 五、c语言程序设计 (5) 六、日历时钟的控制器仿真 (19) 6.1K e i l调试 (19) 6.2P r o t e u s调试 (19) 七、结束语 (20) 八、参考文献 (21) 1、绪言 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。电子时钟是现代社会中的主要计时工具之一,广泛应用于手机,电脑,汽车等社会生活需要的各个方面,及对时间有要求的场合。本设计采用AT89C51单片机作为主要核心部件,附以上电复位电路,时钟电路及按键调时电路组成。数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。

利用单片机AT89C52采用程序设计方法产生锯齿波

1 引言 本系统利用单片机AT89C52采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生10Hz—10kHz的波形。通过键盘来控制四种波形的类型选择、拨码开关控制频率的变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。 2设计方案 2.1系统硬件设计概述 经过考虑,我们确定方案如下:利用AT89C52单片机采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制四种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。 2.2、设计要求 1)、利用单片机采用软件设计方法产生四种波形 2)、四种波形可通过键盘选择 3)、波形频率可调

4)、需显示波形的种类及其频率 2.1.2方案设计与论证 1.2.1 信号发生电路方案论证 方案一:通过单片机控制D/A,输出四种波形。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。 方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波,再利用过零比较器转换成方波,积分电路转换成三角波。此方案,电路复杂,干扰因素多,不易实现。 方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的锯齿波、三角波、方波和正弦波四种周期性波形。但此方案成本高,程序复杂度高。 以上三种方案综合考虑,选择方案一。 1.2.2 单片机的选择论证 方案一:AT89C52单片机是一种高性能8位单片微型计算机。它把构成计算机的中央处理器CPU、存储器、寄存器、I/O接口制作在一块集成电路芯片中,从而构成较为完整的计算机、而且其价格便宜。 方案二:C8051F005单片机是完全集成的混合信号系统级芯片,具有与8051兼容的微控制器内核,与MCS-51指令集完全兼容。除了具有

利用单片机进行复杂函数计算的一种高精度算法

利用单片机进行复杂函数计算的一种高精度算法 作者:逯伟 来源:《现代电子技术》2013年第17期 摘要:单片机在移动设备中的应用越来越广泛,要求单片机具备的数据处理能力越来越强。但单片机的资源有限,如何让其能够解算复杂函数变得非常具有实际意义,也成为困扰许多专家的难题之一。介绍了一种在汇编环境下如何利用插值法与查表法相结合进行复杂三角函数运算的方法。利用这种算法可使三角函数的解算精度达到0.000 1,存储空间减小了97%,对有关内容进行了比较全面的阐述。此方法计算精度高、应用范围广、易掌握。 关键词:单片机;复杂函数计算;插值法;查表法 中图分类号: TN710?34 文献标识码: A 文章编号: 1004?373X(2013)17?0163?02 0 引言 在各种测量及控制中,通常都要求仪器体积小、便携,所以单片机在测量仪器中的应用日益广泛。现代工业仪器智能化要求越来越高,对复杂三角函数的计算量越来越大,以目前单片机所具有的资源和技术能力,要想达到上述要求,对技术人员的编程技巧要求是非常高的,工作量也非常庞大。基于以上原因,目前特别需要研究出一种对单片机资源要求低,易编程,又能保证很高计算精度要求的算法。 1 单片机处理数据的常见方法 单片机处理数据的方法有两种:浮点数和定点数。浮点数数据运算在汇编环境下编程复杂、运算量大,对内存容量要求高,且对单片机的运算速度有很高要求,这样普通51系列单片机无法满足复杂函数的计算。定点数在数据运算中运算量较小,编程简单,速度快,但是精度低,如何做到既不降低计算精度又能保证数据处理速度,成为复杂函数在51单片机使用技术中的一个难点。 2 基本原理 求解三角函数采用的是综合运用数学中的插值法和查表法。 单纯使用查表法求解三角函数值时,如果把0~90°每隔0.01°的函数值都存储在列表中,需要存9 000个函数值,一个函数值占两个字节,9 000个函数值就是18 000 B,如果精度要求更高所需的字节更大,程序非常庞大,还要占用很大的内存空间,一般51系列单片机的内存

单片机程序设计报告

单片机系统 课程设计 题目名称:基于89C52的智能交通灯设计 专业班级:测控技术与仪器1304班 学生姓名:田留阳 学号:201323030411 指导教师:郭广灵

单片机系统课程设计任务书

目录 1系统概述 (1) 1.1 课程设计目的 (1) 1.2 设计内容 (1) 1.3 实现目标 (1) 2 方案论证 (1) 2.1 电源提供方案 (2) 2.2 显示界面方案 (2) 3 硬件设计 (3) 3.1系统的原理方框图 (3) 3.2 主电路 (3) 3.3 I/O分配 (6) 3.4I/O接线图 (10) 3.5 元器件选型 (10) 4 软件设计 (11) 4.1 软件设计流程 (12) 4.2梯形图 (13) 4.3 交通灯定时器模块 (14) 5系统调试 (14) 5.1 软件调试 (14) 5.2 硬件调试 (15) 设计心得 (19) 参考文献 (20) 附件一 (21) 附件二 (22) 附件三 (23)

1 系统概述 1.1 课程设计的目的 (1)加强对单片机和汇编语言的认识,充分掌握和理解设计各部分的工作原理、设计过程、选择芯片器件、模块化编程等多项知识。 (2)用单片机模拟实现具体应用,使个人设计能够真正使用。 (3)把理论知识与实践相结合,充分发挥个人能力,并在实践中锻炼。 (4)提高利用已学知识分析和解决问题的能力。 (5)提高实践动手能力。 1.2 设计内容 本系统采用单片机AT89S52来设计交通灯控制器,实现了能根据实际车流量通过AT89S52芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示。本系统实用性强、操作简单、扩展功能强。 1.3 实现的目标 通过数码管显示实现各个路口车辆通过或者等待的时间,同时控制按键可以实现对紧急事件的处理。从而从一定程度上解决交通拥挤现象。 2 方案论证 本设计以单片机为核心,以LED数码管作为倒计时指示,根据设计的要求我们考虑了各功能模块的几种设计方案,以求最佳方案,实现实时显示系统各种状态,系统还增设了根据交通拥挤情况可分别设置主干道和次干道的通行时间,以提高效率,缓减交通拥挤。

算法设计与分析复习题目及答案 (3)

分治法 1、二分搜索算法是利用(分治策略)实现的算法。 9. 实现循环赛日程表利用的算法是(分治策略) 27、Strassen矩阵乘法是利用(分治策略)实现的算法。 34.实现合并排序利用的算法是(分治策略)。 实现大整数的乘法是利用的算法(分治策略)。 17.实现棋盘覆盖算法利用的算法是(分治法)。 29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。 不可以使用分治法求解的是(0/1背包问题)。 动态规划 下列不是动态规划算法基本步骤的是(构造最优解) 下列是动态规划算法基本要素的是(子问题重叠性质)。 下列算法中通常以自底向上的方式求解最优解的是(动态规划法) 备忘录方法是那种算法的变形。(动态规划法) 最长公共子序列算法利用的算法是(动态规划法)。 矩阵连乘问题的算法可由(动态规划算法B)设计实现。 实现最大子段和利用的算法是(动态规划法)。 贪心算法 能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题, 不能解决的问题:N皇后问题,0/1背包问题 是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。 回溯法 回溯法解旅行售货员问题时的解空间树是(排列树)。 剪枝函数是回溯法中为避免无效搜索采取的策略 回溯法的效率不依赖于下列哪些因素(确定解空间的时间)

分支限界法 最大效益优先是(分支界限法)的一搜索方式。 分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。 分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆) 优先队列式分支限界法选取扩展结点的原则是(结点的优先级) 在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法). 从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式. (1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。 (2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。 (最优子结构性质)是贪心算法与动态规划算法的共同点。 贪心算法与动态规划算法的主要区别是(贪心选择性质)。 回溯算法和分支限界法的问题的解空间树不会是( 无序树). 14.哈弗曼编码的贪心算法所需的计算时间为( B )。 A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 21、下面关于NP问题说法正确的是(B ) A NP问题都是不可能解决的问题 B P类问题包含在NP类问题中 C NP完全问题是P类问题的子集 D NP类问题包含在P类问题中 40、背包问题的贪心算法所需的计算时间为( B )

单片机程序设计方法总结.doc

单片机程序设计方法总结 程序设计是单片机开发最重要的工作程序设计就是利用单片机的指令系统根据应用系统即目标产品的要求编写单片机的应用程序其实我们前面已经开始这样做过了这一课我们不是讲如何来设计具体的程序而是教您设计单片机程序的基本方法不过在讲解之前还是有必要先了解一下单片机的程序设计语言这里的语言与我们通常理解的语言是有区别的它指的是为开发单片机而设计的程序语言如果 您没有学过程序设计可能不太明白我给大家简单解释一下您知道微软的VB VC 吗VB VC 就是为 某些工程应用而设计的计算机程序语言通俗地讲它是一种设计工具只不过这种工具是用来设计计 算机程序的要想设计单片机的程序当然也要有这样一种工具说设计语言更确切些单片机的设计 语言基本上有三类: 1 .完全面向机器的机器语言 机器语言就是能被单片机直接识别和执行的语言计算机能识别什么以前我们讲过--是数字0 或1 所以机器语言就是用一连串的0 或1 来表示的数字比如MOV A 40H 用机器语言来表示就是 11100101 0100000 很显然用机器语言来编写单片机的程序不太方便也不好记忆我们必须想办法 用更好的语言来编写单片机的程序于是就有了专门为单片机开发而设计的语言 2. 汇编语言 汇编语言也叫符号化语言它使用助记符来代替二进制的0 和1 比如刚才的MOV A40H 就是汇编语言 指令显然用汇编语言写成的程序比机器语言好学也好记所以单片机的指令普遍采用汇编指令来编写 用汇编语言写成的程序我们就叫它源程序或源代码可是计算机不能识别和执行用汇编语言写成的程 序啊怎么办当然有办法我们可以通过翻译把源代码译成机器语言这个过程就叫做汇编,汇编工作现在 都是由计算机借助汇编程序自动完成的不过在很早以前它是靠手工来做的. 值得注意的是:汇编语言也是面向机器的,它仍是一种低级语言每一类计算机都有它自己的汇 编语言比如51 系列有它的汇编语言;PIC 系列也有它的汇编语言微机也有它自己的汇编语言它 们的指令系统是各不相同的也就是说不同的单片机有不同的指令系统它们之间是不通用的,这就

单片机课程设计报告

文华学院 单片机原理及应用 课程设计报告 姓名: 学号: 学部(系): 专业年级: 指导老师: 2016年12月5日

目录 一标题 (1) 二设计内容,设计要求 (1) 三设计思路 (1) 四工作原理 (2) 五硬件设计 (3) 六软件设计(含流程图) (5) 七调试 (9) 八改进意见 (10) 九收获及体会 (10) 十源程序(含注释) (11)

一、标题 简易计时器——LED 数码管显示接口技术应用 二、设计内容,设计要求 1、目的 a.通过简易计时器的制作,熟悉LED 数码管与单片机的接口方式; b.定时/计数器、中断技术的综合应用; c.学会简易键盘的使用。 2、明确要完成的任务 a.利用按键构成键盘实现秒表的启动、停止与复位, b.利用LED 数码管显示时间。 c.进行简单的串行通信。 3、用单片机实现任务 a.如何运用单片机实现计时; b.如何显示时间; c.如何利用按键实施对秒表的控制。 d.定时器T0 或Tl 的定时时间作为时钟计时的基准 e.启动与停止定时器工作实现计时。 f.先用两个数码管动态显示时间,时间范围为0-60s g.用三个独立式按键实现秒表的启动、停止和复位功能。 h.A机发送,B机接收 三、设计思路 1、硬件设计思路 a.采用P0 口输出并联控制两个数码管的8 个段选控制端 b.用P2.0、P2.1分别控制两个LED 数码管的位选控制端 c.动态显示电路接法,LED 采用共阳极数码

d.三个按键采用独立式键盘接法, e.两个按键连接到外部中断INT0 、INT1 的输人引脚P3.2和P3.3 f.S4按键接到T1的外部脉冲输入引脚P3.5,以中断方式实现键盘输入状态的扫描 g.其中S2为启动按钮,S3为停止按钮,S4 清零按钮。 h.K1为复位键 2、程序设计思路 a.根据设计的总体要求划分出各功能程序模块,分别确定主程序、子程序及中断服务程序结构 b.对各程序模块占用的单片机资源进行统一调配 c.对各模块间的逻辑关系进行细化,优化程序结构 d.设计出各模块程序结构流程图 e.最后依据流程图编制具体程序 f.将整个程序划分为主程序、键盘扫描程序、秒计时程序三大模块 g.其中主程序除完成初始化外,主要由动态显示程序构成 h.秒计时程序由定时器0中断服务子程序构成 i.键盘扫描程序也由各中断服务子程序来实现 四、工作原理 1、计时表 原理图

VB程序设计的常用算法

VB 程序设计的常用算法 算法( Algorithm ):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100 个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0 的数的个数并打印出来。 本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0 的数的个数。即个位是1 的个数存放在x(1) 中,个位是2 的个数存放在x(2)中,...................... 个位是0的个数存放在x(10)。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100 个[0,99]范围内的随机整数,每行 1 0个打印出来 For i = 1 To 100 a(i) = Int(Rnd * 100) If a(i) < 10 Then Form1.Print Space(2); a(i);

相关文档
最新文档