查表程序设计
列车车次信息的查询与检索(程序设计报告 C++)
题目:列车车次信息的查询与检索专业学生姓名班级学号指导教师指导单位计算机软件教学中心日期2012年5月21日列车车次信息的查询与检索一、课题内容和要求用C/C++设计,能实现对列车车次的信息情况进行电脑管理,建立一个以文件为存储的管理信息系统;能实现对列车车次的信息进行查询与检索、添加、修改等功能,能对列车车次的情况进行记录和管理。
(1)具有简单的字符界面菜单;(2)可以添加和删除列车车次信息;(3)可以按列车车次的车次号、起点站、到达站、出发时间以及到达时间等信息进行查询;(4)程序中必须有面向对象/结构体的基本概念,比如类、对象/结构体类型的变量等;列车车次记录用一个文件存储,文件类型可以是文本文件或是二进制文件。
二、需求分析列车车次信息的查询与检索系统浏览添加查询修改删除退出1)提供可操作的主菜单:输出个菜单,用于显示若干个可选的功能选项。
根据用户输入的选项来运行不同的功能,运行不同的函数。
一次运行程序能进行多次选择执行不同的功能。
2)进行文本信息的显示:从指定的文件中读取所有的车次信息并显示。
这里文件是在编译时就已经指定好的、存在的文本,需设计者预先自己建立好。
3)添加一个新的车次信息功能:将用户希望添加的车次信息添加到文件末尾。
提示用户按照正确的格式输入。
能录入新数据添加到车次记录文件中,当录入了重复的车次时,则提示数据录入重复并取消录入;录入的新数据能按递增的顺序自动进行条目编号。
4)查找车次信息功能:以用户输入的车次号或者终点站进行查找对应的火车车次信息(通过比对数据进行对应的查找)。
并将此车次中所有数据的信息,如车次、出发时间、起点站、终点站、行驶时间、额定载量等信息输出。
5)进行车次信息的修改:根据用户提供的车次号,找到对应的数据,将内存中的信息重置。
内容应有用户输入,由一系列读写函数实现。
6)删除一个车次信息的功能:根据用户提供的车次号,找到对应的数据,在车次记录中的相应数据进行删除,并自动调整后续条目的编号。
查表获取电池电量百分比程序
查表获取电池电量百分比程序查表获取电池电量百分比程序的设计与实现引言- 电池电量是移动设备中非常重要的指标之一,用户需要准确地知道电池剩余电量,以便及时决定是否需要充电。
- 在移动设备中,通常使用查表方式获取电池电量百分比,本文将着重探讨这一程序的设计与实现。
1. 查表的原理- 查表法通过提前制作一张电量与电压之间的对应表,根据当前电池电压查表得到相应的电量百分比。
- 这样可以避免频繁地进行电压-电量转换计算,提高了程序的效率和准确性。
2. 查表程序的设计思路- 设计查表获取电池电量百分比程序,首先需要明确以下几个关键步骤:a. 收集电压和对应的电量数据,建立查表表格。
b. 获取当前电池电压。
c. 在查表表格中查找离当前电压最接近的电量百分比。
d. 根据查找结果,返回对应的电量百分比值。
3. 查表程序的具体实现- 电压和电量数据的收集:a. 使用专业设备,如万用表,测量不同电量下的电池电压。
b. 将测量结果记录下来,建立一张电量与电压的对应表格。
- 获取当前电池电压:a. 在移动设备中,可以通过系统接口获取电池电压信息。
- 查找最接近的电量百分比:a. 将当前电压与查表表格中的电压进行逐一比较,找出最接近的电压值。
b. 根据找到的电压值在表格中找到对应的电量百分比值。
- 返回电量百分比值:a. 将查找到的电量百分比值返回给调用者,供其进一步处理和展示。
4. 设计思考与个人观点- 查表获取电池电量百分比的程序设计在移动设备中已经得到广泛使用,其原理简单而高效。
- 这种方式能够准确地实时反映电池电量情况,为用户提供了便利。
- 通过查表法,可以避免频繁的计算,提高程序的响应速度和效率。
总结- 查表获取电池电量百分比的程序设计是基于电压和电量的对应关系,通过查表表格的方式实现电量百分比的准确获取。
- 这种程序设计方法简单高效,能够满足用户对实时电池电量展示的需求,并提高程序运行效率。
- 在移动设备中使用这种方法可以为用户提供更好的使用体验。
实验二 查表程序设计
实验二 查表程序设计【实验目的】1.掌握两种查表指令的使用方法。
2.理解查表操作中的几个概念——查表指针、表的首地址和偏移地址。
3.掌握单字节表和双字节表的查表方法。
【实验内容】1.数据区BUF1中存有N 个0-9的数,用查表指令MOVC A,@A+PC 编写程序,求0-9的平方值(使用BCD 码),且结果存放在BUF2中。
2. 数据区BUF1中存有N 个0-9的数,用查表指令MOVC A,@A+DPTR 编写程序,求0-9的立方值(使用BCD 码),且结果存储在BUF3中。
【实验原理与设计】1.数据区BUF1中0-9每个数的平方值均占用一个字节,用DB 指令建立0-9的平方表。
当使用MOVC A ,@A+PC 查表时,是以当前PC 作为基址,再加上偏移量A 作为查表指针,而其中的PC 值是指向查表指令的下一条指令的地址。
在查表过程中,每查一个数,都必须对A 进行修正,才能正确指向查表地址。
程序设计流程图参见图2-1、2-2。
2.使用MOVC A,@A+DPTR 查表时,是以DPTR 为基址,而DPTR 指向表头地址,加上距表头的偏移量A 作为查表指针。
由于0-9每个数的立方值需占用2个字节,所以程序中建立0-9的立方表要用DW 指令。
查0-9的立方值时,每个数乘2为该数立方值的高字节在表中的偏移值,乘2加1得到该数立方值的低位字节在表中的偏移2-1 求平方值查表主程序流程图2-2 查表子程序流程图值。
程序设计流程图参见图2-3。
2-2 求立方值查表主程序流程图【实验操作步骤】1.输入查平方表源程序,给定BUF1、BUF2和N的值(例如:30H、40H、0AH),编译装载通过后,进行下面的调试。
(1)打开程序存储器窗口,查找并记录数据表存放在哪里?(2)给定30H单元里的数据(≤9)(例如:05H),单步运行程序,观察和记录查表过程于表2-1中,并说明其中的数据都是什么。
表2-1(3)给定30H-39H中的数据(例如:0-9),连续运行程序,观察和记录查表结果并记录于表2-2中,根据查表结果,说明程序的正确性。
毕业论文-基于移动端的课程表查询软件的开发实现
安徽大学本科毕业论文(设计、创作)题目:基于移动端的课程表查询软件的开发实现学生姓名:XXX 学号: XXX院(系):计算机科学与技术专业:软件工程入学时间:2011 年9 月导师姓名:XXX 职称/学位:XXX导师所在单位:安徽大学计算机科学与技术学院完成时间: 2015 年 5 月基于移动端的课程表查询软件的开发实现摘要课程表在现代的教学工作中扮演着非常重要的角色。
它使学校能够合理安排教室、实验室和运动场等硬件资源,也能协调教师和学生之间的教学秩序。
在大学校园中,由于学生上课采用的是自主选课的方式,所以基本上每一位学生都会有各自不同的课程表。
而传统的教务系统课程表,由于一般是在PC网页端进行显示,无法满足课程表需要随时随地方便查看的使用需求。
结合当下智能手机的普及以及功能强大,使用手机实现大学课程表的查看具有非常大的实用意义。
本次毕业设计以安卓智能手机为运行平台,结合Java、PHP、数据库等技术,实现了一个可以在移动端查看课程表的软件程序。
关键词:课程表;智能手机;移动端;安卓;数据库Inquiry Curriculum Development Software Based on MobileTerminalsAbstractSyllabus plays a vital role in modern teaching practices. Not only does it allow educational facilities, such as classrooms, laboratories, playgrounds, etc., to be allocated in a rational way, but also it coordinates the teaching order between teachers and students. Since university students select courses and take classes in a self-directed way, their course arrangements usually vary. Therefore, university students need to check their curriculum schedules whenever and wherever it is required. However, traditional syllabuses in educational administrative systems cannot meet this situational demand because they are displayed on the PC side. Considering the current popularity and multi-function of smart phones, it is of significant importance to make university syllabuses checking available on cell phones. Based on Java, PHP, database and other techniques, this graduation project uses Android smart phone as an operating platform, attempting to develop software program through which the syllabuses are expected to be viewed on mobile terminals.Keywords: curriculum; smart phone; mobile terminal; android; database目录1 引言 (1)1.1 研究背景 (1)1.2 研究意义 (1)1.3 软件开发的目标 (2)1.3.1 实用性 (2)1.3.2 易用性 (2)1.3.3 可重复利用 (2)1.3.4 稳定性 (2)1.3.5 美观性 (2)1.4 软件设计开发的内容 (2)2 软件开发使用的开发工具及技术简介 (3)2.1 Java (3)2.2 JDK (3)2.3 eclipse (4)2.4 Android Development Tools(ADT) (4)2.5 Mysql数据库 (4)2.6 myeclipse (4)2.7 Axure RP (4)2.8 软件开发及运行环境 (5)3 软件可行性分析 (5)3.1 技术可行性 (5)3.2 操作可行性 (5)3.3 经济可行性 (5)3.4 法务可行性 (5)4 软件需求分析 (6)4.1 功能需求 (6)4.1.1 教务系统学号与密码验证 (6)4.1.2 自动获取课程表数据 (6)4.1.3 显示本周的整体课程表 (6)4.1.4 切换不同周次进行查看 (6)4.1.5 查看某一课程的详细信息 (6)4.1.6 本地缓存课程表数据 (6)4.3 安全性需求 (7)5 需求分析细化 (7)5.1 软件结构E-R图 (7)5.2 软件运行状态转换图 (8)6 对需求进行验证 (9)6.1 一致性 (10)6.2 现实性 (10)6.3 完整性 (10)6.4 有效性 (10)7 软件主要功能及使用过程流程图 (11)7.1 验证学生身份 (11)7.2 自动导入教务系统课程表 (11)7.3 查看周历课程表 (11)7.4 刷新课程表信息 (11)7.5 切换周次 (11)7.6 查看某一门课程的具体信息 (11)8 编码实现 (12)8.1 网络通信 (12)8.2 账号验证与登录 (12)8.3 获取课程表的实现 (13)8.4 课程表手机端的设计实现 (13)8.4.1 周历课程表 (13)8.4.2 课程详情 (13)8.4.3 客户端界面实现 (13)9 软件实现效果 (14)9.1 登录页面 (14)9.2 周历课程表页面 (15)9.3 周次切换操作 (16)9.4 课程具体信息 (17)9.5 刷新课程表功能 (18)10 软件功能性测试 (18)10.1 用户登录模块 (18)10.1.1 正常登录 (18)10.2 周历课程表功能模块 (19)10.2.1 切换周次 (19)10.2.2 显示课表 (19)10.3 课程表刷新功能 (19)10.3.1 在周历课程表界面下刷新 (19)10.3.2 在课程详情页面中进行刷新操作 (19)10.4 课程详情显示功能 (19)11 结束语 (20)主要参考文献: (21)致谢 (22)1 引言1.1 研究背景从2007年,第一款革命意义的智能手机(苹果iPhone)发布以来,手机的使用方式产生了翻天覆地的变化。
查表程序设计
例4.两个无符号数比较 例4-12 求符号函数的值。 例4-13 散转
例5 :求50H单元后30个数的累加和 例4-16 测试字符串长度的程序。 例4-17 50ms 延时程序 练习:写一个延时 10ms 的子程序。(钟频 12MHz )
4.3 汇编语言实用程序设计 -分支转移程序设计
(2)分支程序设计
1000H C A,40H A,41H LED0 P1.1
;清CY为零 ;取第一个数送A ;两数比较 ;CY=0,转至LED0 ;CY=1,(40H)<(41H),点亮P1.1 LED
SJMP FINISH ;跳转到结束
LED0: CLR P1.0 ;CY=0,40H≥(41H),点亮P1.0 LED FINISH: RET
2.多分支转移结构 程序的判别部分有两个以上的出口流向。
4.3 汇编语言实用程序设计 -分支转移程序设计
4.3 汇编语言实用程序设计 -分支转移程序设计
4.3 汇编语言实用程序设计 -分支转移程序设计
条件成立?
Y
N
N
程序段A
条件成立? Y
下条指令
程序段B
程序段A
K=0? N
K=1? N
K=2? N
开始
(40H)-(41H)
N CY = 0 ?
Y (40H)≥(41H)
P1.0灯亮
(40H)<(41H) P1.1灯亮
结束
图 两个无符号数比较流程图
4.3 汇编语言实用程序设计 -分支转移程序设计
方法1:使用SUBB指令,依据借位CY状态判断两个数的大小!
ORG CLR MOV SUBB JNC CLR
4.3 汇编语言实用程序设计
一个完整的源程序必备的四个要素:
C语言程序设计 第八章 查表
何谓查找表?查找表是由同一类型的数据元素(或记录)构成的集合。
由于“集合”中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的结构。
对查找表经常进行的操作:•1)查询某个“特定的”数据元素是否在查找表中;•2)检索某个“特定的”数据元素的各种属性;•3)在查找表中插入一个数据元素;•4)从查找表中删去某个数据元素。
查找表可分为两类:静态查找表仅作查询和检索操作的查找表。
动态查找表有时在查询之后,还需要将“查询”结果为“不在查找表中”的数据元素插入到查找表中;或者,从查找表中删除其“查询”结果为“在查找表中”的数据关键字是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。
若此关键字可以识别唯一的一个记录,则称之谓“主关键字”。
若此关键字能识别若干记录,则称之谓“次关键字”。
查找根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(记录)。
若查找表中存在这样一个记录,则称“查找成功”。
查找结果给出整个记录的信息,或指示该记录在查找表中的位置;否则称“查找不成功”。
查找结果给出“空记录”或“空指针”。
如何进行查找?查找的方法取决于查找表的结构。
由于查找表中的数据元素之间不存在明显的组织规律,因此不便于查找。
为了提高查找的效率,需要在查找表中的元素之间人为地附加某种确定的关系,换句话说,用另外一种结构来表示查找表。
9.1 静态查找表9.2 动态查找树表9.3 哈希表9.1静态查找表数据对象D :数据关系R :D 是具有相同特性的数据元素的集合。
每个数据元素含有类型相同的关键字,可唯一标识数据元素。
数据元素同属一个集合。
ADT StaticSearchTable {基本操作P:Create(&ST, n);Destroy(&ST); Search(ST, key);Traverse(ST, Visit()); } ADT StaticSearchTable构造一个含n 个数据元素的静态查找表ST 。
查表程序设计
查表程序设计在计算机编程的世界里,查表程序设计是一项非常实用且重要的技术。
它就像是我们日常生活中的字典,当我们需要查找某个特定的信息时,能够快速而准确地获取到。
首先,让我们来理解一下什么是查表。
简单来说,查表就是在一个预先准备好的数据集合中,通过特定的索引或者关键字,找到我们所需要的数据。
这个数据集合可以是一个数组、一个链表,甚至是一个复杂的数据结构,比如二叉树或者哈希表。
那么,为什么我们需要使用查表这种方式呢?想象一下,如果我们需要根据不同的输入值来计算一个复杂的函数结果,每次都重新计算的话,会耗费大量的时间和计算资源。
而如果我们事先将这些可能的输入值和对应的计算结果存储在一个表中,那么在需要的时候,只需要通过查找这个表,就能迅速得到结果,大大提高了程序的运行效率。
在设计查表程序时,第一步是确定表的结构和存储方式。
这取决于我们要存储的数据类型和数量,以及查找的频繁程度和效率要求。
例如,如果我们要存储的是一些固定的常量值,而且数量不多,那么一个简单的数组可能就足够了。
但如果数据量很大,而且需要频繁地进行插入、删除和查找操作,那么可能就需要使用更复杂的数据结构,如链表或者哈希表。
接下来,就是如何构建这个表。
这通常需要我们根据具体的问题和需求,将相关的数据按照一定的规则组织起来。
比如,如果是一个按照数值大小排序的表,我们可以使用二分查找算法来提高查找效率;如果是一个无序的表,可能就需要遍历整个表来查找。
在查找表中的数据时,算法的选择至关重要。
常见的查找算法有顺序查找、二分查找、哈希查找等。
顺序查找就是从表的开头依次比较每个元素,直到找到目标元素或者遍历完整个表。
这种方法简单直观,但效率较低,适用于小型的、无序的表。
二分查找则是针对有序表的一种高效查找算法,它通过不断将表中间的元素与目标元素进行比较,将查找范围缩小一半,直到找到目标元素。
哈希查找则是通过将关键字映射到一个特定的哈希值,然后在对应的哈希表位置进行查找,其查找效率通常很高,但需要处理哈希冲突的情况。
实验二 查表程序实现LED数字显示
实验二查表程序实现LED数字显示一、实验要求通过拨码开关表示16进制数0—F,利用LED数码管显示该数字。
包括硬件电路和程序设计。
二、实验目的理解8段LED数码管的显示原理和LED显示的转化方法,学习查表程序的设计。
三、实验原理图2-1 8段LED数码管显示原理和笔画分布由电路图2-2可以看出,这里需要通过传送指令将P1口拨码开关的状态读入累加器A,利用查表指令转换为LED数码管的显示笔画代码,再传送到P2口驱动数码管。
所谓显示代码就是根据该数字的笔画确定LED数码管中8个笔画段a—h中的哪些段点亮,如数字1要求点亮笔画b和c。
我们可以根据数字与笔画的对应关系列出各数字的笔画代码真值表如表2-1所示,在每个数字需点亮的笔画处填入1,不需要点亮的位填入0,然后转换为16进制数就是该数字的显示代码。
若采用共阳极LED,则由于是0点亮,显示代码也就不同,笔画真值表与表2-1相反。
显然,若各笔画连接的口线不同,显示代码也不同。
图2-2 通过LED数码管显示数字电路图表2-1 LED笔划显示真值表(共阴)有了代码表,还需要通过查表程序将数字转换为显示代码。
查表程序一般是将表格中数据顺序放置在程序存储器的某个区域中,形成一数据表。
程序中需要查表时,将表格首地址送入数据指针DPTR,即使DPTR指向表格首地址,在A中放入待查表格项的序号,例如要显示2,利用“MOVC A,@A+DPTR”指令,即以(A+DPTR)为地址,将数据表中第2字节的表格项数据5BH取出放入A,从而实现查得2的显示代码5BH,然后送端口P2驱动笔画段显示出数字2。
四、实验步骤1.在Proteus ISIS中设计硬件电路(参考图2-2)(1)选择电路元器件并放入原理图编辑区:单片机:AT89C52。
一位共阴极数码管:7SEG-COM-CAT-GRN。
8位拨码开关:DIPSWC_8。
接地:Ground(Terminal模型中)。
(2)参考图2-2完成原理图。
查表程序设计例题
查表程序设计例题(MOVC A,@A+DPTR; MOVC A,@A+PC)的应用西电出版社张毅坤《单片微型计算机原理与应用》P95~98例6:设有一巡检报警装置,需要对16路值进行比较,当每一路输入值超过该路的报警值时,实现报警。
要求编制一个查表子程序,依据路数Xi,查表得Yi的报警值。
解:Xi为路数,查表时按照O,1,2,…,15取值,故为单字节规则量。
表格依Xi顺序列表,仅存二字节报警值Yi,其表格构造见表3—4。
程序入口:(R2)=路数Xi。
程序出口:(R4 R3)=对应Xi的报警值Yi。
查表子程序如下:STAl:MOV A, R2 ;路数xi送ARL A ; Xi×2MOV R4, A ;暂存ADD A,#TABL(rel) ;加上表首偏移量MOVC A,@A+Pc ;查Yi第一字节 XCH A,R4 ;第一字节送R4ADD A,#TABL(rel)+1 ;形成第=字节表址MOVC A,@A+Pc ;取Yi第二字节MOV R3, A ;第二字节送R3RETTAB2:DW 050FH,OE89H,A695H,1EAAH ;报警值表 DW 0D9BH,7F93H,0373H,26D7HDW 2710H,9E3FH,1A66H,22E3HDW 1174H,16EFH,33E4H, 6CAOH上述查表程序中使用RL A使(A)乘2,这是由于DW定义的是双字节空间,为了保证指向正确的查表地址,所以要进行乘2处理。
另外,程序中使用MOVC A,@A+PC指令,使表格偏移不得超过255个字节。
当表格偏移大于255个字节时,应使用MOVC A,@A+DPTR查表指令。
例7:自变量xi为双字节规则量,函数值yi也为双字节数,对应xi依次存于表首地址为#TABL的表格中。
表格构造见表3—5。
编制一个查表程序,将查得的函数值yi存入R4、R3中。
解:入口:(R3R2)=由其它程序得到的xi规则量,即:xi=0000H,O0OlH,0002H,…出口:(R5 R4)=依据xi查得的函数值yi。
再谈查表程序的设计技术
A, # H 91 @ DP R 十^ T
扩展数据 衰蠢衰技术
在表 中元 素数 目太于 26的情况 5
下, 表中序号仅用累加器 A来表示是不够的 . 一般要用双字节 来表示表中序号 。这样 . 使用 MO C . V A @A+ P R指令查表 DT 时, 要用 D I P' R直接加 1 6位序号才能够 正确完成查表运算。 因 此 查表之前必 须进行 双字节地 址的加法运 算。磐程时 要注意
于 MO C指 令地址 的 一18一+17之内。并且 A中序号必须 V 2 2
进行地址偏移量的补偿 运算 , 这样才 能正确地完成查 表运算 。 扩展查衰技术 一般情况下 , 为
单片机程序设计中被广眨应用 , 每一个 单片机应用系统 的开发
者都要学会灵活地利用查表技 术解决实际问题
了使程序结构清晰 , 单片机应用程序
的地址分 配如 图 2 。散据表与程序在 存储器中是分开放置的, 因此数据 表 应当不受程序位置的限制 , 可以在程 序存储器 6 K地址范围 内任意安排。 4
在单片机中 , 表格具有 只读的性质 , 所以通 常将其 固化在
R M 中。常见 的表格有函散关 系表 、 O 数码 显示 笔划表 , 系统常 量表三种 。 醋数美 蕞衰 当某个散据处理算法非常 复杂 , 甚至根本没 有计算公式时 , 人们往往通过实验将函数关 系列戒一张表 , 并 将其固化在 R M中。如置度表等 。 O 数码量 示笔划衰 单片机 一般采用散码 管或液 晶数 码板 做显示输出设备。为了接需要显示 出各种数字碱符号 , 一般将
新填写。
(CB P )设计 中广泛使用 的一种 优秀软件 。在 学习使用 Po | r| e 9 19设计 B板时会 出现很 多同题 ,特别是对韧学者更 是 89 如此 ,如果不能解 决这些同题 设计 工作就 不能顺利地进行 下 去 。笔者根据多年的教学经验 , Po | 8 9 学 习过程 中易 对 rt 9 / 9 e 出现的一些 问题 、 因及其解决 办法作如下介绍。 耀
c语言查表法程序
查表法是一种常见的优化技术,通常用于通过查找预先计算并存储在表中的值来提高程序的性能。
以下是一个使用查表法的简单 C 语言程序的示例,该程序计算并打印正弦值:
在这个程序中:
•initSinTable函数初始化了一个包含 360 个角度对应正弦值的表。
•lookupSin函数接受一个角度作为输入,使用查表法返回对应的正弦值。
•main函数使用查表法计算并打印一些角度的正弦值。
这个程序的关键点是使用查表法避免了重复计算正弦值,而是通过事先计算并存储在表中的方式提高了效率。
这种技术在某些情况下可以显著提高程序的性能。
请注意,实际应用中可能需要考虑内存占用和表的精度等问题。
实验一、查表程序(MOVC A,@APC)
实验名称:一、查表程序日期:2011.4.24得分:同组人:(不填)指导教师:马惠兰一、实验目的1.熟悉Keil uvision3单片机仿真软件的使用方法。
2.熟练掌握单片机实验操作步骤。
3.熟练掌握用MOVC A , @A+DPTR和MOVC A , @A+PC进行查表的程序设计方法和编程技巧。
4.掌握Keil uvision3对寄存器和SFR赋值和查看数据的命令和方法。
二、实验设备PC机一台三、实验内容根据累加器A中的自变量,查表求1~20的平方数,平方高位数存放在寄存器R6中,平方低位数存放在寄存器R7中。
四、实验原理本次实验采用查表指令MOVC A , @A+PC实现上述字数据查表。
因为最大的自变量20的平方数是400,为了查表后验证方便,自变量1~20对应的平方数用伪指令DW定义,并且定义为压缩BCD码。
查表指令MOVC A , @A+PC只能进行字节查表,要查找一个字数据,必须进行两次查表。
利用指令MOVC A , @A+PC查表,表不能任意存放,必须紧跟在主程序之后。
查表时程序计数器PC值是指令MOVC A , @A+PC的下一条指令地址,并没有指向表的首地址,累加器A中是要查找数据在表中的偏移地址,而要使PC指向表的首地址,必须要加修正量(指令MOVC A , @A+PC的下一条指令与表的首地址之间的指令长度之和),且该修正量不能加给PC,只能转加给累加器A,所以在查表指令MOVC A , @A+PC之前必须要有一条转加修正量给累加器A的ADD指令,方可进行正确的查表,查找到的数据存放在累加器A中。
编程时,首先将累加器A中的自变量减1形成要查找数据在表中的序号,序号乘2得到表内偏移地址,将该偏移地址暂存到寄存器R6中,用加法指令ADD转加第一次用MOVC A , @A+PC指令进行查表的修正量给累加器A,进行第一次查表,得到该自变量的平方高8位在累加器A中,并与R6进行交换,这样查找的平方高位数存放在寄存器R6中,累加器A中是第一次查表时的表内偏移地址;累加器A再加1,得到要查找的平方低位数在表内的偏移地址,再用加法指令ADD转加第二次用MOVCA , @A+PC指令进行查表的修正量给累加器A,进行第二次查表,累加器A得到该自变量的平方低8位,送寄存器R7。
Excel VBA编程 典型实例——制作问卷调查表
Excel VBA编程典型实例——制作问卷调查表建筑公司为了满足现代市场的需求,在开发新的楼盘之前,对消费者进行了一次调查,通过本次调查表让公司了解各种楼盘的需求比例,使公司不致于盲目的开发高价楼盘,而无法销售出去,使公司的财政陷入困难。
本例将制做一份楼盘问卷调查表,使用户掌握表单控件的使用。
1.练习要点●使用控件●选项分组●代码2.操作步骤:(1)在A1至F11单元格区域中,输入相应的字段信息,并设置单元格的格式,如图11-17所示。
图11-17 设置格式(2)选择【开发工具】选项卡,单击【控件】组中的【插入】下拉按钮,在【表单控件】栏中,选择“选项按钮(表单控件)”。
然后,在工作表中绘制该控件,如图11-18所示。
图11-18 绘制控件(3)选择控件后,单击其中的标题文字并命名,然后分别为标题一的其他项添加控件并命名,如图11-19所示。
图11-19 绘制“选项按钮”控件(4)在工作表中按下Ctrl键,并逐一单击标题一中的“选项按钮”控件,选择后拖动选择的控件至标题二下单元格中,并释放Ctrl键,如图11-20所示。
提示如设置标头文字为“加粗”14号字体,正文标题颜色为“橙色”,字号为9号字体,合并正文中的标题行。
提示在单元格A5至A7,D5至D7中添加【选项按钮】表单控件,并指定【选项按钮】控件上的文字。
单击绘制绘制图11-20 添加【选项按钮】表单控件(5)分别在标题一和标题二中绘制“分组框(表单控件)”,并将“分组框(表单控件)”的标题文字删除,如图11-21所示。
图11-21 绘制“分组框”控件(6)在A12至F21单元格区域中,输入相应的字段信息,并设置单元格的格式,如图11-22所示。
图11-22 设置格式(7)分别在标题三、四、五、六、和七下,添加相应的控件并命名,然后在分别为其添加“组合框”控件,对标题进行分组,如图11-23所示。
图11-23 添加控件提示按下Ctrl 键,并拖动选择的控件时,并不会移动当前选择的控件,而是将选择的复制一份到拖动点上提 示将【分组框】控件添加到工作表中,并将属于一组的控件圈到控件中按Ctrl 后选择拖动选择绘制(8)在A22至F27单元格区域中,输入相应的字段信息,并设置单元格的格式,如图11-24所示图11-24 设置格式(9)在单元格的名称框中输入“A28:A1048567”,并按回车键,在【开始】选项卡中,单击【单元格】组中的【格式】下拉按钮,执行【隐藏和取消隐藏】|【隐藏行】命令,如图11-25所示。
查表程序设计
查表程序设计查表程序:所谓查表法,就是对⼀些复杂的函数运算如sinx,x+x^2等,事先把其全部可能范围的函数值按⼀定的规律编成表格(实际上是ROM的内存单元)存放在计算机的ROM 中(是程序存储器)。
当⽤户程序中需要使⽤这些函数时,直接按编排好的索引寻找答案。
这种⽅法节省了运算步骤,使程序更简便,执⾏速度更快。
在控制应⽤场合或智能仪器仪表中,经常使⽤查表法。
为了实现查表功能:在51系列单⽚机中专门设置了两条查表指令:MOVC A,@A+DPTR ;常⽤,⼀般DPTR做基地址,A做游标,这样就可以访问⼀个特定的表格了MOVC A,@A+PC例⼦:已知数据0~9的平⽅,设变量x的值在累加器A中,查表后求x^2的值,并放回A中保存。
试编写程序假设:RAM的40H,41H,分别放着03H,09H,求其平⽅,放在A中注:这⾥03H表⽰⼗进制3,025H表⽰⼗进制25,本来025不等于25,但是为了简便,并且在内存中存的都是16进制,所以这⾥直接⽤16进制数值等价于⼗进制数值解:源代码⼊下:分析结果:寄存器结果:ROM中的表格: 怎末查看这个表格,很简单,在调试的时候看DPTR⾥的值,就是表格在ROM中的地址ORG 0000H LJMP INIT ORG 0100H INIT: ;初始化,向RAM 的40H,41H 单元中存放3和9⽤来查表 MOV R0,#40H MOV @R0,#03H INC R0 MOV @R0,#09H MAIN: MOV R0,#40H MOV DPTR,#TABLE ;让DPTR 指向TABLE,A 中存放表格中的带访问的下标,下标从0开始 MOV A,@R0 MOVC A,@A+DPTR ;访问TABLE[3] INC R0 MOV A,@R0 MOVC A,@A+DPTR ;访问TABLE[9]SJMP $TABLE: ;存放在ROM 中的表格,TABLE 的地址理论上可以取得ROM 中的任何地址 DB 00H,01H,04H,09H,16H DB 25H,36H,49H,64H,81H END。
单片机的查表程序
在单片机开发过程中。
一些非线性的控制过程。
最适合做一个表格来。
时时改变系统的参数。
达到控制的目的.最常的如产生正弦的的程。
就是建一个大的数组时时改变输出的8位字节送给外部DA.由DA生成一个完整的正弦波.当然了.LED显示也是一个例子。
通过建一个数组来实现段码的点亮点灭.下面就是一个LED表——-digits[0]#define SEG_a 0x01#define SEG_b 0x02#define SEG_c 0x04#define SEG_d 0x08#define SEG_e 0x10#define SEG_f 0x20#define SEG_g 0x40#define SEG_dot 0x80unsigned char digits[10]= {(SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f), // 0(SEG_b|SEG_c), // 1(SEG_a|SEG_b|SEG_d|SEG_e|SEG_g), // 2(SEG_a|SEG_b|SEG_c|SEG_d|SEG_g), // 3(SEG_b|SEG_c|SEG_c|SEG_f|SEG_g), // 4(SEG_a|SEG_c|SEG_d|SEG_f|SEG_g), // 5(SEG_a|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 6(SEG_a|SEG_b|SEG_c), // 7(SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 8(SEG_a|SEG_b|SEG_c|SEG_d|SEG_f|SEG_g) // 9};C查表就太简单了temp2 = digits[ show_data[i]];一句搞定,C中还有一个switch语句也是一个很好的用查表语句C51汇编就相对麻烦一点。
不过MCS-51指令系统中有专用的查表指令:MOVC A,@A+DPTR和MO V A,@A+PC。
查表 程序
ORG 0000H ; 开始 单片机教学做合一 START: MOV DPTR,#TAB ; (DPTR)=TAB,表格起始地址 CLR A ; (A)=00H MOV R1 , #10 ; (R1)=10,10个数显示 LOOP: MOVC A , @A+DPTR ; 查表,取数存入累加器A中 MOV P0 , A ; (P0)=A,输出显示 ACALL DELAY ; 调用延时 CLR A ; (A)=00H INC DPTR ; (DPTR)=(DPTR)+1,指向下一个数 DJNZ R1 , LOOP ; 控制查表次数 AJMP START ; 从头开始 DELAY: MOV R7 , #255 DE1: MOV R6 , #255 DE2: DJNZ R6 , DE2 DJNZ R7 , DE1 RET ; 延时子程序
…
ORG DB DB END 0100H 00H , 01H, 03H , 04H, 02H 05H
;
;ORG伪指令指定表格存放的起始 ; 地址。从起始地址开始,表格数 ; 据顺序存放。 ;结束
单片机教学做合一
1、DB建表伪指令
例如:
ORG 0000H … ; 程序开始 ; 程序指令略
(0100)=3FH … ; (0101)=06H (0102)=5BH TAB: DB 3FH , 06H, 5BH ;TAB是表格起始标号。 (0103)=4FH DB 4FH , 66H ,05H ;每个数据是8位二进制数 (0104)=66H END ;结束 …….
2、熟悉指令MOVC
A ,@A+DPTR
单片机教学做合一
下节内容安排
1、程序编写的基本流程 2、程序流程图绘制
3、编程举例
查表程序设计
ORG
0300H
MOV A, R0
ANL
A, #0FH
;屏蔽高位
MOV
DPTR,#TAB
MOVC A,@A+DPTR
MOV
R1,A
ORG
0380H
例2 在一个单片机测温装置中,已知电压和温度之间是非线性关系。在 校正过程中,电压值取连续的10位二进制数,测量这些电压值对应温 度最多可达1024个。用这些校正数据建立一个表格。以电压为相对地 址,这样就可以根据测得的不同电压值求出被测温度。
;取出入口地址第一个字节
LNF:
LEND: TAB:
INC
DPTR
INC
DPTR
Sபைடு நூலகம்MP LOOP
(查不到处理程序)
DB
‘A’
DW
XA
DB
‘D’
DW
XD
DB
‘E’
DW
XE
DB
‘L’
DW
XL
DB
‘M’
DW
XM
DB
‘X’
;继续查
单片机原理及应用技术
入口条件为:命令字符放在A中。
程序: LTB: MOV
MOV LOOP: CLR
MOVC JZ INC CJNZ CLR MOVC MOV INC CLR MOVC MOV
DPTR, #TAB B, A A A, @A+DPTR LEND DPTR A, B, LNF A A, @A+DPTR B, A DPTR A A, @A+DPTR DPL, A
例1 将l位十六进制数转换为ASCII码。
解: 在前面的例子中,我们介绍了将ASCII码转换为十六进数的程序,本例是 其逆变换。这里采用查表的方法完成十六进制数到ASCII码的转换。
英文、俄文版本段码表查表方式程序设计
英文、俄文版本段码表查表方式程序设计
摘要:
一、前言
二、英文版本段码表查表方式程序设计
1.设计思路
2.具体实现
三、俄文版本段码表查表方式程序设计
1.设计思路
2.具体实现
四、总结
正文:
一、前言
在计算机编程领域,查表方式程序设计是一种常见的技术,通过将数据存储在表格中,实现快速查找和处理。
本文以英文、俄文版本段码表为例,介绍查表方式程序设计的实现方法。
二、英文版本段码表查表方式程序设计
1.设计思路
英文版本段码表查表方式程序设计首先需要建立一个段码表,将英文单词的编码和对应的汉字显示出来。
程序运行时,根据用户输入的英文单词,查找对应的编码,然后根据编码在段码表中查找对应的汉字,显示在屏幕上。
2.具体实现
(1)建立段码表
(2)接收用户输入的英文单词
(3)根据英文单词查找对应的编码
(4)根据编码查找对应的汉字
(5)显示汉字
三、俄文版本段码表查表方式程序设计
1.设计思路
俄文版本段码表查表方式程序设计与英文版本类似,首先需要建立一个段码表,将俄文单词的编码和对应的汉字显示出来。
程序运行时,根据用户输入的俄文单词,查找对应的编码,然后根据编码在段码表中查找对应的汉字,显示在屏幕上。
2.具体实现
(1)建立段码表
(2)接收用户输入的俄文单词
(3)根据俄文单词查找对应的编码
(4)根据编码查找对应的汉字
(5)显示汉字
四、总结
英文、俄文版本段码表查表方式程序设计通过建立段码表,实现对用户输入的英文、俄文单词的快速查找和显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SJMP FINISH LED0: CLR FINISH: RET
P1.0 ;CY=0,40H≥(41H),点亮P1.0 LED
4.3
汇编语言实用程序设计-分支转移程序设计
方法2:使用CJNE指令比较,借位CY来判断两个数的大小!
ORG 0000H MOV A,40H CJNE A,41H,COMP JNC LED0 CLR P1.1 SJMP CLR SJMP END FINISH P1.0 $
;?30H ;?40H
START:
LOOP:
LENG EQU 10 SUM EQU 21H BLOCK EQU 22H ORG 0000 LJMP START ORG 0030H CLR A MOV R7, #LENG MOV R0, #BLOCK ADD A, @R0 INC R0 DJNZ R7, LOOP MOV SUM, A END SJMP $ END
COPM:
LED0: FINISH:
;取40H单元数据送A ;两数比较 ;相等后的判别 ;CY=1,(40)<(41H) ;点亮P1.1;连接的LED ;跳转到结束 ;CY=0,40H≥(41H), ;点亮P1.0连接的LED
4.3 例4-12
汇编语言实用程序设计-分支转移程序设计 求符号函数的值。程序框图如图4-6所示。
ABC: ABC:
TAB1: TAB1:
4.3
汇编语言实用程序设计-分支转移程序设计
4.3.7 分支转移程序设计
特点是程序中含有转移指令。 转移指令有分为无条件转移和有条件转移。 有条件分支转移程序按结构类型来分,又分为单分支 转移结构和多分支转移结构。 1.单分支转移结构 程序的判别部分仅有两个出口,两者选一。 2.多分支转移结构 程序的判别部分有两个以上的出口流向。
1 Y 0 1
X 0 X 0 X﹤0
数据规划:X放40H Y放41H 用CJNE指令,借助于 CY,可以判别X的符号。
4.3
汇编语言实用程序设计-分支转移程序设计
堆栈指令的使 用
TAB1: DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H
4.3
汇编语言实用程序设计-查表程序设计
例2:求一个0~9的数是立方 ABC: MOV A , R0 特点:x为一字节、y为两字节, y=f(x)在ROM中的地址 RL A 是TAB1+2x及TAB1+2x+1 MOV B, A 入口参数:在R0中; #TAB MOV DPTR, MOVC A, @A+DPTR 出口参数:在R2、R1中,高字节在R2中 MOV R2, A MOV A, B INC A MOVC A, @A+DPTR MOV R1, A RET TAB: DW 0, 1, 8, 27, 64 DW 125, 216, 343, 512, 729
4.3
汇编语言实用程序设计
一个完整的源程序必备的四个要素:
有ORG 0000H,即源程序的机器码从ROM的0000H单元开 始存放。 通常源程序的存放要跳过中断向量区。实现方法:在0000H 单元存放一条转移指令,转向中断向量区后的主程序的真实 的入口地址,如START、MAIN等。 有END,告知汇编程序,你的源程序结束了。 源程序的主程序框架一定是一个顺序执行的无限循环的程序, 运行过程必须构成一个圈;子程序与主程序相对独立。
4.3
汇编语言实用程序设计
4.3.3 查表程序设计
数据补偿、修正、计算、转换等各种功能,具有程序简单、 执行速度快等优点。
查表就是根据自变量x,在表格中寻找y,使y=f(x)。
首先是用DB、DW伪指令建表,把握表格中的数据的位置与x的 关系。由x来表达y在程序存储器中的地址,然后用MOVC指令 实现查表。 例如:求x平方时的表格结构。 DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H 举例:自编例1、例2、例3及课本上的例4-5、例4-6、例4-7。
4.3
汇编语言实用程序设计
ORG 0000H LJMP MAIN MOV ORG 0030H 30H, #20 MAIN: MOV 30H, #20 MOV 40H, #50H CLR MOV 40H, #50H A LCALLCLR A ABC LCALL ABC 按照规则包装成.ASM SJMP $ ABC: MOV R3, #30H MOV R1, #40H CLR A L1: MOV @R1,A INC R1 DJNZ R3, L1 RET END
汇编语言实用程序设计-分支转移程序设计
有条件转移指令通常可以完成单分支转移 下列两种转移指令可以完成多分支转移 间接转移指令: JMP @A+DPTR; 比较转移指令: CJNE A,direct,rel; CJNE A,#data,rel; CJNE Rn,#data,rel; CJNE @Ri,#data,rel;
据A的内容查出X对应的平方。
4.3
汇编语言实用程序设计-查表程序设计
例1:求x的平方,x:0~9 特点:x、y均为一字节, y=f(x)在ROM中的地址是TAB1+x ABC: MOV ABC: MOV MOV PUSH MOVC PUSH RET MOV MOVC POP POP RET A, A, R0 R0 DPTR,#TAB1 DPH ;保存DPH A,@A+DPTR DPL ;保存DPL DPTR,#TAB1 A,@A+DPTR DPL ;恢复DPL DPH ;恢复DPH
内部RAM的40H单元和41H单元各存放了一个8位无符号数, 请比较这两个数的大小,比较结果通过单片机对LED的控制显
示出来。即:
若(40H)≥(41H),则P1.0管脚连接的LED发光;
若(40H。
4.3
汇编语言实用程序设计-分支转移程序设计
开始
(40H)-(41H) N CY = 0 ? Y (40H)≥(41H) P1.0灯亮 (40H)<(41H) P1.1灯亮
例4.两个无符号数比较 例4-12 求符号函数的值。
例4-13 散转 例5 :求50H单元后30个数的累加和
例4-16 测试字符串长度的程序。 例4-17 50ms延时程序 练习:写一个延时10ms的子程序。(钟频12MHz )
4.3
汇编语言实用程序设计-分支转移程序设计
例4.两个无符号数比较
(2)分支程序设计
第九课
复习 4.3 汇编语言实用程序设计
4.3.3 查表程序设计
4.3.7 分支转移程序设计 4.3.8 循环程序设计
复习
一个源程序的四个要素 子程序:形式、功能、入口参数、出口参数 子程序的调用:调用过程示意图 子程序调用及返回指令的执行过程 子程序的现场保护和参数传递 查表程序
复习EQU
功能?
有错吗?
包装成子程 序?
START:
LOOP:
LENG EQU 10 SUM EQU 21H BLOCK EQU 22H ORG 0000 LJMP START ORG 0030H CLR A MOV R7, # LENG MOV R0, #BLOCK LCALL LOOP SJMP $ ADD A, @R0 INC R0 DJNZ R7, LOOP MOV SUM, A RET END
查x的平方表y,根据x的值查出相应的平方y。x和y均为单字 子程序 ADD A,#01H
MOVC A,@A+PC 的学习
Y+2
Y+3 Y+4
MOVC A,@A+PC
RET DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H
第1条指令 ADD
A,#01H 的作用是加上偏移量,可以根
4.3
汇编语言实用程序设计-查表程序设计
例4-6 在一个以MCS-51为核心的温度控制器中,温度 特点:本例的x和y均为双字节无符号数。 例4-6 传感器输出的电压与温度为非线性关系,传感器输 y=f(x)在ROM中的地址 是TAB2+2x及TAB2+2x+1 出的电压已由A/D转换为10位二进制数x。根据测 入口参数:在R2R3 中; 得的不同温度下的电压值数据构成一个表,表中放 R2R3 中; 出口参数:在,x为电压值数据。设测得的电压值x放入 温度值y ***学习双字节无符号数乘2的解决方法。 R2R3中,根据电压值x,查找对应的温度值y,仍 读P81 例4-6 中。 放入R2R3
4.3
汇编语言实用程序设计-查表程序设计
思考题
求 x平方,x在R0中,取值范围在5~15
MOV R0 MOV A, A, R0 MOV DPTR,#TAB1 CLR C MOVC A, SUBB A,@A+DPTR #5 RET MOV DPTR,#TAB1 DB 25, 36, 49, 64,81 MOVC A,@A+DPTR DB 100,121,169,196,225 RET DB 25, 36, 49, 64,81 DB 100,121,169,196,225
结束
图 两个无符号数比较流程图
4.3
汇编语言实用程序设计-分支转移程序设计
方法1:使用SUBB指令,依据借位CY状态判断两个数的大小!
ORG CLR MOV SUBB JNC CLR 1000H C A,40H A,41H LED0 P1.1
;清CY为零 ;取第一个数送A ;两数比较 ;CY=0,转至LED0 ;CY=1,(40H)<(41H),点亮P1.1 LED ;跳转到结束
中。
指令“MOVC A,@A+PC”以PC作为基址寄存器,PC的内 容和A的内容作为无符号数,相加后所得的数作为某一程 序存储单元的地址,然后把该地址单元中的内容送到累加 器A中。