欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    单片机计时秒表程序设计.doc

    • 资源ID:60232616       资源大小:31.50KB        全文页数:17页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机计时秒表程序设计.doc

    pic单片机计时秒表程序设计(时钟显示范围00.0099.99秒,分辨度为0.01秒)作者:    来源:本站原创    点击数: 1676   更新时间:2008年07月12日   /此程序实现计时秒表功能,时钟显示范围00.0099.99秒,分辨度:0.01秒#include "p18f458.h"unsigned char s4; /定义0.01 秒、0.1 秒、1秒、10秒计时器unsigned char k,data,sreg;unsigned int i;const table11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90;/不带小数点的显示段码表const table010=0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10; /带小数点的显示段码表void clkint(void);/TMR0初始化子程序void tmint()T0CON=0XCF; /设定TMR0L工作于8位定时器方式/内部时钟,TMR0不用分频INTCON=0X20; /总中断禁止,TMR0中断允许,清除TMR0的中断标志INTCON2bits.TMR0IP=1; /TMR0中断高优先级RCONbits.IPEN=1; /使能中断优先级/系统其它部分初始化子程序void initial()TRISA=0x00; /A口设置为输出TRISB=0XF0; /RB1输出,RB4输入TRISC=0x00; /SDO引脚为输出,SCK引脚为输出TRISE=0x00; /E口设置为输出SSPCON1=0x30; /SSPEN=1;CKP=1,FOSC/4SSPSTAT=0xC0; /时钟下降沿发送数据PIR1=0; /清除SSPIF标志data=0X00; /待显示的寄存器赋初值PORTBbits.RB1=0;PORTAbits.RA3=0;PORTE=0; /将K1,K2,K3,K4四条列线置0 /SPI传输数据子程序void SPILED(char data)SSPBUF=data; /启动发送do;while(PIR1bits.SSPIF=0);PIR1bits.SSPIF=0;/显示子程序,显示4位数void dispaly()PORTAbits.RA5=0; /准备锁存for(k=0;k<4;k+)data=sk;if(k=2) data=table0data; /个位需要显示小数点else data=tabledata;SPILED(data); /发送显示段码for(k=0;k<4;k+)data=0xFF;SPILED(data); /连续发送4个DARK,使显示好看一些PORTAbits.RA5=1; /最后给锁存信号,代表显示任务完成/软件延时子程序void DELAY()for(i = 3553; -i ;)continue;/键扫描子程序void KEYSCAN()while(1)dispaly(); /调用一次显示子程序while(PORTBbits.RB4=0) DELAY(); /若有键按下,则软件延时 break;if (PORTBbits.RB4=0) break; /若还有键按下,则终止循环扫描,返回 /等键松开子程序void keyrelax()while(1)dispaly(); /调用一次显示子程序if (PORTBbits.RB4=1) break; /为防止按键过于灵敏,每次等键松开才返回 /*高优先级中断向量*/#pragma code InterruptVectorHigh=0x08void InterruptVectorHigh (void)_asmgoto clkint /跳到中断程序_endasm/中断服务程序#pragma code#pragma interrupt clkintvoid clkint()TMR0=0X13; /对TMR0写入一个调整值。因为写入TMR0后接着的/两个周期不能增量,中断需要3个周期的响应时间,/以及C语言自动进行现场保护要消耗周期INTCONbits.T0IF=0; /清除中断标志sreg=sreg+1; /中断计数器加1if(sreg=40) /中断次数为40后,才对S0,S1,S2,S3 操作sreg=0;s0=s0+1;if(s0=10)s0=0 ;s1=s1+1;if(s1=10)s1=0 ;s2=s2+1;if(s2=10)s2=0;s3=s3+1;if(s3=10) s3=0;/主程序/ 提供此单片机程序有问题请联系main()tmint(); /TMR0初始化initial(); /spi显示初始化及系统其它部分初始化INTCONbits.GIE=0; /总中断禁止while(1) for(k=0;k<4;k+)sk=0; sreg=0; /赋显示初值dispaly(); /调用一次显示子程序KEYSCAN(); /键扫描,直到开始键按下keyrelax(); /等键松开INTCONbits.GIE=1; /总中断允许KEYSCAN(); /键扫描直到停止键按下,在键扫描时有显示keyrelax(); /等键松开INTCONbits.GIE=0; /总中断禁止KEYSCAN(); /键扫描到清0键按下,在键扫描时有显示 keyrelax(); /等键松开-汇编语言版本的pic单片机计时秒表程序设计-;此程序实现计时秒表功能;时钟显示范围:00.00秒-99.99秒,分辨度:0.01秒;通过按键来启动计时、停止计时及清0;即第一次按下任意键开始计时,第二次按下任意键停止计时 ;第三次按下任意键使LED清0,等待下一次计时开始LIST P=18F458INCLUDE "P18F458.INC"S0 EQU 0X20 ;0.01 秒计时器S1 EQU S0+1 ;0.1 秒计时器S2 EQU S0+2 ;1 秒计时器S3 EQU S0+3 ;10 秒计时器SREG EQU S0+4 ;软计数器LEDF EQU S0+5 ;显示的LED的位置指示寄存器XW_TEMP EQU S0+6 ;用于中断中保护W的值XHOSTS EQU S0+7 ;用于中断中保护STATUS的值DEYH EQU S0+8DEYL EQU S0+9 ;以上两个寄存器用于软件延时HOSTF EQU S0+0A ;用于中断中保护FSR0L的值TEMP EQU S0+0B ;用于存放临时值ORG 0X00GOTO MAINORG 0X08GOTO CLKINT ;转向中断服务程序ORG 0X30;数字到段码的转换子程序(最好放在程序开头,避免超过2K的空间发生跨页读表) ;*不带小数点的共阳极码表*CONVERT ADDWF PCL,1RETLW 0XC0 ;0,显示段码与具体的硬件连接有关RETLW 0XF9 ;1RETLW 0XA4 ;2RETLW 0XB0 ;3RETLW 0X99 ;4RETLW 0X92 ;5RETLW 0X82 ;6RETLW 0XD8 ;7RETLW 0X80 ;8RETLW 0X90 ;9RETLW 0X88 ;ARETLW 0X83 ;BRETLW 0XC6 ;CRETLW 0XA1 ;DRETLW 0X86 ;ERETLW 0X8E ;FRETLW 0X7F ;"."RETLW 0XBF ;"-"RETLW 0X89 ;HRETLW 0XFF ;DARKRETURN;*带小数点的共阳极码表*CONVERT2 ADDWF PCL,1 RETLW 0X40 ;0RETLW 0X79 ;1RETLW 0X24 ;2RETLW 0X30 ;3RETLW 0X19 ;4RETLW 0X12 ;5RETLW 0X02 ;6RETLW 0X78 ;7RETLW 0X00 ;8RETLW 0X10 ;9RETURN;*SPI发送显示子模块*TRANSMIT CLRF PORTA ;LACK送低电平,为锁存做准备MOVWF SSPBUF ;启动发送 WAIT NOPBTFSS PIR1,SSPIFGOTO WAIT ;等待发送结束BCF PIR1,SSPIF ;清除中断标志RETURN;*显示子程序模块*DISPLAYMOVLW 0X01MOVWF LEDFMOVLW 0XA0MOVWF FSR0LAGAINXIANMOVF LEDF,WSUBLW 0X03BTFSS STATUS,ZGOTO XIANBMOVF INDF0,WCALL CONVERT2 ;若是个位,则查带小数点的码表GOTO TRANXIANB MOVF INDF0,WCALL CONVERTTRAN CALL TRANSMIT ;发送一个显示数据INCF FSR0LINCF LEDFMOVF LEDF,WSUBLW 0X05BTFSS STATUS,ZGOTO AGAINXIANMOVLW 0X01MOVWF LEDFXIANDARKMOVLW 0X27CALL CONVERTCALL TRANSMITINCF LEDFMOVF LEDF,WSUBLW 0X05BTFSS STATUS,ZGOTO XIANDARK ;显示4个"DARK"BSF PORTA,5 ;最后给一个锁存信号,代表一次显示任务完成RETURN;* S0计数溢出处理子程序*CS0CLRF S0INCF S1RETURN;* S1计数溢出处理子程序*CS1CLRF S1INCF S2RETURN;* S2计数溢出处理子程序*CS2CLRF S2INCF S3RETURN;* S3计数溢出处理子程序*CS3CLRF S3RETURN;*时钟中断服务程序*CLKINTMOVWF XW_TEMP ;保存W的值SWAPF STATUS,WMOVWF XHOSTS ;暂存STATUS的值MOVF FSR0L,WMOVWF HOSTF ;保存FSR0L的值。以上程序为中断现场保护MOVLW 0X13MOVWF TMR0L ;对TMR0L写入一个调整值,因为写入;TMR0L后接着的两个周期不能增量BCF INTCON,T0IF ;清除中断标志INCF SREGMOVF SREG,WSUBLW 0X28 ;TMR0L 每250us中断一次BTFSS STATUS,Z ;其中断40次后才执行对S0 S1 S2 S3 的操作GOTO TIFANCLRF SREGINCF S0MOVF S0,WSUBLW 0X0ABTFSC STATUS,ZCALL CS0 MOVF S1,WSUBLW 0X0ABTFSC STATUS,ZCALL CS1MOVF S2,WSUBLW 0X0ABTFSC STATUS,ZCALL CS2MOVF S3,WSUBLW 0X0ABTFSC STATUS,ZCALL CS3TIFANMOVF HOSTF,W ;以下为中断现场恢复MOVWF FSR0L ;恢复间接寻址指针FSR0L的值SWAPF XHOSTS,WMOVWF STATUS ;恢复STATUS的值SWAPF XW_TEMP,1SWAPF XW_TEMP,W ;恢复W的值RETFIE ;* TMR0初始化子程序*CLKINSUBMOVLW 0XCFMOVWF T0CON ;设定TMR0L工作于8位定时器方式 ;内部时钟,TMR0不用分频BCF INTCON,TMR0IF ;清除TMR0的中断标志BCF INTCON,GIE ;总中断禁止BSF INTCON,TMR0IE ;TMR0中断允许BSF INTCON2,2 ;TMR0中断高优先级BSF RCON,7 ;使能中断优先级RETURN;*系统初始化子程序*MAINSUBBCF TRISA,5 ;置RA5为输出方式,以输出锁存信号BCF TRISB,1BCF TRISA,3BCF TRISE,0BCF TRISE,1BSF TRISB,4 ;设置与键盘有关的各口的输入输出方式BCF TRISC,5BCF TRISC,3 ;设置SCK与SDO为输出方式BCF INTCON,GIE ;关闭所有中断MOVLW 0XC0MOVWF SSPSTAT ;设置SSPSTAT寄存器MOVLW 0X30MOVWF SSPCON1 ;设置SPI的控制方式,允许SSP方式,;并且时钟下降沿发送,与"74HC595当;其SCLK从低到高平跳变时,串行输入数据;(DI)移入寄存器"的特点相对应RETURN ;返回 ;*键扫描子程序*KEYSCANBCF PORTB,1BCF PORTA,3BCF PORTE,0BCF PORTE,1 ;送低电平至K1,K2,K3,K4 RETURN ;*键盘去抖子程序(8ms的延时)*KEYDELAYMOVLW 0X0AMOVWF DEYHAGAIN2 MOVLW 0XFFMOVWF DEYLAGAIN1 DECFSZ DEYL,1GOTO AGAIN1DECFSZ DEYH,1GOTO AGAIN2 ;具体程序语句参考3. 2节RETURN ;*显示缓冲区处理子程序*XIANHUANMOVLW 0XA0MOVWF FSR0LRLNCF S0,0MOVWF TEMPINCF TEMP,0 MOVWF INDF0INCF FSR0LRLNCF S1,0MOVWF TEMPINCF TEMP,0 MOVWF INDF0INCF FSR0LRLNCF S2,0MOVWF TEMPINCF TEMP,0 MOVWF INDF0INCF FSR0LRLNCF S3,0MOVWF TEMPINCF TEMP,0 MOVWF INDF0RETURN;*主程序*MAIN NOPCALL MAINSUB ;系统初始化CALL CLKINSUB ;调用时钟初始化子程序DENJIAN BCF INTCON,GIECLRF S0CLRF S1CLRF S2CLRF S3CLRF SREGCLRF LEDF ;S0=S1=S2=S3=0CALL XIANHUAN ;把S3、S2、S1、S0的值装入显示缓冲区CALL DISPLAY ;显示DENAN BCF INTCON,GIE ;关中断CALL KEYSCAN ;进行键扫描BTFSS PORTB,4GOTO XIAODOU1 ;如起始键按下,则消抖动GOTO DENAN ;如起始键没按下,则继续等待XIAODOU1CALL KEYDELAY ;延时消抖动CALL KEYSCAN ;再次进行键扫描BTFSC PORTB,4GOTO DENAN ;若为干扰,则再次等待键按下CLRF S0CLRF S1CLRF S2CLRF S3CLRF SREG ;设置新一次计时的初始条件 WAITS CALL KEYSCAN BTFSS PORTB,4GOTO WAITS ;为了防止按键过于灵敏,等键松开后再进行;下面的操作 BSF INTCON,GIE ;开总中断HERE CALL XIANHUAN ;显示缓冲区处理 CALL DISPLAY ;即时更新显示内容CALL KEYSCAN BTFSS PORTB,4GOTO XIAODOU ;若停止计时键按下,则消抖GOTO HERE ;若停止计时键没按下,则继续等待中断计时XIAODOUCALL DISPLAY ;利用消抖动时间调用显示程序CALL DISPLAY CALL DISPLAY CALL DISPLAYCALL DISPLAYCALL DISPLAY CALL DISPLAY CALL DISPLAY CALL DISPLAYCALL KEYSCANBTFSC PORTB,4GOTO HERE ;若为干扰,则继续等待停止键按下 BCF INTCON,GIE ;若停止键按下,则禁止中断CALL DISPLAY ;若不为干扰,则禁止中断,更新显示内容 WAITR CALL KEYSCAN BTFSS PORTB,4GOTO WAITR ;为了防止按键过于灵敏,等键松开后再进行;下面的操作 DENDAI CALL KEYSCANBTFSC PORTB,4GOTO DENDAI ;循环进行键扫描,等待清0键按下CALL KEYDELAY ;延时消抖CALL KEYSCANBTFSC PORTB,4GOTO DENDAI WAIT19 CALL KEYSCANBTFSS PORTB,4GOTO WAIT19 ;等键松开 GOTO DENJIAN ;新一次计时开始END

    注意事项

    本文(单片机计时秒表程序设计.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开