《单片机双路显示电压表课程设计.doc》由会员分享,可在线阅读,更多相关《单片机双路显示电压表课程设计.doc(21页珍藏版)》请在三一办公上搜索。
1、目录一、设计任务-1二、总体方案设计与方案论证-3三、总框图及总体软件设计说明-6四、系统资源分配说明-11五、局部程序框图及其设计说明-12六、系统功能与操作说明-18七、调试记录及调试结果-18八、课程设计总结-21九、源程序清单(详细注释)-22一、设计任务设计课题:智能双路数字电压表设计目的:通过小型微机应用产品的设计与调试过程,运用微机原理及接口技术课程所学的基本知识,在设计中加以应用,进而得到理解、巩固和提高,学习掌握分析与解决实际问题的方法与手段,提高设计、编程与调试的实际动手能力,作为工程技术工作的一次基本训练。设计任务:设计一个以单片机为核心的智能双路数字电压表,通过多选一电
2、子模拟开关及A/D转换器巡回采集两路被测电压的数据,进行信号处理及标度变换,以一定的节拍时间交替显示,应有显见的符号标示被测信号源回路,并可通过按钮开关操控冻结或切换显示,可通过键盘进行参数设定,编程并在单片机实验板上模拟调试实现。基本设计要求:1、八位LED 7段数码管显示当前检测回路的标识、电压值及其单位或其他界面信息。2、电压测量范围0V4.96V,应有输入被测电压超量程判断及提示。3、应采取数字滤波技术提高测量与显示的稳定性。4、基本显示模式为:两路被测电压值按设定的节拍交替测量与显示,电压值保留二位小数。5、设置一个“冻结”按钮开关以操控进入或退出当前回路的冻结显示方式,冻结显示期间
3、每约0.5S更新一次测量值。6、设置一个“切换”按钮开关以操控强行切换显示下一检测回路数据。7、对开关量输入信号须进行软件消抖动处理。8、键盘设定交替测量显示的节拍范围为0.5S5.0 S,设定分辨率0.1V,设定界面应有醒目的当前修改位提示。9、无操作时间超过30秒钟后自动恢复为基本的运行状态。功能扩展提示:(选做)1、开机进行接口部件及数码显示器、指示灯、讯响器等自检。2、每隔一定的时间,穿插显示实时钟信息一定的时间,通过键盘设定其间隔参数。3、扩展显示模式二:同时显示两路电压测量数据,每约0.5S更新一次测量值,电压值保留一位小数。设置一个“模式”拨动开关以选择两种显示模式之一。4、超上
4、限告警功能,通过键盘设定电压上限值范围为0V4.96V ,监测到某回路电压超上限时有相应显示内容的闪烁提示、超上限LED指示灯亮、讯响告警及继电器触点输出控制功能。5、实现带有回差的超上限告警功能,通过键盘设定回差值的范围为0 .10V0.50V,设定回差分辨率0.01V。6、添加超下限告警功能。7、添加多挡量程功能,如1.24V量程、0.31V量程。8、其他功能扩展。二、总体方案设计与方案论证 本次课程设计是要设计出一个智能双路数字电压表,能符合实际应用且充分考虑到客户的需求。基于基本的设计要求,我采取了先设计出若干个具有不同功能的子模块,再由主流程不断循环调用,同时各个子模块之间还可以通过
5、设定标志位或调用同一单元进行彼此的相互关联,采用这种模块化的设计方式是为了使能使各个程序块分工明确,设计思路清晰明了,降低程序复杂度,使程序设计、调试和维护等操作简单化。 由设计要求,将程序分为以下十四个模块,分别是系统初始化、开关输入与消抖、标度转换、拆字送显缓、键盘扫描、显示更新、AD采集与数据滚存、交替显示、冻结控制、切换控制、设定节拍、节拍位闪烁、设定模式下无操作控制、时钟显示。同时还增加一个主流程模块,用于在后十三个模块之间不断循环。实现电压表的工作正常进行。由于电压表具有不同的工作模式,在不同的模式下数码管的显示内容是不同的,因此设计了一个进程代码单元,使得在不同进程代码下拆字送显
6、缓的内容是不同的,同时由于某些功能只有在某个进程时方可以实现,也可以通过判断这个进程代码单元的内容来决定是否可以执行该功能。采取这种控制方案便可以实现电压表不同模式的显示和控制。在模块化的程序结构和用代码单元来代表不同模式的大方案下,一下是每个模块的具体方案:1. 系统总初始化模块在系统初始化模块中需要向82C55芯片和A/D0809芯片的控制端口送入对应的控制字,实现数码管与键盘接口等的初始化,完成各PB按键、SW电平开关等端口的输入输出设定,同时还要在系统初始化模块中给一些变量或存储单元赋初值,为系统开始工作做好准备。2.开关输入与消抖模块对PB口采用滚动滤波法实现开关消抖,将29H到2E
7、H共7个单元作为开关输入状的存储单元。其中2EH为新态,2FH为前态,29H、2AH、2BH、2CH、2DH存储的是最近五次的电平值,通过比较近五次的电平值是否相等,若相等则将该值存入新态单元中,供后面的其他模块子程序调用。不相等则继续存储比较。同时在后面的其他模块调用时,通过比较2EH与2FH的内容就可以对开关的各种状态进行判断,同时还很好的消除了抖动的影响。 3.标度转换模块 在标度转换模块这里有两种方案可供选择:一种是首先判断高位66H单元中式1还是0,若是1,则对BCD码的百位存放单元赋值2,而后对低位67H单元中的值除以一百取到百位值,加到BCD码百位存放单元中,而后取余数除以十,整
8、数加到十位存放单元中并判定若是和值超过10则百位加一,之后取除以十以后的余数加到个位单元中,然后再次判断十位单元是否需要加1,乃至百位单元是否需要加1。但由于此种方法过于繁琐,因此在调试模块中改用余老师提供的办法写出另一种实现方式的程序。高位依旧判断是0还是1,是1则低位的值应加上256,所以只需在高位加2,而低位先加上56,再进行进位判断。具体程序在调试报告中说明,但由于新写好的程序未有机会调试,因此在程序清单部分中还是采用老方法。 4.拆字送显缓模块 在拆字送显缓模块中,需要对数码管不同的显示模式分开拆字送显缓,因此进程代码在这里就起到了很好的区别对待作用了。分别用01,02,03,10,
9、11代表进程模式为显示第一路、显示第二路、显示时钟、设定节拍整数位以及设定节拍小数位。同时在基本模式即第一第二路电压值显示状态下,对数码管其他位固定赋值“U1= V”“U2= V”即可,仅需对由标度转换后的单元拆字送到需要显示电压值的四个数码管对应的显缓单元中。而节拍设定模式下仅显示两位节拍值与节拍单位。 5.键盘扫描模块键盘扫描方法共有线反转法和扫描法。扫描法的思想是先把某一位置为低电平,其余位为高电平,然后检查各电平的变化。弱某行线电平为低电平,则可确定此行列交叉点为按下键。但由于此方法需要多次扫描,过于麻烦,因而我们采用的是线反转法。线反转法就是通过两步:第一步使列线全为输出低电平,行线
10、输入,则行线由高变低所在行为按键所在行;第二步使使行线全为输出低电平,列线输入,则列线由高变低所在列为按键所在列。 同时设定两个单元62H与61H为旧态单元与新态单元。判断出键盘按下的键号存入61H中,可以通过比较61H与62H的内容判断键盘按键的状态。并在其他子模块中调用61H中的值实现不同按键的不同操作。 6.显示更新模块本模块的功能是将拆字后显示缓冲单元所存的内容通过查表得相应字段码一一送往各个数码管显示,其中有包括对基本模式下电压值的小数点以及节拍设定数据个位小数点的处理。 7.AD采集与数据滚存模块 由于有双路数据,采用主流程循环奇数次对第一路进行采集并滚存,偶数次为另一路。同时由于
11、AD转换需要一定的转换时间,所以采用先读取某一路上一次转换的结果,设四个单元滚存数据,然后再启动另外一路下一次转换的流程。每一路都滚存四个单元并求取其平均值,这羊能够提高数据测量与显示的稳定性 8.交替显示模块 该模块仅在进程模式为基本工作模式下进行,通过引入定时器中断程序中的一个计时单元来判断时间是否与设定节拍的时间相一致,一致时则切换到另一路显示的进程中。 9.冻结控制模块 冻结控制是通过PB口上的按键PB2来控制的,当PB2处于按下状态就进入冻结模式,冻结模式下是能够保持显示此时的工作模式,没有交替显示,持续显示第一路、第二路或时钟模式,冻结模式下可以进行强制手动切换,但不能进入设定模式
12、。 10.强制切换控制模块 强制切换模式是在进程代码为01或者02即显示第一路和第二路电压的基本模式时方可实现的,由PB3按键控制,按下PB3按键能够由当前显示的这一路立刻跳转到显示另一路电压值。冻结模式下亦可强制切换。 11. 节拍设定模块 节拍设定也是由PB口上的两个按键来控制的,PB7键按下进入节拍设定模式,按下键盘上的数字键进行对节拍整数位和小数位的设定,同时设置两个存储单元一个为临时节拍单元用于拆字显示,一个为确定节拍单元,用于交替显示比较。PB0为确定键,当确定键按下后将设定完的节拍值送入确定节拍单元,作为之后交替显示的节拍时间。 12.节拍位闪烁模块 此模块是当进入节拍设定时用于
13、提示当前为哪一位修改,其实现原理是将定时器中断中的1S计时单元拿来分段,某一段中让数码管亮,而某一段对数码管当前位关显示。当整数位设定时有数字键按下后立刻跳到小数位闪烁,不断循环。 13.设定时无操作控制模块 无操作是在设定模式下当一定时间内PB口与键盘上均无任意键按下时即跳转回基本工作模式。通过引入定时器中断中的一个计时单元来与设定的时间进行判断,同时在键盘与PB口扫描程序中对案件有否按下进行判断,按下则对该计时单元清零,由此实现无操作控制。 14.时钟显示模块 时钟显示模式的进程代码为03,在定时器中断子程序中能实现实时钟功能,因此我们只需在交替显示模块中没交替几轮后便使进程代码跳为显示时
14、钟的模式,而后由拆字子程序拆存放时钟时分秒值的那几个单元便可以在数码管上每几个轮回显示一次实时钟。三、总框图及总体软件设计说明1.总体软件模块图如下所示:开关输入及消抖标度转换AD采集并滚存拆字送显缓 键盘扫描显示更新冻结显示控制交替显示控制初始化等待芯片上电复位主程序手动切换控制 设定节拍控制 设定节拍位闪烁控制 设定模式下定时实现无操作 时钟显示 2. 总体软件设计说明: 单片板一上电后首先进行系统的初始化,对两片82C55芯片的控制口写入控制字,完成各端口的输入输出设定,定义82C55(U3)为数码管显示与矩阵键盘接口A和B口输出字段字位,C口输入。82C55(U5)为LED显示,开关,
15、按键接口,A口输出驱动L8-15,B口输入按键P0-7,C口输入电平开关SW0-7。同时给一些变量或存储单元赋初值,开T0中断,初始化T0定时方式为方式2,TH0、TL0均赋初值为48H。在进入主循环之前,先进行九轮调用AD采集子模块,目的是为了让四个滚存单元先存好AD转换的值以便在第一次调用标度转换时就可以以准确的AD转换值进行计算,保证了测量的稳定性。之后进入主循环,首先调用的是开关输入及消抖子程序,放在最开始的目的是为了方便后续子模块对PB口按键开关的使用,本次设计普遍采用按键下降沿有效,因此后续模块只需判断弱前态为高电平,新态为低电平即按键按下,进行操作即可。接下来调用的是标度转换子模
16、块,之所以要将标度转换放在主流程调用的前端是为了能够在第一轮就有AD转换后转成可显示的BCD码电压值输出显示,标度转换约每0.5s调用一次,因此在子程序开头应有判断主流程循环50次后方进行一次标度转换。接下来调用的是拆字送显缓模块,拆字送显缓中每次对进程代码单元内的内容进行判断,根据各个不同进程代码进入到相应的拆字模块中进行不同的拆字,在拆字送显缓模块中还应对基本工作模式下的第一路和第二路电压值进行判断,看是否有超过最大量程4.96V,若有超量程应有超量程提示,此时数码管会显示出“UI=1-V”或“U2=1-V”。拆字送显缓模块调用完后进入键盘扫描模块,键盘扫描模块即用线反转法判断出哪个键号按
17、下,键号存入61H单元中以供后用。而后进入显示更新模块中,本模块的功能是将显缓单元中的内容通过查表得相应字段码一一送往对应的显示缓冲单元显示,该模块包括对电压值的个位小数点的处理,当判断查表转到33H单元时,就将33H中的内容附上小数点。接下来是AD采集模块,AD采集模块中分两路轮流采集,主流程循环奇次采集U1电压,偶次循环采集U2电压,每次采集都读取一次AD转换后的值存到四个滚存单元的最外层,同时四个滚存单元滚存一轮,则每个单元的值都滚到下一单元,而最内侧单元的值是最早读取的则被覆盖。然后再启动另一路电压的AD转换,用主流程10ms的时间作为转换的延时时间。因此AD采集是每10MS采集一次。
18、而后是交替显示模块,除了基本的实现按照节拍设定的时间来交替显示外,为保证一轮交替后能够立刻显示最新的电压值,因此在一轮交替后会将标度转换子程序开头的计数单元赋值1,从而能够在随后调用标度转化时立刻减一开始标度转换。同时在一轮交替完也会进行对27H计数单元加一,以实现达到一定交替次数后进行一次时钟显示。冻结模块是PB口上的PB2按键控制,按下冻结当前路显示,再次按下退出。强制切换模式是由PB3按键控制,按下就会强制跳到另一路的电压显示,这两种控制在跳转到另一路时都要对交替显示中的计时单元置零,使之能正常的进行交替显示,否则当该计时单元超过设定节拍单元后会一直增加到FFH,再回到00H,这样会使得
19、某一路显示得特别长时间。设定与闪烁模块的工作模式是,按下PB7,则设定节拍单元将初始节拍值送临时节拍单元,则此时数码管会显示临时节拍单元的节拍值,同时整数位闪烁,表示此时数字键按下会改变整数位值,当有数字键按下则小数位立刻开始闪烁,此时进入设定小数位,当有数字键按下后又会返回到整数位的设定,而按下的键号都会立刻送到临时节拍单元,直到确定键PB0按下,便会将此时临时节拍单元存的值送回确定节拍单元中。这便是新的节拍。而在设定完成后回到基本工作模式也要对标度转换的计数单元赋值为1.无操作模块子程序主要是执行计时单元与设定时间相一致时返回基本工作模式,而具体判断有否按键按下则主要在键盘扫描与PB口开关
20、消抖子模块中判定。四、系统资源分配说明AT89S51片内存储单元分配:单元地址单元分配功能00H (R0)都用于拆字送显缓模块,显示更新模块。R0同时用于标度转换模块01H (R1)03H (R3)显示更新子模块,用于存放字位码04H (R4)用于标度转换模块中,用于存放四个滚存单元内容和值的高低位。R5亦用于延时子程序中05H (R5)06H (R6)各个延时子程序07H (R7)20H进程代码存放单元21H显示更新中用于存字位码22H判断进入冻结模式与否的标志位24H标度转换中用于判断最低八位是否需要0舍1入25H判断主循环循环奇偶次的标志位27H时钟模块中判断交替显示的次数29H、2AH
21、、2BH、2CH、2DH用于开关消抖模块2EH、2FHPB口按键中的前态与新态30H37H显示缓冲单元,对应数码管的八个位38H定时器中断子程序中实时钟200us计数单元39H10ms计数单元3AH、3BH、3CH实时钟秒、分、时单元4EH标度转换中计主流程循环次数单元50H、51H存AN0转换后电压BCD码值的小数和整数部分,对应U1路52H、53H存AN1转换后电压BCD码值的小数和整数部分,对应U2路54H临时节拍单元55H确定节拍单元57H定时器中断中计时单元与无操作设定时间比较58H定时器中断中的计数单元59H100ms计数单元40H、41H、42H、43HAD采集中U1路的4个滚存
22、单元45H、46H、47H、48HAD采集中U2路的4个滚存单元4AH、4BHU1的4个滚存单元值相加后高低位存放单元4CH、4DHU2的4个滚存单元值相加后高低位存放单元60H键盘扫描中存键盘行列码61H键盘扫描中存按下的键号62H键盘的前态64H、65H标度转换中和值低位乘以125后值的高低位66H、67H标度转换中和值高位乘以125后值的高低位6FH堆栈指针五、局部程序框图及其设计说明之前的介绍都是按照主流程调用模块的顺序来介绍,接下来为方便了解整体的工作思路,将按照电压表工作模式来介绍。1. AD采集模块实现轮流采集AN0,AN1两路AD转换后的值并滚存到四个滚存单元中,同时启动另一路
23、的转换开始 判断主流程循环奇次还是偶次 奇次 偶次 读取AN0(U1) AD转 读取AN0(U1) AD转换的值,进行一次滚存, 换的值,进行一次滚存,启动AN1的AD转换 启动AN1的AD转换返回2.标度转换模块实现将4个滚存单元中的值相加求平均值,然后转换成BCD码输出显示到数码管上第一路第二路开始否判断65H最高位是否为1 判断主流程是否循环50次 否是 67H单元加1 是 判断66H单元是否为1 将四个滚存单元内的值相加,和的高位存入4AH,低位存入4BH是68H单元赋值为2,69H单元加上5,6AH单元加上6将存低位的4BH中的值乘上125,乘完后高位存64H高位存65H,此为低位乘
24、法67H单元除以100,后整数加到68H单元中,余数存入69H将存高位的4AH中的值乘上125,乘完后高位存66H,高位存67H,此为高位乘法69H单元除以十,整数加到69H中,判断是否超过十,超过了需对68H加一4AH与4BH乘完125后的值进行错位相加,即64H加上67H,值存入67H中69H单元除以十后余数加到6AH中,判断是否有超过十,超过了对69H加一同时判断是否需要进位到百位68H中判断进位标志位是否为1. 是 否返回66H加13.节拍设定模块节拍设定模块就是当设定键(PB7)按下后进入节拍设定模式,确定键(PB0)退出开始设定键按下(PB7)120H单元中为10H,进入节拍整数位
25、设定,整数位闪烁1按下键盘数字键,整数位被修改,20H单元中为11H,小数位闪烁,进入小数位设定阶段22按下键盘数字键,小数位被修改,整数位闪烁,20H单元赋值10H,再次进入整数位设定阶段3否判断确定键(PB0)是否按下3是将临时节拍单元值送如确定节拍单元中,电压表回到基本工作模式下返回3. 开关消抖子模块实现对PB口采用滚动滤波法实现开关消抖,将29H到2EH共7个单元作为开关输入状的存储单元。其中2EH为新态,2FH为前态同时在后面的其他模块调用时,通过比较2EH与2FH的内容就可以对开关的各种状态进行判断,同时还很好的消除了抖动的影响。存上次按键状2EH到2FH中开关量输入消抖子程序入
26、口2CH-29H分别移至2DH-2AH,并将新读入的值存到29H29H-2DH值相同吗?存2DH到2EH否是消抖子程序返回4. 交替显示模块通过引入定时器中断程序中的一个计时单元来判断时间是否与设定节拍的时间相一致,一致时则切换到另一路显示的进程中。开始0201 判断20H单元是01还是02 当计时单元与确定节 当计时单元与确定节拍单 拍单元的值相等时 ,对 元的值相等时,对20H单元 20H单元赋值为02 赋值为01返回6.冻结模块冻结控制是通过PB口上的按键PB2来控制的,当PB2处于按下状态就进入冻结模式,冻结模式下是能够保持显示此时的工作模式,没有交替显示,持续显示第一路、第二路或时钟
27、模式开始判断PB2按键是否按下标志位22H.0置1,进入冻结模式否是子程序返回判断PB2按键是否再次按下是标志位22H.0清0,退出冻结模式否7.无操作模块无操作是在设定模式下当一定时间内PB口与键盘上均无任意键按下时即跳转回基本工作模式。通过引入定时器中断中的一个计时单元来与设定的时间进行判断,同时在键盘与PB口扫描程序中对案件有否按下进行判断,按下则对该计时单元清零,由此实现无操作控制开始是判断是否有任意键按下判断是否处于设定模式否从无按键开始计时,当与设定时间相等时进入基本工作模式否子程序返回8.强制切换模块强制切换模式是在进程代码为01或者02即显示第一路和第二路电压的基本模式时方可实
28、现的,由PB3按键控制,按下PB3按键能够由当前显示的这一路立刻跳转到显示另一路电压值。开始判断PB3按键是否按下否是返回判断当前20H单元内的值02H将20H单元赋值为02H01H将20H单元赋值为01H六、系统功能与操作说明系统功能 本次设计的是一个以单片机为核心的双路巡回采集电压表系统。显示仪表是8个数码管,每路的电压值在通过A/D转换巡回采集以及进行数据的处理和变换后,能以一定的节拍时间(2S)在数码管上巡回显示且不断更新每一路的最新电压值,其中数码管的最高两位显示当前采集并转换的电压值,最低位显示电压的符号V,左数第三位显示等号,左数第四.五、六、七位显示电压值。可操作功能有: 1.
29、可通过按动PB按键上的PB2与PB3进行对电压显示的冻结和强行切换;2按键PB7可以控制进入交替显示的节拍设定模式,PB0是确定键控制电压表按照设定的节拍进行交替显示,当初在设定模式下,若是30秒内无任意键按下,将会自动返回到基本工作模式。同时该电压表会在每交替显示5次后穿插显示一次时钟,且由于该电压表量程为04.96V,当超过最大值4.96V时会有超上限显示操作说明单板机上电以后,先要等待约1S的时间等待芯片上电复位结束,然后进入主程序流程,在数码管上可以看到能以一定的节拍时间(2S)在数码管上依序显示两路电压的序号及电压值,其中数码管的最高两位显示当前采集并转换的电压值,最低位显示电压的符
30、号V,左数第三位显示等号,左数第四.五、六、七位显示电压值。同时每交替显示5轮后将会出现一次实时钟,显示当前时间。PB7与PB0按键是分别用来控制设定节拍与节拍设定结束的确定按键。通过按下PB7按键进入节拍设定的整数位设定,此时可以看到节拍的整数位开始闪烁,按下键盘上的数字键后整数位值立刻被改变,同时小数位闪烁,表示进入小数位的设定,再按下任意数字键,将会再次返回到整数位的设定,直到PB0确定键按下后,系统将会回到基本工作模式,同时按照设定好的节拍进行交替显示。若是进入设定模式按下确定键之前,没有任意键按下则30S内会自动回到基本工作模式下。PB2按键是控制进入与退出冻结模式,冻结模式将会静止
31、在当前电压的显示路上,同时每0.5s更新显示值。PB3按键是实现强制切换,按下可以是现在两路电压之间不断切换显示。在基本工作模式下,旋转AN0与AN1上的电位器,可以观察到两路电压值均会发生变化,从0V4.96V,AN0电位器对应U1路的显示值,AN1电位器对应U2路显示,由于最大值为4.96V,所以当旋转电位器时值大于4.96V后,将会出现超量程提示。七、调试记录及调试结果在设计的最初两天,我们一接到老师布置的设计任务书,就开始紧锣密鼓的构思程序的设计了,在老师提示的用一个进程单元存放不同代码以区别不同显示模式的思路下,我们首先便有了一个大致的框架,因此我先编写出了系统初始化,拆字送显缓模块
32、,显示更新模块和交替显示模块,在第一天调试我就成功实现已编写程序的功能,当下感到备受鼓舞,而之后我便开始啃节拍设定以及键盘扫描程序这块相对较难啃的骨头,结果第二天调试来调试去始终毫无斩获,沮丧之余便转而改写冻结或外切换功能,待这两个功能实现后方才又重新回去调试节拍设定与键盘功能。在节拍设定编写的一开始,我犯了一个常识性错误,以为在整数位设定完后按下确定键方才进行小数位的设定,而小数位设定完后再按下确定键才把节拍值送到确定单元中。而事实上在生产实际中,均是在整数与小数位之间不断巡回,直到最终确定键按下才送入确定单元中,因此我对自己的设计思路重新进行了修正。另外在拆字送显缓模块中将整数位的设定模式
33、与小数位的设定模式归为一类使得一开始始终无法进入到设定的界面中。一分开后就能够正常的实现了。另外在我进行退出冻结模式,或者是设定完后返回基本工作模式时,总是要等很长时间才会进入2S的交替显示状态,而后在老师的提示下我才明白原来是在要返回时没有对交替显示的计时单元清零,因此那个单元一直在进行加运算,自然会延时很长的时间。而后无操作模块中,调试的时候我设定的是无按键按下开始算起10S后回到基本工作模式,可是事实上变成从已进入设定模式无论有无按键按下均10S后自动跳回,究其原因原来是对按键按下的判定错误导致无法实现从最后一次按键按下之后开始延时。以上便是第一周调试时出现的比较记忆深刻的问题,第二周开
34、始调试AD采集与滚存以及标度转换模块。我先调试标度转换子模块,由于边度转换子模块要实现较多的功能,因此我将这个子模块下面又分成几个小块,并分块进行调试,直至所有小块均调试成功后才合并在一起最终调试。但是一开始我没弄明白AD采集与标度转换的关系,以为是每一路的标度转换也是按照主流程循环奇次或者偶次决定哪一路进行标度转换,因此程序编写有误。在最终求出的二进制电压平均值要转换成BCD码的变换程序中,我采用的方法是首先判断高位66H单元中式1还是0,若是1,则对BCD码的百位存放单元赋值2,而后对低位67H单元中的值除以一百取到百位值,加到BCD码百位存放单元中,而后取余数除以十,整数加到十位存放单元
35、中并判定若是和值超过10则百位加一,之后取除以十以后的余数加到个位单元中,然后再次判断十位单元是否需要加1,乃至百位单元是否需要加1。但由于此种方法过于繁琐,因此改用余老师提供的办法,高位依旧判断是0还是1,是1则低位的值应加上256,所以只需在高位加2,而低位先加上56,再进行进位判断,这样步骤便变得简单了许多。以下是修改程序:MOV A,66H ;对66H单元判断是1还是0 CJNE A,#01,ZB11;不相等跳转 MOV 68H,#2 ;是1的话,百位赋值为2MOV A,67H ;取出低字节单元内容 MOV B,#100 ;对B赋值100 DIV AB除以100 ADD A,#02H;
36、商值加2 MOV 68H,A;送68H单元 MOV A,B;余数送A ADD A,#56;余数加56 MOV B,#100;对B赋值100 DIV AB;余数加56后除以100 ADD A,68H;商值与高字节68H单元相加ZB11:MOV 68H,A;高字节值送68H单元 MOV A,B;取出余数(低字节值) MOV B,#10;对B赋值10 DIV AB;余数除以10 MOV 69H,A;商值送69H单元 MOV 6AH,B;余数值送6AH单元 ZBT: RET八、课程设计总结 大学的课程设计是从大三开始的,而印象中最深的莫过于数字电子的课程设计与这次微机的课程设计了,还记得上学期数字电子
37、的课程设计那两周时间内,熬夜布线画图,洗板是遇到质量问题接连换了三块板,而后期在调试时也是充满了各种紧张与挫折。经历了上学期的历练,我感觉这次的课程设计我会相对更沉稳一些,设计与调试中也会更加有自信与有把握一些了,但是由于在第一周的周末急需回家办理赴海外考试的手续,为怕耽误设计我在第一周也尽量抓紧将程序设计妥当,以至于晚上也去调试,后来才知道实验室老师是因为我要去才留下来值班,真的是十分过意不去,辛苦了这位实验室的老师了。 在第一周的调试时,我进行的比较顺利,因此在老师提供AD采集与标度转换的方法之前我已将其他功能调试妥当,而之后第二周的调试就略显紧张与急躁了,在发现问题时我不够冷静,没有尽力
38、去思索如何发现问题,而是总想求助于同学和老师,这点是不可取的,但是它又有一个好处就是当我求助于班级里的高手或者是询问老师时会发现有时候一个高手在你身边为你指出错误还不如教你如何排查并找出这个错误, 通过询问我也学会了如何更加全面的运用KEIL软件以及如何迅速的缩小范围以及找出错误点,这点是在平时上课时学不到的,收获确实很大。另外,在设计时在我思路卡壳的时候,我也会求助于班上已经设计出来了的同学,并且学到了不少好的设计思路与好的想法,这也要得益于大家在这两周的时间都是全情投入且始终乐于交流彼此的想法并热于帮助他人解答疑惑,这种氛围真的很美妙,我想这也是课程设计的真谛之一吧,促进大家一同来进行头脑
39、风暴,并搭建一个互相交流研究的平台,以促进我们更好的进步。 两周的实习收获着实很大,当然也有很痛苦的时候,比如一整天都对着电脑,眼睛会很疲劳,也有研究程序到半夜一两点的,但身边的人的这种热情确实让我真实的感受到了一种工科人对工作的认真的投入精神,两周的实习老师也陪伴了我们两周,余老师的治学严谨,要求严格甚至较苛刻与平时的和蔼可亲和循循善诱的反差也给我们留下了深刻的印象,现在“有错就改”已经成为了我们生活中的口头禅了。我还记得在上单片机的第一节课的时候余老师说要给我们洗脑,洗成一个合格的工科人,我想经过一学期的学习我确实深刻的感受到了这一点,记得在大一大二的时候我总认为自己学不来这个专业,学不来工科,但是现在我其实已经完完全全的抛弃了这个想法并且总是能积极的投入到每一门学科的学习中去,我想这和我们系里对与人才的培养以及每一位教过我的老师的优秀的教学方法和严格要求是分不开关系的。因此当余老师在答辩时问我说喜不喜欢挑战,我的答案是是的,现在我会珍惜每一次挑战,因为在大学里的每一次挑战就是在我们进入社会之前的每一块奠基石。在此谢谢老师对我的历练,培养以及帮助,还有实验室老师的帮助,还有在这两周内帮助过我的同学们。感谢余老师对我们用心的栽培,还有您那生动活泼有趣的上课风格。真希望还有更多的机会在您的教导下接受这样的历练。 2011.6.26