




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要本设计的任务是是设计一个单片机控制的秒表系统。我们利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计计时器。在设计时,我们应将软、硬件有机地结合起来,使得系统能够正确地进行加计数、减(倒)计时、快加和快减等功能,并且结合相应的显示驱动程序,使数码管能够正确地显示时间,暂停和中断。数码管显示有静态显示和动态显示两种方法。动态显示可以节省I/O口,硬件电路比较简单,但是编程比较复杂,而且显示的效果不好;静态显示显示效果好,编程简单,但却浪费I/O口。在我们的设计中,因为I/O口是足够使用的,所以我们采用静态显示。同时,为了使我们设计的秒表更加容易操作,我们专门
2、设置了两个指示灯,分别用来区分加减计数和快加/快减。另外,我们设计的秒表还有同时记录四个数据的功能,在秒表的正常运行过程中,我们按下计数键,秒表会自动记录一个数据,按四次以后,秒表自动停止,等待翻页键的按下来查询所记录的成绩。为了节省I/O口,我们在设计时将快加键和上翻键,快减键和下翻键分别用同一个按键来实现,使用的时候,通过设置键的状态来区分按键的功能。秒表设有复位键,但秒表进入死循环时,按下复位键即可回到初始状态。在因为单片机的I/O口还有剩余,而且我们的程序采用的是模块化设计,所以可以很方便的对程序进行扩展。通过WAVE软件的仿真和PROTEUS的仿真,我们的设计能够实现预想的功能。目
3、录1 概述31.1 设计任务3 1.2 设计要求3 1.3 功能简介32 系统总体方案及硬件设计52.1 电源电路52.2 晶振电路62.3 复位电路72.4 显示电路82.5 键盘电路83软件设计93.1 开机初始化程序93.2 键盘扫描程序 103.3 计时程序 113.4 快加和快减程序 123.5 翻页程序 133.6 暂停程序 143.7 计数程序 143.8 记录数据程序 163.9显示子程序 163.10 10毫秒延时子程序 163.11 程序流程图174 Proteus软件仿真194.1 开机的仿真图 194.2 正计时仿真图 194.3 减计时仿真图 204.4 快加快减计数
4、仿真图 214.5 暂停和计数仿真图 224.6 仿真结果与分析 235课程设计体会 245.1 设计中遇到的问题及分析 245.2 心得体会 24参考文献 26附1:源程序代码27附2:系统原理图351 概述1.1 设计任务本次单片机课程设计主要是设计一个单片机控制的秒表系统。利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计计时器。在设计时,我们应将软、硬件有机地结合起来,使得系统能够正确地进行加计数、减(倒)计时、快加和快减等功能,并且结合相应的显示驱动程序,使数码管能够正确地显示时间,暂停和中断。1.2 设计要求 1)能同时记录四个相对独立的时间,并且
5、能够通过一个按键使其分别显示。 2)使用两位LED显示,显示时间为0099秒。 3)正常计数时,每秒自动加1。 4)一个开始按键、一个复位按键、一个暂停按钮和一个快加按钮(每10ms快速加一) 。 5)翻页按钮查看四个不同的计时值 。 6)设置一个拨位开关,当开关处于不同位置时,分别控制加法和减法计数 。 7.添加倒计时初始值设置功能,设置好初始值后,按开始键开始计时。 8)添加下翻页按钮,并实现快减功能 。 9)不同功能通过功能键Setup实现切换。 设置 开始 暂停 停止 复位1.3 功能简介1)开机后,对单片机进行初始化,然后对按钮进行扫描。2)设置按扭用来设置快加循环翻页按钮的功能,为
6、了方便起见,我们还设计了一个红色的指示灯,当灯不亮的时候,快加循环翻页按钮实现循环循环翻页的功能,当灯亮的时候,该按钮实现快加功能。3)快加循环翻页按钮可以分别实现快加和循环翻页的功能。4)快减按钮用来实现快减的功能。5)拨位开关是用来控制加计数和减计数的,当开关拨到加位置时,实现加计数功能,当开关拨到减的位置时,实现减计数的功能。为了方便观察,我们也设计了一个绿色的指示灯,灯亮时是减计数,灯不亮时是加计数。6)开始按钮是用来控制加计数和减计数的开始。7)暂停按钮用来暂停程序的运行,当按下暂停键时,程序停留在原地,等待再次按下暂停键,再次按下暂停键后,程序继续运行。8)计数按钮用来记录数值,每
7、按下一次计数按钮,程序自动记录一个数据,并存放到指定内存单元中,当按下四次以后,程序自动停止,然后按快加循环翻页按钮(此时必须为翻页状态)查询记录数值。9)复位按钮是用来对程序复位,当程序出现死循环的时候,按下复位键即可跳出死循环,回到程序的开始。2 系统总体方案及硬件设计在本系统中,用到的硬件电路主要有电源电路,晶振电路,复位电路,显示电路,以及一些按键电路等。我们采用的是数码管静态显示,用到了P0口和P2口。另外,由于使用P0口驱动显示器,所以需要在P0口接一组上拉电阻,以保证P0口显示正常。下面分别对硬件电路做简单介绍:2.1 电源电路电源电路是系统最基本的部分,任何电路都离不开电源部分
8、,单片机系统也不例外,而且我们应该高度重视电源部分,不能因为电源部分电路比较简单而有所忽略,其实有将近一半的故障或制作失败都和电源有关,电源部分做好才能保证电路的正常工作。对电源电路来说,最重要的就是稳压。以下是两种稳压电路:1)开关稳压电源电路开关稳压电路具有许多优点:开关管的损耗很小,电路效率高,一般可达7085,甚至高于90;特别是可省去电源变压器,构成无工频变压器开关电源,体积小、重量轻、利于直流电源小型化;稳压范围宽,当电网电压在130265V变化,且负载电流作较大幅度变化时,都能达到良好的稳压效果;利用控制开关可获得一路输入多路输出以及同极性或反极性输出等;利用输出隔离变压器可得到
9、低压大电流或高压小电流稳压电源;应用灵活性高、适应范围广;输出电压维持时间长,交流输入电压关断后几十ms内仍有直流电压输出。开关稳压电源基本组成方框图2)集成三端稳压器固定式三端稳压器的输出电压是固定的,通用的产品有W7800(正电压输出)和W7900(负电压输出)系列,输出电压分5V,6V,9V,12V,15V,18V和24V等多种。型号的后两位数字表示稳压器的输出电压的数值,例如W7805,表示输出电压为5V;W7915则表示输出电压为-15V。这类稳压器的最大输出电流可达1.5A。三端稳压器的外形和电路符号如下图所示。a.外形图; b.电路符号集成三端稳压器输出电压扩展电路2.2 晶振电
10、路MCS-51单片机内部的振荡电路是一个到增益反相放大器,引线 XTAL1和XTAL2分别为 反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。单片机内部虽然有震荡电路,但要形成成时钟,外部还需要附加电路。石晶振荡和陶瓷振荡均可采用.有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。51单片机的时钟产生方式有两种,分别为:内部时钟方式和外部始终方式。利用其内部的震荡电路XTAL1和XTAL2引线上外接定时元件,内部震荡电路便产生自激震荡,用示波器可以观察到XTAL2输出的时钟
11、信号。在MCS-51单片机一般常用内部时钟方式,也就是在XTAL1和XTAL2之间连接晶体震荡器与电容构成稳定的自激震荡器。 晶体和电容决定了单片机的工作时间精度为1微秒。晶体可在1.2-12MHz之间选择。MCS-51单片机在通常应用情况下,使用震荡频率为6MHZ的石英晶体,而12MHZ频率的警惕主要是在高速串行通信情况下才使用,在这里我用的是12MHZ石英晶体。对电容无严格要求,但它在取直对震荡频率输出的稳定性、大小及震荡电路起震荡速度有一点影响。C1和C2可在20-100PF之间取直,一般情况取30PF。外部时钟方式是把外部震荡信号源直接接入XTAL1或XTAL2。由于的XT
12、AL2逻辑电平不是TTL的,所以还要接一个上拉电阻。晶振电路图如下:2.3 复位电路MCS-51单片机的复位是靠外部电路实现的。MCS-51单片机工作之后,只要在他的RST引线上加载10ms以上的高点平,单片机就能有效地复位。MCS-51单片机通常采用上电自动复位、按键复位、以及上电加按键复位等,我们采用的是上电加按键复位方式,这样做的优点是上电后可以直接进入复位状态,当程序出现错误时,可以随时使电路复位。复位电路图如下:2.4 显示电路显示电路既可以选用液晶显示器,也可以选用数码管显示。我们采用的是数码管显示电路。在用数码管显示时,我们有静态和动态两种选择,静态显示程序简单,显示稳定,但是占
13、用端口比较多;动态显示所使用的端口比较少,可以节省单片机的I/O口,但是,动态显示的程序比较复杂,需要不断的扫描,增加了编程的难度。在我们的设计中,因为I/O口足够使用,所以我们选择使用静态显示。显示电路图如下:2.5 键盘在需要按键时,我们可以在I/O口上直接接按键,或者通过I/O口设计一个键盘,然后通过键盘扫描程序判断是否有键按下,以及是哪个键按下等。和显示电路相同,键盘扫描电路的优点就是节省I/O口,但编程有些复杂,为了使程序简化,我们采用的是按键电路。按键电路如下:3 软件设计在设计程序之前,我们首先要对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标。
14、其次,要对系统的硬件资源和工作环境进行分析。这是单片机应用系统程序设计的基础和条件。经过任务分析、算法优化后,就可以进行程序的总体构思,确定程序的结构和数据形式,并考虑资源的分配和参数的计算等。然后根据程序运行的过程,勾画出程序执行的逻辑顺序,用图形符号将总体设计思路及程序流向绘制在平面图上,从而使程序的结构关系直观明了,便于检查和修改。应用系统的程序由包含多个模块的主程序和各种子程序组成。各程序模块都要完成一个明确的任务,实现某个具体的功能,如:加计数、减计数、延时、快加、快减,计数和显示等。模块化的程序设计方法具有明显的优点。把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,
15、有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。下面我们对每一部分子程序做分别的介绍。3.1 开机初始化程序 MOV R0,#40H ;设定寄存器的初始值MOV R1,#44HMOV R3,#00HMOV R4,#00HMOV R7,#64HSETB EA ;开中断SETB EX0 ;开外部中断0SETB EX1 ;开外部中断1SETB PX0SETB PX1SETB ET0 ;开定时器0MOV P0,#0C0H ;使显示时间数码管为0MOV P2,#0C0HMOV DPTR,#TABLE ;指定查表启始地址MOV TMOD,#01H ;设
16、置定时器0MOV TH0,#0D8H ;设定定时器0的计数初值MOV TL0,#0F0HCLR P1.0 ;熄灭指示灯CLR P1.2 ;对P1.2进行清零在开机初始化程序中,我们要做的是给定时器装入初始值,开中断,设置各个寄存器的初始值。3.2 键盘扫描程序 KEYGOARD:JB P1.7,START1 ;判断开始键是否按下LCALL DELAY10 ;延时10毫秒触点消抖JB P1.7,KEYGOARD;如果是干扰就返回JNB P1.7,$JB P1.3,GN2 ;等待按键松开LJMP GN1 ;跳到计时程序START1:JB P1.6,START2 ;判断设置键是否按下LCALL DE
17、LAY10 ;延时10毫秒触点消抖JB P1.6,KEYGOARD ;如果是干扰就返回JNB P1.6,$CPL P1.1LJMP KEYGOARD ;返回键盘扫描程序START2:JB P1.5,START3 ;判断快加/上翻按键是否按下?LCALL DELAY10 ;延时10毫秒触点消抖JB P1.5,START1 ;如果是干扰就返回JB P1.1,KUAIJIAJNB P1.5,$LCALL PAGEUP ;调用上翻程序LJMP KEYGOARD ;返回键盘扫描程序START3:JB P1.4,KEYGOARD ;循环判断快减/下翻按键是否按下?LCALL DELAY10 ;延时10毫秒
18、触点消抖JB P1.4,KEYGOARD ;如果是干扰就返回JB P1.1,KUAIJIANJNB P1.4,$LCALL PAGEDOWN ;调用下翻程序LJMP KEYGOARD ;返回键盘扫描程序 开机初始化后,程序要对各个按键进行扫描,判断是否有键按下。当有按键按下来的时候,首先要判断是不是抖动,如果是抖动,则不执行任何操作,程序继续扫描按键;如果不是抖动,就跳到相应的子程序去执行相应的操作。3.3 计时程序 ;正计时 GN1: SETB TR0 ;开定时器0LOOP:CJNE R0,#44H,LOOP ;判断是否记够四个数据 DEC R0 CLR EA ;关中断 AJMP KEYGO
19、ARD;倒计时GN2: SETB P1.2 ;对P1.2置1 SETB TR0 ;开定时器0 CJNE R3,#00H,AA ;判断开始值是不是0 CJNE R4,#00H,AA LJMP KEYGOARD ;如果是0就跳回到键盘扫描程序AA: CJNE R3,#00H,AA ;判断是否减到0 CJNE R4,#00H,AALJMP KEYGOARD ;当减到0时返回键盘扫描程序我们在程序中是利用定时器0实现计数的,当一秒钟时间到的时候,定时器自动产生中断,实现计数的功能,在中断程序中,我们加入显示程序,使计数结果可以在数码管上显示。在计数的过程中,程序还要判断已经记录数据的个数,如果没有记录
20、够四个数据,则程序继续往下执行,如果计够四个数据,则程序就会自动停止,等待按翻页程序查看记录的结果。倒计时的时候,程序从计数初值开始倒计时,当减到0后,程序就会自动停止。若初始值为0的话,程序就不进行减计数。3.4 快加和快减程序;快加功能KUAIJIA: F:LCALL DELAY10 ;调用延时程序 LCALL XIANSHI ;调用显示程序 INC R3 CJNE R3,#0AH,MAN ;判断个位到不到9 MOV R3,#00H ;对个位赋0 INC R4 CJNE R4,#0AH,MAN ;判断十位到不到9 MOV R4,#00H ;对十位赋0 LCALL XIANSHI ;调用显示
21、程序 MAN: JB P1.5 ,STOP ;判断P1.5的状态 LJMP FSTOP: LCALL XIANSHI LJMP KEYGOARD ;跳回键盘扫描程序;快减功能KUAIJIAN: J: LCALL DELAY10 ;调用延时程序 LCALL XIANSHI ;调用显示程序 DEC R3 CJNE R3,#0FFH,MM ;判断个位 MOV R3,#09H DEC R4 CJNE R4,#0FFH,MM ;判断十位 MOV R4,#09H ;给十位赋9 LCALL XIANSHI ;调用显示程序 MM: JB P1.4 ,STOP1 ;判断P1.4的状态 LJMP J ;跳转到J
22、STOP1: LCALL XIANSHI ;调用显示程序 LJMP KEYGOARD ;跳转到键盘扫描程序当按下快加按键时,程序执行快加功能,即每隔10ms加1,若按键一直按下不放,则程序一直循环自加,直到按键松开为止。快减程序和快加程序的原理相似。3.5 翻页程序 PAGEUP: CJNE R0,#43H,LOOP2 ;判断是否翻到第四个数 MOV R0,#3FH ;让指针循环 MOV R1,#43HLOOP2: INC R0 ;指针自加一 INC R1 MOV A,R0 ;将存储的数据输入的显示寄存器中 MOV R3,AMOV A,R1 MOV R4,A LCALL XIANSHI ;调用
23、显示程序RETPAGEDOWN: ;下翻程序 CJNE R1,#44H,LOOP3 ;循环的判断 MOV R0,#44H MOV R1,#48HLOOP3: DEC R0 ;指针自减一 DEC R1 MOV A,R0 ;将数据输入到显示寄存器中 MOV R3,A MOV A,R1 MOV R4,ALCALL XIANSHI ;调用显示程序RET ;返回指令在计数过程中,每按一次计数键,就会将一个数据存入到相应的内存单元中,当记录完四个数据后,我们就可以用翻页键查看所记录的成绩。其原理是将存入内存的数据调出来进行显示,每按一次,用于调数据的寄存器自动变化。3.6 暂停程序 PAUSE: LCAL
24、L DELAY10;延时10毫秒消抖 JB P3.2,FAN JNB P3.2,$;等待按键松开ZT1: JB P3.2,$;循环判断开始按钮K1是否按下? LCALL DELAY10;延时10毫秒触点消抖 JB P3.2,ZT1;如果是干扰就返回 JNB P3.2,$;等待按键松开FAN: RETI程序的暂停功能用中断实现。当暂停按键按下后,执行中断程序。在中断程序中,程序循环判断暂停键是否再次按下,若没有暂停键再次按下,则程序在原地循环,若暂停键第二次按下,则跳出循环程序,继续执行计数程序。另外,在暂停程序中,也有消抖程序。3.7 计数程序 COUNTING:PUSH ACC ;压栈保护
25、PUSH PSW DJNZ R7,PPP ;判断R7的状态 MOV R7,#64H JB P1.2 , JIAN ;根据P1.2的状态程序跳到不同的地方 AJMP COUNT ;加计数子程序COUNT: INC R3 CJNE R3,#0AH,RETURN ;判断个位 MOV R3,#00H INC R4 CJNE R4,#0AH,RETURN ;判断十位 MOV R4,#00H BBB: MOV TH0,#0D8H ;给定时器装入计数初值 MOV TL0,#0F0H SETB TR0 LJMP RETURN ;跳出中断 PPP:MOV TH0,#0D8H ;减计数子程序 MOV TL0,#0
26、F0H SETB TR0 LJMP RETURNJIAN: CJNE R3,#00H,AAA ;判断是否为0 CJNE R4,#00H,AAA AJMP RETURN ;跳出中断 AAA: DEC R3 CJNE R3,#0FFH,RETURN MOV R3,#09H DEC R4 LJMP BBBRETURN: POP PSW ;弹出堆栈 POP ACC LCALL XIANSHI ;调用显示程序 RETI ;跳出中断当定时器计数完以后,就会形成一次中断。主程序跳入中断程序执行中断。首先要判断要执行的是加计数还是减计数,若要进行的是加计数,就跳到COUNT,若要进行的是减计数,就跳到JIAN
27、。加减计数是通过P1.2来区分的,若P1.2为高电平,就进行减计数;若P1.2为低电平,就进行加计数。在进行减计数时,还要判断初始值是不是0,若初始值为0,则程序就不往下执行。3.8 记录数据程序LCALL DELAY10;延时10毫秒消抖JB P3.3,FANHUIJNB P3.3,$;等待按键松开 MOV A,R3 ;将数据输入显示寄存器中 MOV R0,AMOV A,R4MOV R1,AINC R0 ;R0自加1INC R1 ;R1自加1FANHUI : RETI ;跳出中断此段程序的功能是记录按键按下时的数据,将个位数据记录到R0中,十位数据记录到R1中,每记录一个数据,R0和R1中的
28、数据会自动加1。3.9显示子程序 MOV A ,R3 ;扫描个位上的数字 MOV DPTR ,#TABLE MOVC A ,A+DPTR MOV P2 ,A MOV A ,R4 ;扫描十位上的数字 MOV DPTR ,#TABLE MOVC A ,A+DPTR MOV P0 ,ARET我们设计中的数码管用的是共阳极的数码管,所以在显示之前必须将要显示的数字转换为七段码。七段码存放在数据段TABLE中,当使用时,从该数据段中直接调取就行了。寄存器R3中存放着个位的数,R4中存放的是十位的数。该程序使用的是静态显示。3.10 10毫秒延时子程序 DELAY10: MOV R6,#20D2:MOV
29、R5,#248DJNZ R5,$DJNZ R6,D2RET该程序在按键消抖程序中用到。3.11 程序流程图初始化开始拨位开关电位是否有键按下?哪个键?P1.1的电位?P1.1的电位?高低高低快加执行上翻功能快减执行下翻功能对P1.1取反低高加计数减计数计够个数?关中断中断?再次按下?哪个中断暂停记录数据结束中断0中断1否是是否开始计数是否计数程序结构流程图4 Proteus软件仿真我们利用WAVE软件对源程序进行编译,编译成功后,把编译结果保存。然后根据我们的软件在PROTEUS中设计出相应的硬件电路,并将该电路保存到与WAVE程序相同的文件夹中,最后将程序装载到单片机中,通过PROTEUS仿
30、真,看程序是否能够实现预想的功能。主要步骤的PROTEUS仿真图如下。4.1 开机的仿真图4.2 正计时仿真图4.3 减计时仿真图4.4 快加快减计数仿真图4.5 暂停和计数仿真图4.6 仿真结果与分析通过PROTEUS仿真,我们的程序能够实现想要所有功能,包括正计时,倒计时,数据记录,快加,快减,暂停,查看成绩等功能。在仿真时,应注意以下几个方面的问题:1)PROTEUS仿真图和用WAVE软件生成的HEX文件应保存在同一个文件夹里,否则程序不能正确执行。2)在运行PROTEUS仿真图之前,必须先装载文件,要不然程序也无法正常运行。3)在PROTEUS仿真过程中,硬件复位电路可能会不能实现复位
31、功能,这对实际的硬件电路没有影响,需要复位时直接将PROTEUS软件复位即可。4)由于我们的软件运行是在电脑上进行的,所以程序的精确度和电脑有关,在有些运行比较慢或者在电脑运行程序较多的时候,秒表的计时会不准确,这种情况应当考虑。5)程序在刚启动或者在暂停后继续运行的时候,反应比较慢,计时不准,不知道此问题在实际电路中会不会出现。6)在实现减计数功能的时候,我们的设计是时间到零后自动停止计数,而不是循环减下去。我觉得这样更符合现实的要求。5课程设计体会5.1 设计中遇到的问题及分析1)在中断的执行过程中,不能出项长跳转指令LJMP。当中断程序中出现跳转指令的时候,程序就不能按照原来的方式运行。
32、若把LJMP命令加到中断程序的外面,则不会出现问题。2)定时器的工作模式必须得正确设置,在这个程序中,定时器应工作在方式,刚开始没对定时器的工作模式进行设置,系统默认为是方式0,系统运行出错。3)程序中的工作寄存器必须不相互冲突,当重复使用同一个寄存器时,一定要注意对原来的数值进行保存,否则程序会出现意想不到的错误。我在调试程序时,没注意到调用的延时程序中使用的寄存器和主程序有冲突,使显示结果出错。4)当进行倒计时的时候,必须控制程序使其到零的时候自动停止,否则会出现乱码,或者循环计数,从而失去倒计时的意义。5)当程序需要显示的时候,应该用LCALL指令,当使用LJMP指令时,程序不能正常执行
33、。6)当计数完成后,R0和R1必须返回到40H和44H单元,否则翻页程序无法正常执行,在翻页程序执行过程中R0和R1应当能够循环变化,以实现循环计数。7)不论是正计数还是倒计数,当计数完成后,必须关中断,使程序停止计数,否则程序无法停止。8)有些指令在编译时会提示跳转出范围,比如JB指令和AJMP指令,这时可以将所调用的子程序调换一下位置,或者换用其他的指令。9)在用发光二极管做指示的时候,不能将发光二极管直接接到引脚上,因为这样当你给引脚送高电平的时候,二极管导通,从而使引脚电平变成低电平,影响程序判断。解决方法是在二极管上串联一个电阻。10)在使用PROTEUS软件仿真时,复位电路不起作用
34、,查阅相关资料,了解到PROTEUS仿真时出现这种情况是正常的,在硬件电路中可以实现复位功能。硬件系统设计:5.2 心得体会通过本次课程设计,我学到了很多东西,这些东西都是平常在课堂上学不到的。1) 对MC-51单片机有了更深入的了解,对I/O口的使用,晶振电路的接法,以及复位电路等的掌握都有了很大的提高,这为以后的实践打下了良好的基础。2) 对一些指令的使用更加熟练了。编程时体会最深的就是LCALL指令和LJMP指令,因为对它们使用不当的话会使程序进入到死循环当中,这时候连错误都很难找出来,所以以后编程时一定要正确使用这两条指令。3)通过对一些资料的查询和上网搜索,了解了一些比较常用的小程序
35、,比如延时程序,消抖程序,以及显示子程序等等,对以后的编程很有用。4)在课程设计过程中,自己搜索资料的能力有了很大的提高,以前老是觉得编一个大程序特别难,好多东西都不会,很多指令都不能熟练应用,但是在课程设计中,所有的问题都解决了。现在如果要是再编程序的话,我起码已经知道应从何处下手,需要相关资料应该如何查找,以及如何从别人的东西中找到自己需要的东西。我觉得这是很大的提高。5)通过课程设计,我觉得自己利用汇编语言编写程序的能力有了提高。以前学习微机原理和单片机时,虽然也学习了汇编语言,但那只是最基本的了解,很少有机会用汇编语言去编程序,尤其是编比较大的程序,所以对许多指令都是一知半解,不会应用
36、。在课程设计中,基本上用到了所有类型的指令,这就要求对指令的使用熟练掌握,否则无法使程序按照自己设定的方向正常运行。6)通过本次课程设计,我掌握了要通过编程实现某一功能的基本方法。首先,在设计程序之前,我们首先要对单片机应用系统需要完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标,然后把我们需要完成的任务分成许多小的子任务,分别实现。其次,要对系统的硬件资源和工作环境进行分析。这是单片机应用系统程序设计的基础和条件。经过上面的步骤后,我们就可以进行程序的总体构思,确定程序的结构和数据形式,。然后根据程序运行的过程,勾画出程序执行的逻辑顺序,用图形符号将总体设计思路及程序流向绘制
37、在平面图上,从而使程序的结构关系直观明了,便于检查和修改。最后根据流程图编写程序即可。参考文献1 余发山 .单片机原理及应用基础 江苏徐州:中国矿业大学出版社,2003.50-952 杨宁 单片机与控制技术 北京:北京航空航天大学出版社,2002.32-773 王闪 .AT89系列单片机原理与接口技术 北京:北京航空航天大学出版社,2003.35-68附录1:秒表源程序ORG 0000HLJMP MAINORG 0003HLJMP PAUSEORG 000BHLJMP COUNTINGORG 0013HLJMP JISHUORG 0030HMAIN:;开机初始化MOV R0,#40H ;设定寄
38、存器的初始值MOV R1,#44HMOV R3,#00HMOV R4,#00HMOV R7,#64HSETB EA ;开中断SETB EX0SETB EX1SETB PX0SETB PX1SETB ET0MOV P0,#0C0H ;使显示时间数码管为0MOV P2,#0C0HMOV DPTR,#TABLE ;指定查表启始地址MOV TMOD,#01H ;设置定时器0MOV TH0,#0D8HMOV TL0,#0F0HCLR P1.1CLR P1.2;等待按键输入,根据按键的输入判断执行什么功能KEYGOARD:JB P1.7,START1LCALL DELAY10;延时10毫秒触点消抖JB P
39、1.7,KEYGOARD;如果是干扰就返回JNB P1.7,$JB P1.3,GN2;等待按键松开LJMP GN1;判断设置按钮是否按下START1:JB P1.6,START2LCALL DELAY10 ;延时10毫秒触点消抖JB P1.6,KEYGOARD ;如果是干扰就返回JNB P1.6,$CPL P1.1LJMP KEYGOARDSTART2:JB P1.5,START3 ;循环判断开始按钮K2是否按下?LCALL DELAY10 ;延时10毫秒触点消抖JB P1.5,START1 ;如果是干扰就返回JB P1.1,KUAIJIAJNB P1.5,$LCALL PAGEUPLJMP
40、KEYGOARDSTART3:JB P1.4,KEYGOARD ;循环判断开始按钮K2是否按下?LCALL DELAY10 ;延时10毫秒触点消抖JB P1.4,KEYGOARD ;如果是干扰就返回JB P1.1,KUAIJIANJNB P1.4,$LCALL PAGEDOWNLJMP KEYGOARD;数码管显示秒表时间的程序;正计时GN1: SETB TR0LOOP:CJNE R0,#44H,LOOP DEC R0 CLR EA AJMP KEYGOARD;倒计时GN2: SETB P1.2 SETB TR0 CJNE R3,#00H,AA CJNE R4,#00H,AA LJMP KEY
41、GOARDAA: CJNE R3,#00H,AA CJNE R4,#00H,AA LJMP KEYGOARD;翻页功能PAGEUP: CJNE R0,#43H,LOOP2 MOV R0,#3FH MOV R1,#43HLOOP2: INC R0 INC R1 MOV A,R0 MOV R3,A MOV A,R1 MOV R4,A LCALL XIANSHIRETPAGEDOWN: CJNE R1,#44H,LOOP3 MOV R0,#44H MOV R1,#48HLOOP3: DEC R0 DEC R1 MOV A,R0 MOV R3,A MOV A,R1 MOV R4,ALCALL XIANSHI RET;快加功能KUAIJIA: F:LCALL DELAY10 LCALL XIANSHI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子出版物在终身教育中的重要性考核试卷
- 自行车运动监测技术应用考核试卷
- 羊的饲养羊只饲养与饲养技术研究考核试卷
- 弹射玩具企业项目管理与进度控制技巧考核试卷
- 社会媒体在企业传播中的应用考核试卷
- 电子元件生产线委托管理及市场拓展与技术支持合同
- 横店影视城文化旅游地产项目景区资源合作协议
- 高品质度假村客房全权委托经营管理协议
- 文化创意产业数据分析师岗位长期聘用协议
- 商业步行街商业地产开发与委托运营管理合同
- 2025年昆明市高三语文三诊一模考试卷附答案解析
- 诊疗规范考核试题及答案
- 临沂市罗庄区兴罗资本投资有限公司招聘笔试题库2025
- 船舶动力系统可靠性提升-全面剖析
- 人工智能设计伦理知到智慧树章节测试课后答案2024年秋浙江大学
- 《陆上风电场工程概算定额》NBT 31010-2019
- 新中考考试平台-考生端V2.0使用手册
- 电厂水处理基础知识课件
- 青春期健康教育之拒绝吸烟酗酒
- 珠海格力电器股份有限公司融资模式分析研究金融学专业
- 王泽鉴教授:请求权基础、法学方法与民法发展(修改版20141028)
评论
0/150
提交评论